Python进行数据爬取
1.基本的爬虫架构
主要包括调度器,URL管理器,网页下载器,网页解析器这些部分,实现价值数据的获取。
1.1 URL管理器
对待抓取的URL集合和已抓取的URL集合进行管理,避免重复抓取和循环抓取。
主要有5个部分的功能,判断待添加URL是否在容器中、添加新的URL到待爬取集合、判断是否还有待爬取集合、获取待爬取URL、将URL从待爬取的集合移动到已爬取集合中。
分类:Python内存(待爬取和已爬取两个set()集合),关系数据库(eg:MySQL,建表来实现存储),缓存数据库(eg:redis,支持set数据结构)。大型公司一般采用高效的缓存数据库作为URL管理器,小型的或想要永久保存的采用关系数据库作为URL管理器,小型的不需要保存的可以直接存储在Python内存中。
1.2 网页下载器(爬虫的核心组件)
将互联网上URL对应的网页下载到本地。
主要功能有:将待获取URL对应的互联网网页以HTML的形式下载到本地,并以本地文件或内存字符串的形式进行存储,以便后续的处理。
分类:urllib2(Python官方基础模块),requests(Python的第三方插件)等。
1.2.1 urllib2下载网页的方法
a.使用urlopen函数直接获取网页信息
具体代码:
b.添加data(用户需要输入的数据),http header数据,结合urllib2的Request和urlopen函数来获取网页信息
具体代码:
c.添加特殊情景的处理器,根据不同的URL选择不同的处理器(eg:HTTPCookieProcessor、ProxyHandler、HTTPSHandler、HTTPRedirectHandler),综合使用urllib2的build_opener、install_opener和urlopen函数来获取网页信息。
具体代码(以Cookie为例):
1.3 网页解析器
从网页中提取有价值数据的工具。
主要功能有:提取价值数据,提供新的待爬取的URL列表。
分类:模糊匹配(正则表达式),结构化解析(html.parser,Beautiful Soup第三方插件,lxml)。其中Beautiful Soup这个第三方插件可以使用html.parser或lxml作为解析器,功能较强大。
1.3.1 结构化解析
将整个网页文档加载为一个DOM(Document Object Model文档对象模型)树。
1.3.2 Beautiful Soup网页解析语法
a.根据下载的HTML网页,创建BeautifulSoup对象。此时即将整个网页文档字符串下载为一个DOM树。
b.根据DOM树进行节点的搜索,对应的方法有find_all(搜索出所有满足要求的节点)和find(搜索出第一个满足要求的节点),这两种方法的参数设置相同,分别为name,attrs,string,分别对应为名称、属性、文字,并依据这三种信息进行搜索。
c.在获取节点后,我们可以对节点的名称、属性、文字等进行解析,访问节点信息。