Beautiful Soup

  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>]

 

下面是使用该方法抽取实例国家面积数据的完整代码。

 

 这段代码虽然比正则表达式的代码更加复杂,但更容易构造和理解。

 

posted on 2019-05-16 10:14  海纳百川_有容乃大  阅读(177)  评论(0编辑  收藏  举报

导航