什么叫网络爬虫,百度贴吧 爬虫
工具:pyspider
数据库:mongodb
思路:假设你要根据两个关键字搜索百度知道答案,比如:"购物"和"价格";组建爬虫的url,需要把这两个关键字转化为全球资源定位器(统一资源定位器)编码的格式,网址编码教程详见;取出搜索页面列表上面所有项的全球资源定位器(统一资源定位器)链接;然后,爬取步骤3的url,取出页面上面的问题和最佳答案;循环往复,进行2、3、4步骤;代码: #!/usr/hxsdhs/env python #-*-编码:utf-8-*-来自py spider。libs。从urllib导入base _ handler。解析import quote,un quote from py mongo import mongo client import date time import time import random client=mongo client(自定义数据库接口)db=客户端。自定义数据库名类处理程序(基本处理程序):crawl _ config={ } key _ word 1=quote(自定义关键字1.encode( GB 2312 ))key _ word 2 _ list=[自定义关键字2 ]key _ word 2 _ list=[quote(I . encode( GB 2312 )]for I in key _ word 2 _ list]URL _ format=https://zhidao.baidu.com/search?word={ } ie=gbk site=-1 sites=0 date=0pn={ } page _ num=76 #最大页码start_page=0 #开始的页码max_random=5 #随机数的最大值headers1={ Accept: text/html,application/xhtml xml,application/XML;q=0.9,image/webp,image/apng,*/*;q=0.8,应用/签约-交换;v=b3 , Accept-Encoding: gzip,deflate,br , Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 ,连接: 保持活动,主机:“zhidao.baidu.com”升级-不安全-请求: 1 ,用户-代理:自定义系统的浏览器版本号,} fetch_count=0 #访问美国石油学会(美国石油协会)计数@ every(minutes=24 * 60)def on _ start(self):start _ time=time。处理程序中kw2的时间()。关键字2列表:kw=处理器。范围内p的key _ word 1 kw2(处理程序。start _ page,处理程序。page _ num):URL=处理程序。URL _格式。格式(kw,p * 10)处理器。headers 1[ Referer ]=URL处理程序。fetch _ count=1 #抓取次数累计start _ time=开始时间处理程序。fetch _ count *随机。randint(0,处理程序。max _ random)自我。crawl(URL,callback=self.index_page,headers=Handler.headers1,save={url: url, kw2: unquote(kw2, GB2312 ), start_time: start_time},exe time=start _ time)@ config(age=24 * 60 * 60)def index _ page(self,response):start _ time=response。save[ start _ time ]items():URL=I( dt a ).attr(“href”)处理程序。headers 1[ Referer ]=响应。保存[ URL ]处理程序。fetch _ count=1 #抓取次数累计start _ time=开始时间处理程序。fetch _ count *随机。randint(0,处理程序。max _ random)自我。爬网(URL,callback=self.detail_page,headers=Handler.headers1,save={ kw2 :响应。save[ kw2 ]},exetime=start _ time)@ config(priority=2)def detail _ page(self,response):data={ } data[ URL ]=response。URL数据[问题]=响应。doc(# wgt-ask h1 ).文本()。strip()数据[答案]=响应。doc( div。最佳文本’).文本()。剥离()。替换( n , ).替换(,)如果不是数据[答案]:数据[答案]=响应。doc( div。回答-正文’).文本()。剥离()。替换( n , ).替换(, )数据[ kw2 ]=响应。保存[ kw2 ]数据[ kw1 ]=un quote(处理程序。key _ word 1, GB 2312 )数据[ crawl _ time ]=日期时间。日期时间。strp时间(日期时间。日期时间。现在().strftime(%Y-%m-%d %H:%M:%S ), % Y-% d % H:% M:% S )如果数据库[自定义表名].find({kw2 :数据[kw2],问题:数据[问题]}).count()==0: result=db[自定义表名].insert(data) else: result=db[自定义表名].更新(数据)打印(结果)