【问题标题】:Problems parsing a web page in python在 python 中解析网页的问题
【发布时间】:2016-12-01 20:57:12
【问题描述】:

我想解析一个网页以检索有关它的一些信息(我的确切问题是检索此列表中的所有项目:http://www.computerhope.com/vdef.htm)。

但是,我不知道该怎么做。

互联网上的很多教程都是从这个开始的(简化的): html5lib.parse(urlopen("http://www.computerhope.com/vdef.htm"))

但在那之后,没有任何教程解释我如何浏览文档并找到我正在寻找的 html 部分。

其他一些教程解释了如何使用 CSSSelector 进行操作,但同样,所有教程都不是以网页开头,而是以字符串开头(例如这里:http://lxml.de/cssselect.html)。

所以我尝试使用以下方法创建带有网页的树: fromstring(urlopen("http://www.computerhope.com/vdef.htm").read()) 但我收到了这个错误: lxml.etree.XMLSyntaxError: Specification mandate value for attribute itemscope, line 3, column 28。这个错误是因为有一个属性没有指定(例如<input attribute></input>)但是由于我不控制网页,所以我无法绕过它。

所以这里有几个问题可以解决我的问题:

  • 如何浏览树?
  • 有没有办法让解析器不那么严格?

谢谢!

【问题讨论】:

  • 寻找 XPath。它是解析任何类 XML 结构的非常强大的工具。
  • 为什么要用etree来解析html?

标签: python html lxml html5lib


【解决方案1】:

尝试使用漂亮的汤,它具有一些出色的功能,并且在 Python 中解析非常容易。

https://www.crummy.com/software/BeautifulSoup/bs4/doc/查看他们的文档

编辑:

正如@mzjn 所指出的,我没有在答案中包含代码示例(这就是否决票的原因),因为我认为 OP 必须自己解决。我想我可以帮助他,所以这里是代码

from bs4 import BeautifulSoup
import requests

page = requests.get('http://www.computerhope.com/vdef.htm')
soup = BeautifulSoup(page.text)
tables = soup.findChildren('table')
for i in (tables[0].findAll('a')):
    print(i.text)

它会打印出列表中的所有项目,希望OP做出相应的调整。

至少现在我希望我的回答会得到支持。

【讨论】:

  • 我能知道为什么投反对票吗?如果你不喜欢这个库,这并不意味着我的答案是错误的,那只是意味着我们的意见不同。
  • 我没有投反对票,但我猜你投了反对票,因为这是一个仅链接的答案,没有实际回答问题的详细信息..
猜你喜欢
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 2021-02-28
  • 2013-02-02
相关资源
最近更新 更多