爬虫——综合案例流程版

爬虫综合案例 开发步骤:

导入类库

创建爬虫通用类

初始化init方法

类中编写重试下载模块

类中编写真正下载模块

类外编写保存函数

类外编写获取robots.txt函数

类外编写抽取网址函数

类中编写网址正常化函数

创建下载限流类

爬虫通用类封装run方法

创建爬虫对象运行

导入类库

requests:爬虫请求类库

hashlib:哈希加密类库

queue:队列

re:正则

time:时间

threading>Thread:多线程

datetime>datetime:日期时间

urllib>parse>urlparse,urljoin,urldefrag:网址解析、拼接、截#取

urllib>robotparser:robot.txt解析

目录名>文件名>MongoCache:存储到mongodb

创建爬虫通用类

功能:从初始网址爬取并抽取内层网址继续爬取
技术:随机User-Agent生成,队列,多线程,robots解析,下载限流,mongodb存储,爬取深度限制,重试下载,抽取特定路由,真正下载,网址正常化,功能封装
规范:用到类属性和类方法的方法在类里编写,用不到的在类外面编写,可以建个助手目录utils存放这些助手函数

初始化init方法

通常在开发过程中不可能一下子就把init写得完整,先把最易用到的,已经想到的初始化,后面的在编写其他函数想到时再来init里编写

生成UserAgent对象,随机生成headers

保存初始网址

创建队列并放入初始网址

使用不同的队列会造成BFS和DFS的效果 使用先进先出队列产生广度优先搜索,使用先进后出(栈)产生深度优先搜索

创建robots解析对象传入初始网址

设置指定路由

创建限流器对象并初始化间隔时间

创建mongodb存储对象

设置网址访问深度,在类外设置最大深度定量

类中编写重试下载模块

调用retry装饰器装饰该函数并设置最多重试次数

设置函数参数:网址,数据,请求方式,代理

编写POST和GET爬取方式

插入断言:状态码不为200则抛出异常

返回爬取结果content


text:返回的是unicode 型的数据,一般是在网页的header中定义的编码形式,如果想要提取文本就用text;
content:返回的是bytes,二级制型的数据;想要提取图片、文件,就要用到content;
.text是现成的字符串,.content还要编码,但是.text不是所有时候显示都正常,这是就需要用.content进行手动编码。

类中编写真正下载模块

将重试下载模块封装在此,不对用户展示重试下载接口

 

函数参数:网址,数据(默认None),请求方式(默认GET),代理(默认为空)

输出一句下载信息

try~except 捕获重试下载模块的异常

返回结果


类外编写保存函数

保存函数:将爬取内容MD5加密存储到文件中,注:使用mongodb保存结果则无需次函数

 

创建md5加密对象

加密update结果

拼接保存文件路径

写入文件

类外编写获取robots.txt函数

创建robot文件解析对象

拼接robots.txt所在完整地址

获取robots.txt文件

将robot.txt文件读取到rp对象中

返回该解析对象

类外编写抽取网址函数

方式:lxml、BeautifulSoup、正则

lxml

1 html = lxml.html.fromstring(html_content) 2 html_data = html.xpath('//a/@href')

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgszd.html