Beautiful Soup 是一个非常流行的 Python 模块,该模块可以解析网页,并提供定位内容的便捷接口,如果你还没有安装该模块,可以使用下面的命令安装其最新版本:
pip install beautifulsoup4
使用 Beautiful Soup 的第一步是将已下载的 HTML 内容解析为 soup 文档。由于大多数网页都不具备良好的 HTNML 格式,因此, Beautiful Souop 需要对其实际格式进行确定,
例如,下面的这个简单的网页的列表中,存在属性值两侧引号缺失为闭合的额问题。
<ul class = country> <li>Area <li>Population </ul>
如果 Population 列表被解析为 Area 列表项的子元素,而不是并列的两个列表项的话,我们抓取时就会得到错误的结果,下面我们看一下 Beauutful Soup 是如何处理的,
>>> from bs4 import BeautifulSoup >>> broken_html = '<ul class = country> <li>Area <li>Population </ul>' >>> soup = BeautifulSoup(broken_html, 'html.parser') >>> fixed_html = soup.prettify() >>> print(fixed_html) <ul class="country"> <li> Area <li> Population </li> </li> </ul> >>>
从上面的执行的结果可以看出,Beautiful Soup 能够正确的解析缺失的引号闭合标签。
现在,可以使用 find() 和 find_all() 方法类定位我们需要的元素了。
>>> ul = soup.find('ul', attrs = {'class':'country'}) >>> ul.find('li') <li>Area <li>Population </li></li> >>> ul.find_all('li') [<li>Area <li>Population </li></li>, <li>Population </li>]
下面是使用该方法抽取实例国家面积数据的完整代码。
这段代码虽然比正则表达式的代码更加复杂,但更容易构造和理解。