使用Python 3和示例解析HTML的最佳库?

时间:2010-03-24 02:54:14

标签: python-3.x

我是Python的新手,在Windows上使用Python 3.1(pywin)。我需要解析一些HTML,基本上是特定HTML标签之间的额外值,并且在我的选项数组中感到困惑,我找到的所有内容都适用于Python 2.x.我已经阅读了关于Beautiful Soup,HTML5Lib和lxml的好评,但我无法弄清楚如何在Windows上安装任何这些。

问题:

  1. 您推荐什么HTML解析器?
  2. 如何安装? (要温柔,我对Python完全不熟悉并且记得我在Windows上)
  3. 您是否有一个简单的示例,说明如何使用推荐的库从特定URL中获取HTML并返回值,如下所示:

    < div class =“foo”>< table>< tr>< td> foo< / td>< / tr>< / table>< a class =“link”href = '/ blahblah' > LINK< / A>< / DIV>

  4. (说我们想要回复“/ blahblah”)

6 个答案:

答案 0 :(得分:7)

Python 3中的Web抓取目前支持得很差;所有体面的库只能用于Python 2.如果必须使用Python进行Web抓取,请使用Python 2。

虽然建议使用Beautiful Soup(在Stack Overflow中使用Python进行网页抓取的每一个问题都表明了这一点),但对于Python 3而言,它不如Python 2那么好;我甚至无法安装它,因为安装代码仍然是Python 2。

对于Python 3的适当且易于安装的解决方案,您可以尝试the library's HTML parser,尽管它非常简单,但它还附带Python 3。

答案 1 :(得分:6)

如果HTML格式正确,您有很多选择,例如saxdom。如果格式不正确,则需要容错解析器,例如Beautiful soupelement tidylxml的HTML解析器。没有解析器是完美的,当呈现各种破碎的HTML时,有时我必须尝试多于一个。 LxmlElementree使用的是与Beautiful soup相比更为标准的大多数兼容的API。

在我看来,lxml是处理xml文档的最佳模块,但python中包含的ElementTree仍然相当不错。在过去,我使用Beautiful soup将HTML转换为xml并构造ElementTree以处理数据。

答案 2 :(得分:5)

BeautifulSoup及其3.1.0.1版(2009年1月)也适用于Python 3.x。

我没有在Py3k下使用BeautifulSoup的直接经验(虽然这很快就会改变......)。然而,我只是阅读了Version 3.1.0 of Beautiful Soup does significantly worse on real-world HTML than its previous versions,所以如果可能的话,我可以尝试等待(即继续使用Python 2.6)。

答案 3 :(得分:5)

我知道这已经晚了,但是为了将来参考,Beautiful Soup 4.3.2从2013年10月开始供货。

http://www.crummy.com/software/BeautifulSoup/bs4/download/

它与Python 3兼容。

答案 4 :(得分:4)

我目前正在使用lxml,而在Windows上,我使用了来自http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml的安装二进制文件。

import lxml.html
page = lxml.html.fromstring(...)
title = page.xpath('//head/title/text()')[0]

答案 5 :(得分:0)

您可以尝试beautifulsoup4,它与python2和python3都兼容,您可以方便地使用它

from bs4 import BeautifulSoup
soup = BeautifulSoup("<p>Some<b>bad<i>HTML")