系列目录:
项目Github地址:https://github.com/padluo/sogouSpider
各模块对应的内容如下:
getCategory.py
,提取词库分类ID和名字,以字典形式返回。
SpiderMan.py
,爬虫调度器。
UrlManager.py
,URL管理器。
HtmlDownloader.py
,网页下载器。
HtmlParser.py
,网页解析器。
DataOutput.py
,数据存储器。
SogouDictParser.py
,搜狗词库解析器。
基础爬虫框架的动态运行流程
URL管理器
URL管理器UrlManager.py
管理待爬取URL集合和已爬取URL集合,防止链接重复爬取,因为链接重复时容易造成死循环,防止循环抓取(如两个网页相互引用造成死循环)。URL管理器实现方式主要有三种:内存去重、关系数据库去重、缓存数据库去重。大型爬虫基本上采用缓存数据库的去重方案,搜狗词库爬虫的爬取数量较小,因此采用Python中set这个内存去重方式。
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
则逐一下载各个词库文件并按分类在本地存储。
微信公众号「数据分析」,分享数据科学家的自我修养,既然遇见,不如一起成长。