四、使用 Beautiful Soup 解析网页

通过 requests 库已经可以抓到网页源码,接下来要从源码中找到并提取数据。Beautiful Soup 库在 python 中的主要功能是从网页中抓取数据。Beautiful Soup 目前已经被移植到 bs4库中,也就是说在导入 Beautiful Soup 时需要先安装 bs4 库。 安装 bs4 库的方式如图 3-2-15 所示。 图 3-2-15 安装 bs4 库
安装好 bs4 库以后,还需安装 lxml 库。如果不安装 lxml 库,就会使用 Python 默认的解析器。尽管 Beautiful Soup 既支持 Python 标准库中的 HTML 解析器,又支持一些第三方解析器,但是 lxml 库具有功能更加强大、速度更快的特点,因此推荐安装 lxml 库。 安装 Python 第三方库后,输入下面的代码,即可开启 Beautiful Soup 之旅。 代码运行结果如图 3-2-16 所示。 图 3-2-16 代码运行结果
Beautiful Soup 库能够轻松解析网页信息,它被集成在 bs4 库中,需要时可以从 bs4 库中 调用。其表达语句如下: ● from bs4 import BeautifulSoup 首先,HTML 文档将被转换成 Unicode 编码格式,然后 Beautiful Soup 选择最合适的解析器来解析这段文档,此处指定 lxml 解析器进行解析。解析后便将复杂的 HTML 文档转换成树形结构,并且每个节点都是 Python 对象。这里将解析后的文档存储到新建的变量 soup中,代码如下: ● soup=BeautifulSoup(strhtml.text,'lxml') 接下来用 select(选择器)定位数据,定位数据时需要使用浏览器的开发者模式,使用 鼠标右键,在快捷菜单中选择“检查”命令,如图 3-2-17 所示。 图 3-2-17 定位数据
随后在浏览器右侧会弹出开发者界面,右侧高亮的代码对应着左侧高亮的数据文本。右击右侧高亮数据,在弹出的快捷菜单中选择“复制”“复制 selector”,便可以自动复制路径。代码如下: ● #main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li:nth-child(5) > a 由于这条路径是选中的任意头条标题的路径,而我们需要获取所有的头条新闻,因此将“li:nth-child(5)”中冒号(包含冒号)后面的部分删掉,代码如下: ● #main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li> a 使用 soup.select 引用这个路径,代码如下: ● data=soup.select ( '#main>div > div.mtop.firstMod.clearfix > div.centerBox >ul.newsList > li> a')