3.1 Python爬虫模块的安装
3.1.1 requests模块的安装及验证
本书使用的Python版本是3.6,需要安装的爬虫模块是requests和Beautiful Soup。requests是使用Python语言编写的用来获取网页内容的插件。Python自带的urllib2模块使用起来太复杂,使用requests模块可以用很简洁的代码获取网页内容,而不必担心网络错误、连接问题和数据压缩等。使用pip命令默认安装最新版本的requests。
requests安装完成后,可以在Python命令行中做简单测试。
以上代码表示使用requests访问飞谷云网站的首页,并打印出网页的HTML代码。
3.1.2 Beautiful Soup模块的安装及验证
Beautiful Soup是针对网页HTML或XML代码进行快速解析并提取其中标签内容的工具。使用pip命令安装Beautiful Soup 4版本:
也可以选择下载源码安装。从相关网站下载beautifulsoup4-4.2.0.tar.gz。
配合Beautiful Soup,还要安装XML解析器。XML解析器有多种类型,以下以lxml为例。在Ubuntu系统中使用apt-get命令安装:
安装完成后,可以在Python命令行中做简单测试,接着上面requests的代码编写:
Beautiful Soup 4安装后在Python中的模块名称是bs4,上面的第3行代码从bs4模块中引入BeautifulSoup类。第4行是对网页r中的HTML代码使用lxml解析器进行解析,解析后的内容放入对象soup中,然后提取HTML的<title>xxxx</title>标签中的属性值xxxx(也就是页面标题)。
Beautiful Soup对象在创建时,必须指定一种解析器名称。可供选择的解析器有5种。其中,lxml解析器的速度快、容错能力强,是其官网上推荐使用的解析器。
使用爬虫抓取网页信息后,得到的是一串HTML字符,需要大家手动从里面提取出自己想要的内容。从原理上说,对字符串解析可以使用正则表达式,这是一个通行方法。但实际上无论哪种高级语言使用的爬虫组件,都采用了解析器方式。这主要基于以下原因:
1)HTML不是普通的字符串,而是由一组有规律的标签嵌套组合而成的,属于结构化的DOM/XML对象,因此可以采用更加高效的处理方式。
2)解析器在解析HTML时,在内存中创建了一份文档实例,通过在内存中高效查找文档,便于开发者进行重复使用;并且解析器在获取文档的属性值时采取了面向对象的语法方式,提高了可读性。如果换成直接使用某种高级语言,从一串HTML中使用正则表达式方式提取<title>和<a>标签属性,则必须两次遍历该HTML字符串,两次的正则表达式语法不一样。而解析器只需要扫描一遍HTML,在内存中构建DOM树,开发者就可以随时引用其中的某个属性。
3)解析器还有容错功能。HTML语法的结构松散,即使标签不匹配也不影响使用。如果使用正则表达式来提取,HTML标签内容一旦改变,则必须重新修改表达式的语法。而解析器在设计上已经考虑到HTML标签不匹配的情况,这样更便于开发者使用。