3种抓取其中数据的方法,你都知道吗?( 二 )


此代码虽然比正则表达式代码更复杂,但更易于构建和理解 。此外,布局的小变化,如额外的空白和制表符属性,我们不必再担心了 。我们还知道,即使页面包含不完整的 HTML,Soup 也可以帮助我们清理页面,从而使我们能够从非常不完整的网站代码中提取数据 。
3Lxml
lxml
它是基于此 XML 解析库构建的库 。它是用 C 语言编写的,解析速度比 Soup 快,但安装过程也比较复杂,尤其是 . 最新的安装说明可供参考 。如果您自己安装库有困难,您也可以使用它 。
您可能不熟悉它,但它是由公司员工创建的包和环境管理器,主要专注于开源数据科学包 。您可以按照其安装说明下载并安装它 。请务必注意,使用的快速安装会将您的设置设置为安装 Conda 的位置 。
与 Soup 一样,使用 lxml 模块的第一步是将可能无效的 HTML 解析为统一格式 。下面是使用此模块解析相同的不完整 HTML 的示例 。
>>> from lxml.html import fromstring, tostring>>> broken_html = '

  • Area
  • Population
'>>> tree = fromstring(broken_html) # parse the HTML>>> fixed_html = tostring(tree, pretty_print=True)>>> print(fixed_html)
  • Area
  • Population

同样,lxml 正确解析属性周围缺少的引号并关闭标签,但模块不会添加和标签 。这些都不是标准 XML 的要求,因此 lxml 没有必要插入它们 。
解析输入内容后,进入选择元素的步骤 。此时,lxml 有几种不同的方法,例如类似于 Soup 的 XPath 选择器和 find() 方法 。然而,对于这个例子,我们将使用 CSS 选择器,因为它们更简洁,可以在第 5 章解析动态内容时重用 。一些读者可能已经熟悉选择器,因为他们使用选择器或在前端的使用网络应用程序开发 。在本章后面,我们将比较这些选择器与 XPath 的性能 。要使用 CSS 选择器,您可能需要先安装该库,如下所示 。
pip install cssselect
现在,我们可以使用 lxml 的 CSS 选择器从示例页面中提取区域数据 。
>>> tree = fromstring(html)>>> td = tree.cssselect('tr#places_area__row > td.w2p_fw')[0]>>> area = td.text_content()>>> print(area)244,820 square kilometres
通过使用代码树上的方法,我们可以使用 CSS 语法选择表中 ID 为行的元素,然后选择子表数据标签为 class。由于返回的是一个列表,我们需要获取其中的第一个结果并调用一个方法,该方法遍历所有子元素并返回每个元素的关联文本 。在这种情况下,虽然我们只有一个元素,但此功能对于更复杂的提取示例很有用 。
【3种抓取其中数据的方法,你都知道吗?】郑重声明:本文版权归原作者所有,转载文章仅出于传播更多信息之目的 。如作者信息标注有误,请尽快联系我们修改或删除,谢谢 。