目标:利用python做爬虫爬取百度百科python词条页面的数据
爬虫结构运行的流程:
url管理器:
管理带抓取url集合和已抓取url集合
防止重复抓取和循环抓取
支持的功能:
添加新url到待爬取的集合中
判断待添加url是否在集合中
从集合中获取待爬取url
判断集合中是否还有待爬取的url
将url从待爬取移动到已爬取集合中
网页下载器:
将互联网上url对应的网页下载到本地的工具
网页解析器:
在后面的实例中详细讲解
实例讲解:
分成四个部分:
url_manager,url_downloader, html_parser, html_outputer:
url_manager: #url管理器
class UrlManager(object):
#初始化url列表:存取爬取过得url列表,存取未爬取的url列表
def __init__(self):
self.old_urls = set() #已爬取过得url列表集合
self.new_urls = set() #未爬取过得url列表集合
#向url管理器添加一个新的待爬取的url
def add_new_url(self,url): #向url管理器添加一个新的url
if url is None:
return
#若这个url既不在爬取过得url列表集合也不在未爬取的url列表集合
if url not in self.old_urls and url not inself.new_urls:
self.new_urls.add(url) #将这个url添加到未爬取的url列表集合
def add_new_urls(self,urls): #向url管理器添加批量url
if urls is None or len(urls) ==0:
return
for url in urls:
self.add_new_url(url)
def has_new_url(self): #判断url管理器是否有新的url
return len(self.new_urls) !=0
def get_new_url(self): #从待爬取的url列表中获取一个url
new_url= self.new_urls.pop()
#pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
self.old_urls.add(new_url)
return new_url
url_downloader: #url下载器
import urllib2
class HtmlDownloader(object):
def download(self,url): #返回下载好的url的内容
if url is None:
return None