我是Python的新手,在Windows上使用Python 3.1(pywin)。我需要解析一些HTML,基本上是特定HTML标签之间的额外值,并且在我的选项数组中感到困惑,我找到的所有内容都适用于Python 2.x.我已经阅读了关于Beautiful Soup,HTML5Lib和lxml的好评,但我无法弄清楚如何在Windows上安装任何这些。
问题:
您是否有一个简单的示例,说明如何使用推荐的库从特定URL中获取HTML并返回值,如下所示:
< div class =“foo”>< table>< tr>< td> foo< / td>< / tr>< / table>< a class =“link”href = '/ blahblah' > LINK< / A>< / DIV>
(说我们想要回复“/ blahblah”)
答案 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格式正确,您有很多选择,例如sax
和dom
。如果格式不正确,则需要容错解析器,例如Beautiful soup
,element tidy或lxml的HTML解析器。没有解析器是完美的,当呈现各种破碎的HTML时,有时我必须尝试多于一个。 Lxml
和Elementree
使用的是与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")