[实战]爬取iask 爱问问题 导入 MONGODB 数据库

直接上源码:

https://github.com/huahuizi/Iask-crawl

Python
# iask 采集的主文件 # coding:utf-8 import requests, re from pyquery import PyQuery as pq from requests.exceptions import RequestException from fake_useragent import UserAgent SITE = "http://iask.sina.com.cn" from bs4 import BeautifulSoup as bs4 from Tools import Tool import pymongo from config import * headers = { 'User-Agent':UserAgent().chrome, } def getHtml(url): try: res = requests.get(url,headers=headers) if res.status_code == 200: return res.text return None except RequestException: return None def get_next_url_one(content): try: return SITE+bs4(content,"lxml").select('.btn-page')[-1]['href'] except Exception as e: print(e) pass def get_list_href(url): html1 = getHtml(url) doc = pq(html1) for a in doc('.question-title a').items(): page_url = SITE+a.attr.href get_detail_page(page_url) print(a.text()) nex = get_next_url_one(html1) print('正在抓取',nex) get_list_href(nex) def get_detail_page(url): html = getHtml(url) newselect = bs4(html, "lxml").select('pre') try: title = Tool().replace(newselect[0].text) answer = Tool().replace(newselect[1].text) save_mongo({'title':title,'answer':answer}) except Exception as e: print(e) pass def save_mongo(dic): clent = pymongo.MongoClient(host='localhost',port=27017) clent.MONGO_DB.MONGO_TB.insert_one(dic) print("正在保存",dic) # pass if __name__ == '__main__': url = "http://iask.sina.com.cn/c/213-goodAnswer-180-new.html" html = getHtml(url) nextii = get_next_url_one(html) get_list_href(nextii)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# iask 采集的主文件
 
# coding:utf-8
import requests , re
from pyquery import PyQuery as pq
from requests . exceptions import RequestException
from fake_useragent import UserAgent
SITE = "http://iask.sina.com.cn"
from bs4 import BeautifulSoup as bs4
from Tools import Tool
import pymongo
from config import *
headers = {
     'User-Agent' : UserAgent ( ) . chrome ,
}
def getHtml ( url ) :
     try :
         res = requests . get ( url , headers = headers )
         if res . status_code == 200 :
             return res . text
         return None
     except RequestException :
         return None
 
def get_next_url_one ( content ) :
     try :
         return    SITE + bs4 ( content , "lxml" ) . select ( '.btn-page' ) [ - 1 ] [ 'href' ]
     except Exception as e :
         print ( e )
         pass
 
 
def get_list_href ( url ) :
     html1 = getHtml ( url )
     doc = pq ( html1 )
     for a in doc ( '.question-title a' ) . items ( ) :
         page_url = SITE + a . attr . href
         get_detail_page ( page_url )
         print ( a . text ( ) )
 
     nex = get_next_url_one ( html1 )
     print ( '正在抓取' , nex )
     get_list_href ( nex )
 
def get_detail_page ( url ) :
     html = getHtml ( url )
     newselect = bs4 ( html , "lxml" ) . select ( 'pre' )
     try :
         title = Tool ( ) . replace ( newselect [ 0 ] . text )
         answer = Tool ( ) . replace ( newselect [ 1 ] . text )
         save_mongo ( { 'title' : title , 'answer' : answer } )
     except Exception as e :
         print ( e )
         pass
 
def save_mongo ( dic ) :
     clent = pymongo . MongoClient ( host = 'localhost' , port = 27017 )
     clent . MONGO_DB . MONGO_TB . insert_one ( dic )
     print ( "正在保存" , dic )
     # pass
 
if __name__ == '__main__' :
     url = "http://iask.sina.com.cn/c/213-goodAnswer-180-new.html"
     html = getHtml ( url )
     nextii = get_next_url_one ( html )
     get_list_href ( nextii )
Python
# Tools 采集内容处理文件 #coding:utf-8 import re #处理页面标签类 class Tool: #将超链接广告剔除 removeADLink = re.compile(' <div class="link_layer.*?</div> ') #去除img标签,1-7位空格,&nbsp; removeImg = re.compile('<img.*?>| {1,7}|&nbsp;') #删除超链接标签 removeAddr = re.compile('<a.*?>|</a>') #把换行的标签换为\n replaceLine = re.compile(' <tr>| <div>|</div> | ') #将表格制表 <td> 替换为\t replaceTD= re.compile(' <td>') #将换行符或双换行符替换为\n replaceBR = re.compile(' | ') #将其余标签剔除 removeExtraTag = re.compile('<.*?>') #将多行空行删除 removeNoneLine = re.compile('\n+') def replace(self,x): x = re.sub(self.removeADLink,"",x) x = re.sub(self.removeImg,"",x) x = re.sub(self.removeAddr,"",x) x = re.sub(self.replaceLine,"\n",x) x = re.sub(self.replaceTD,"\t",x) x = re.sub(self.replaceBR,"\n",x) x = re.sub(self.removeExtraTag,"",x) x = re.sub(self.removeNoneLine,"\n",x) #strip()将前后多余内容删除 return x.strip()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Tools 采集内容处理文件
#coding:utf-8
import re
 
#处理页面标签类
class Tool :
 
     #将超链接广告剔除
     removeADLink = re . compile ( '
 
<div class="link_layer.*?</div>
 
 
' )
     #去除img标签,1-7位空格,&nbsp;
     removeImg = re . compile ( '<img.*?>| {1,7}|&nbsp;' )
     #删除超链接标签
     removeAddr = re . compile ( '<a.*?>|</a>' )
     #把换行的标签换为\n
     replaceLine = re . compile ( '
 
<tr>|
 
<div>|</div>
 
 
|
 
' )
     #将表格制表
 
< td >
替换为 \ t
     replaceTD = re . compile ( '
 
<td>' )
     #将换行符或双换行符替换为\n
     replaceBR = re . compile ( '
 
|
' )
     #将其余标签剔除
     removeExtraTag = re . compile ( '<.*?>' )
     #将多行空行删除
     removeNoneLine = re . compile ( '\n+' )
 
     def replace ( self , x ) :
         x = re . sub ( self . removeADLink , "" , x )
         x = re . sub ( self . removeImg , "" , x )
         x = re . sub ( self . removeAddr , "" , x )
         x = re . sub ( self . replaceLine , "\n" , x )
         x = re . sub ( self . replaceTD , "\t" , x )
         x = re . sub ( self . replaceBR , "\n" , x )
         x = re . sub ( self . removeExtraTag , "" , x )
         x = re . sub ( self . removeNoneLine , "\n" , x )
         #strip()将前后多余内容删除
         return x . strip ( )
Python
#config 数据库 配置文件 MONGO_DB="IASK" MONGO_TB="AUSWER"
1
2
3
#config 数据库 配置文件
MONGO_DB = "IASK"
MONGO_TB = "AUSWER"



  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
### 如何将爬取的数据导入 MongoDB 数据库 要将爬虫数据导入 MongoDB 数据库,可以按照以下方法进行操作。以下是完整的教程和示例代码。 #### 1. 安装必要的依赖 在开始之前,需要确保安装了 `pymongo` 和 MongoDB 数据库。如果尚未安装,请参考以下命令: ```bash pip install pymongo ``` MongoDB 的安装可以参考引用内容[^1]中的说明。 #### 2. 连接到 MongoDB 数据库 使用 `pymongo` 库连接到 MongoDB 数据库。可以通过指定主机名和端口号来建立连接。 ```python from pymongo import MongoClient # 创建连接对象 client = MongoClient(host='localhost', port=27017) ``` #### 3. 选择数据库和集合 连接成功后,可以选择目标数据库和集合(类似于表的概念)。如果数据库或集合不存在,MongoDB 会在首次插入数据时自动创建。 ```python # 选择数据库(如果不存在会自动创建) db = client['blog_database'] # 选择集合(如果不存在会自动创建) collection = db['blog'] ``` #### 4. 插入爬取的数据 假设爬虫已经获取了一组数据,可以通过 `insert_one` 或 `insert_many` 方法将数据插入到集合中。 ##### 单条数据插入 ```python data = {'title': 'Sample Title', 'content': 'This is a sample content.'} collection.insert_one(data) # 插入单条数据 ``` ##### 批量数据插入 ```python data_list = [ {'title': 'Title 1', 'content': 'Content 1'}, {'title': 'Title 2', 'content': 'Content 2'} ] collection.insert_many(data_list) # 插入多条数据 ``` #### 5. 使用 `mongoexport` 和 `mongoimport` 导入导出数据 如果需要将数据备份或从文件导入MongoDB 数据库,可以使用 `mongoexport` 和 `mongoimport` 命令行工具。具体用法如下: ##### 导出数据 ```bash mongoexport --host=localhost --port=27017 -d blog_database -c blog -o /path/to/exported_data.json ``` ##### 导入数据 ```bash mongoimport --host=localhost --port=27017 -d blog_database -c blog --file /path/to/imported_data.json ``` 更多关于 `mongoexport` 和 `mongoimport` 的参数说明可以参考引用内容[^3]。 #### 6. 完整示例代码 以下是一个完整的 Python 示例,展示如何将爬取的数据存储到 MongoDB 数据库中。 ```python from pymongo import MongoClient # 连接 MongoDB 数据库 client = MongoClient(host='localhost', port=27017) # 选择数据库和集合 db = client['blog_database'] collection = db['blog'] # 爬取的数据示例 data_list = [ {'title': 'Title 1', 'content': 'Content 1'}, {'title': 'Title 2', 'content': 'Content 2'} ] # 插入数据到集合 try: collection.insert_many(data_list) print("数据插入成功!") except Exception as e: print(f"数据插入失败: {e}") ``` ### 注意事项 - 确保 MongoDB 数据库服务已启动并运行正常。 - 如果 MongoDB 数据库设置了用户名和密码认证,需要在连接时提供相应的认证信息[^3]。 - 在实际项目中,建议对爬取的数据进行清洗和预处理后再存储到数据库中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值