博主将来想从事数据挖掘算法相关的工作,数据挖掘的前提是有数据可用,于是想学些与爬虫有关的技术。前几天从imooc中学习了Python开发简单爬虫课程(课程网址),功能是爬取百度百科的内容,如果网页上还有相关链接,把相关链接的网页的内容也爬取下来。感觉老师讲的非常好,对于刚接触爬虫的、对面向对象编程有一定了解的同学非常合适,详细程度可以说是手把手教学了。这里记录一下我的学习过程。只是个人理解,说的不对欢迎批评指正。
首先介绍我的Python编程环境:WIN7+eclipse+PyDev+Python2.7 虽然Python已经有了更高版本Python3.5.*但是它相对Python2.7有较大的调整,网上关于3.5的教程也有限。我刚开始的时候就装了3.5,编程时遇到问题去百度,发现很多问题是由2.7和3.5两个版本编程兼容性导致的,在这方面吃了些亏,才重新安装了Python2.7,感觉不错。
下面是学习过程的记录。
爬虫的架构:爬虫调度端,URL管理器,网页下载器,网页解析器,有价值信息输出与存储。
1.爬虫调度端。这部分因该具有的功能有输入要爬取的首页,还有爬虫的整体调度,如启动爬虫、url管理器的启动,网页下载器的启动,网页解析的启动,网页输出、存储等。下面直接看代码。
# coding: utf-8
from baike_spider import html_downloader, url_manager, html_parser, html_outputer
class SpiderMain(object):
def __init__(self):#构造方法
self.urls = url_manager.UrlManager()#初始化URL管理器
self.downloader = html_downloader.HtmlDownloader()#初始化网页下载器
self.parser = html_parser.HtmlParser()#初始化网页解析器
self.outputer = html_outputer.HtmlOutputer()#初始化输出器
def craw(self, root_url):#开始执行爬虫的方法
count = 1#计数器,计数爬取页面的总数量
count2 = 0#计数器,计数爬取失败的网页个数
self.urls.add_new_url(root_url)#传入网页入口
while self.urls.has_new_url():#对网页内包括的连接网页循环抓取,先判断URL管理器不空
try:#有些页面可能失效了,要有异常处理
new_url =