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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/padluo/article/details/78066791

基础爬虫架构

基础爬虫架构

基础爬虫框架主要包括五大模块:爬虫调度器、URL管理器、网页下载器、网页解析器、数据存储器。

爬虫调度器:启动、执行、停止爬虫,统筹其他模块的协调工作。

URL管理器:管理已爬取的URL和未爬取的URL这两个数据,提供获取新URL链接的接口。

网页下载器:将URL管理器提供的一个URL对应的网页下载下来,存储为字符串,这个字符串传送给网页解析器进行解析。

网页解析器:从网页下载器中获取已经下载的HTML网页,从中解析出新的URL给URL管理器,解析出有效数据提交给数据存储器。

数据存储器:将网页解析器解析出来的数据通过文件或者数据库的形式存储。

爬取词库分类

词库分类的网页为http://pinyin.sogou.com/dict/,通过浏览器的开发者工具观察网页源码的结构,同级分类的源码中的href(超链接)的结构是一样的,仅仅是id或名字不同,可通过正则表达式提取网页中的分类,并用嵌套字典存储多级分类。

得到大分类

词库分类网页http://pinyin.sogou.com/dict/的大类链接举例:

<a href="/dict/cate/index/167?rf=dictindex&amp;pos=dict_rcmd" target="_blank">城市信息大全</a>

大类链接编译为Pattern实例,使用Pattern实例处理网页文本获取ID和名字两个group,以列表形式返回,存储为dict。

bigCatePattern = re.compile(r"href='/dict/cate/index/(\d+).*?>(.*?)<")
bigCateURL = 'http://pinyin.sogou.com/dict/'
response = requests.get(bigCateURL, headers=headers)
response.encoding = 'utf-8'
bigCateData = response.text
result = re.findall(bigCatePattern, bigCateData)

在词库分类的网页http://pinyin.sogou.com/dict/爬取大类链接时,有一个迷惑的地方,从Chrome的开发者工具页面上看,大类链接和小类链接的URL是类似的,用Pattern实例re.compile(r'href="/dict/cate/index/(\d+).*?>(.*?)<')会匹配到大类链接和小类链接,和从开发者工具页面看到的结果是一致的,而用Pattern实例re.compile(r"href='/dict/cate/index/(\d+).*?>(.*?)<")只匹配到大类链接,和我们要达到的目标一致。

从大分类得到小分类

词库分类网页http://pinyin.sogou.com/dict/的小类链接举例:

<a href="/dict/cate/index/360?rf=dictindex" target="_blank" class="">全国</a>

从大分类页面http://pinyin.sogou.com/dict/cate/index/+bigCateID得到小分类的链接举例:

<a href="/dict/cate/index/167"></a>
...
<a class="citylist" href="/dict/cate/index/360">全国</a>

bigCateID是大分类的id,正则表达式提取小分类的id和名字时,需要注意的是,re.compile(r'href="/dict/cate/index/(\d+)">(.*?)<'),会匹配到大分类的id,需要剔除掉。如上面的页面会同时匹配到大分类链接和小分类链接。

smallCatePattern = re.compile(r'href="/dict/cate/index/(\d+)">(.*?)<')
smallCateBaseURL = 'http://pinyin.sogou.com/dict/cate/index/'

微信公众号「数据分析」,分享数据科学家的自我修养,既然遇见,不如一起成长。
数据分析

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试