利用python写一个爬虫,爬取百度百科的某一个词条下面的全部链接和每一个链接内部的词条主题和摘要。利用request库爬取页面,然后利用BeautifulSoup对爬取到的页面提取url和关键内容。使用一个类来管理url,使爬取到的url不会被重新爬取。遍历url的时候,将每个url指向的html页面爬取下来,提取出感兴趣的文本,保存到文件。最后生成一个某一个词条下面的包含的所有词条和摘要的文件。
用到的Python的库:
1. urllib.request
2.BeautifulSoup
关于urllib.request
urllib.request 是python 3 下面的一个库,不支持python2,(python2的是requests库),本来是想用requests的,但是python的中文编码问题一直没有解决,但好想问题已经找到了,就是抓取到的网页的内容编码是ios-8859-1,但是网页的response头部的编码是utf-8,导致编码不统一,造成乱码。解决方案,在另外的一遍文章讨论。总之就是,用了这个urllib.request库,当然源代码里面也有使用requests库,造成乱码的源码。这是关于乱码的分析的文章http://www.jianshu.com/p/f819ab06a53a。
关于BeautifulSoup
BeautifulSoup是一个神器啊,将抓取到的html,转换为一颗dom树,可以通过很简单的语法,来访问特定的标签和标签下面的属性。而且还支持正则表达式。
源码的思路分析:
源码包括5个文件,main.py , HtmlParse.py,UrlManage.py,html_outputer.py,html_download2.py
main.py 是程序的入口
HtmlParse.py,UrlManage.py,html_outputer.py,html_download2.py 每一个文件对应一个类,他们分别的功能是
UrlManage.py 负责url管理,这个类下面的数据成员是 old_urlset 和new_urlset,分别表示已经爬取的页面,和没有爬取的页面。
html_download2.py 负责将网页下载下来(这里很容易出现下载下来的网页是乱码的问题,以后慢慢讨论这个问题)
HtmlParse.py 负责将爬取下来的网页做分析。利用BeautifulSoup,提取网页的词条主题和里面没包含的url
html_outputer.py 负责将分析之后得到的词条主题写到文件里面。
程序的目录:
输出文件是output.txt, 程序运行结果:
shell的运行结果:
通过main.py 页面里面count 变量设置爬取的页面数,比如100条
源代码链接:
https://github.com/zhaozhengcoder/Spider
参考教程:
廖雪峰的python教程http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
静觅的python教程
http://cuiqingcai.com/category/technique/python
BeautifulSoup官方的文档
requests库的官方文档