爬虫一般指从网络资源的抓取,通过Python语言的脚本特性,配置字符的处理非常灵活,Python有丰富的网络抓取模块,因而两者经常联系在一起Python就被叫作爬虫。爬虫可以抓取某个网站或者某个应用的内容提取有用的价值信息。有时还可以模拟用户在浏
览器或app应用上的操作行为,从而实现程序自动化。
1、爬虫架构
爬虫架构通常由5个部分组成,分别是调度器、URL管理器、网页下载器、网页解析器、应用程序。
- 调度器:相当电脑的CPU,主要负责调度URL管理器、下载器、解析器之间的协调工作。
- URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重复抓取URL和循环抓取URL。实现URL管理器通常有三种方式,通过内存、数据库、缓存方式实现。
- 网页下载器:通过传入一个URL地址来下载网页,将网页转换成一个字符串,网页下载器有urllib2(Python官方基础模块)包括需要登录、代理、和cookie,requests(第三方包)。
- 网页解析器:用于某个网页字符串进行解析,可以按照我们的要求来提取出有用的信息,也可以根据DOM树的解析方式来解析。常用的解析器有html.parser(python自带的)、beautifulsoup(也可以使用python自带的html.parser进行解析,也可以使用lxml进行解析,相对于其他几种来说要强大一些)、lxml(可以解析 xml 和 HTML),通过html.parser 和 beautifulsoup 以及 lxml 都是以DOM 树的方式进行解析。
- 应用程序:用于从网页中提取的有用数据组成的一个应用。
2、爬虫实现
2.1、Url管理器(基于内存)
class UrlManager():
"""
url 管理器,用来装载网址所有地址
"""
def __init__(self):
# 新url 集合
self.new_urls = set()
# 旧url 集合
self.old_urls = set()
def add_new_url(self, url):
"""
添加新的url到集合
:param url: url
:return:
"""
if url is None or len(url) == 0:
return
if url in self.new_urls or url in self.old_urls:
return
self.new_urls.add(url)
def add_new_urls(self, urls):
"""
批量添加urls
:param urls: url
:return:
"""
if urls is None or len(urls) == 0:
return
for url in urls:
self.add_new_url(url)
def get_url(self):
"""
获取url: 从new_urls集合获取url,放入到old_urls
:return:
"""
if self.has_new_url():
url = self.new_urls.pop()
self.old_urls.add(url)
return url
else:
return None
def has_new_url(self):

本文介绍了Python爬虫的基本架构,包括调度器、URL管理器、下载器、解析器的功能,以及使用Python库如requests、BeautifulSoup和lxml进行网页抓取和解析的具体实现。通过实例演示了如何管理URL和解析网页内容。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



