这篇文章记录利用python3实现一个简单爬虫的过程,爬虫爬取百度百科的相关连接,入口地址是面向对象这个页面:http://baike.baidu.com/view/125370.htm
1. 爬虫的基本知识
爬虫是通过网页之间的url连接不断的读取网上的内容的一个工具,根据这个概念,我们可以理解爬虫所需要的一些基本东西。
(1)url管理器
管理url的地址。首先应该有一个待爬取url的集合,用于管理已经收集到,但还没有爬取的url地址,从爬取的网页中收集到的url地址都应该存放在这个集合中。其次,为了防止网页之间的重复爬取,还应该有个已爬取url的集合,存放已经爬取过的url,防止重复爬取。url管理器应该实现新url的添加,url地址的移动(从待爬取移动到已爬取),从待爬取集合中获得url地址用于爬取等功能。
(2)网页下载器
当从url管理器中获得一个未爬取的url地址时,应该首先将其从网络中下载下来,所以需要一个网页下载器。python3中将python2的urllib和urllib2等模块合并为urllib,其中urllib.request可以用于打开网页,并读取保存网页的内容。
(3)网页解析器
当我们通过下载器得到了网页的内容后,我们应该对一个网页进行解析,获取我们想要的内容,比如图片、url链接等等,这就需要一个网页解析器。python3自带网页解析模块,也可以使用BeautifulSoup模块进行网页的解析,这个模块功能实用而且简单。
网页解析器能够获取网页上的url链接,我们可以将获取到的链接添加进url管理器中用作进一步的爬取,这样就可以不断的爬取。
(4)输出
通过网页解析器获取到的内容通过文件保存的形式输出,供其他需求使用。(本文以html的网页形式进行输出)
2. 代码实现
(1)url管理器:url_manager.py
# coding:utf8
'''
crawler main function, call for other function
Created on 2015-12-31
'''
# 实现一个url管理器的类
class UrlManager(object):
# url管理器里面有两个url集合,分别保存已经爬取过的url和未爬取的url
def __init__(self):
# 未爬取的url
self.new_urls = set()
# 已爬取的url
self.old_urls