在python中解析网页时出现问题

时间:2016-07-27 17:45:51

标签: python html lxml html5lib

我想解析一个网页,以便检索有关它的一些信息(我的确切问题是检索此列表中的所有项目: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>),但由于我无法控制网页,因此我无法解决此问题。

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试使用漂亮的汤,它具有一些优秀的功能,并使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会做出相应的调整。

至少现在我希望我的回答能够得到提升。