搜狗词库爬虫(2):基础爬虫框架的运行流程

时间:2024-03-22 13:39:11

系列目录:

搜狗词库爬虫(1):基础爬虫架构和爬取词库分类

项目Github地址:https://github.com/padluo/sogouSpider

各模块对应的内容如下:

getCategory.py,提取词库分类ID和名字,以字典形式返回。

SpiderMan.py,爬虫调度器。

UrlManager.py,URL管理器。

HtmlDownloader.py,网页下载器。

HtmlParser.py,网页解析器。

DataOutput.py,数据存储器。

SogouDictParser.py,搜狗词库解析器。

基础爬虫框架的动态运行流程

搜狗词库爬虫(2):基础爬虫框架的运行流程

URL管理器

URL管理器UrlManager.py管理待爬取URL集合和已爬取URL集合,防止链接重复爬取,因为链接重复时容易造成死循环,防止循环抓取(如两个网页相互引用造成死循环)。URL管理器实现方式主要有三种:内存去重、关系数据库去重、缓存数据库去重。大型爬虫基本上采用缓存数据库的去重方案,搜狗词库爬虫的爬取数量较小,因此采用Python中set这个内存去重方式。

搜狗词库爬虫(2):基础爬虫框架的运行流程

URL管理器需要有如下基本功能。

URL管理器除了具有两个URL集合,还提供如下接口:

has_new_url,判断是否有待爬取的URL。

add_new_url(url), add_new_urls(urls),添加新的URL到未爬取集合中。

get_new_url,获取一个未爬取的URL。

new_url_size,获取未爬取的URL集合的大小。

old_url_size,获取已经爬取的URL集合的大小。

网页下载器

网页下载器HtmlDownloader.py用来下载网页,需要注意网页的编码,下载器用到Requests模块,实现一个接口download(url)

网页解析器

网页解析器HtmlParser.py主要提供一个parser对外接口,输入参数为当前页面的URL和HTML下载器返回的网页内容。内部实现两个功能,一是解析出新的URL链接交给URL管理器,二是解析出有效数据交给数据存储器。

因为词库文件的数量较多,所以某一类的词库往往会分多个页面来展示(常见的如通过点击上一页、下一页跳转),所以要完整下载者一类的词库必须遍历这一类词库的所有页面。

解析出新的URL链接交给数据存储器,通过正则表达式分析当前访问页面的源码,获取当前页面可以跳转到的其他页面的URL,将这些URL交给URL管理器。

解析出有效数据交给URL管理器,通过正则表达式获取分析当前访问的页面源码,获取可以下载的词库文件的URL,存入一个临时的列表List中,交给数据存储器。

数据存储器

数据存储器DataOutput.py主要包括两个方法:store_data(data)用于将解析出来的词库文件的URL存储到内存中,并做去重工作,output_html则逐一下载各个词库文件并按分类在本地存储。


微信公众号「数据分析」,分享数据科学家的自我修养,既然遇见,不如一起成长。
搜狗词库爬虫(2):基础爬虫框架的运行流程