我正在寻找一个用于Python的HTML解析器模块,它可以帮助我以Python列表/字典/对象的形式获得标签。
如果我有一个格式为:
<html>
<head>Heading</head>
<body attr1='val1'>
<div class='container'>
<div id='class'>Something here</div>
<div>Something else</div>
</div>
</body>
</html>
然后,它应该为我提供了一种通过HTML标记的名称或id访问嵌套标记的方法,这样我基本上就可以请求它通过包含在body
标记中的class='container'
或类似的东西来获取div
标记中的内容/文本。
如果你使用过Firefox的"Inspect element“特性(查看HTML),你就会知道它以一种很好的嵌套方式给出了所有的标签,就像一棵树。
我更喜欢内置模块,但这可能要求有点太高了。
我浏览了许多关于Stack Overflow的问题和互联网上的一些博客,其中大多数建议使用BeautifulSoup或lxml或HTMLParser,但很少有详细说明其功能,只是简单地以争论哪个更快/更有效而告终。
发布于 2012-07-29 20:07:26
在这里,您可以阅读有关Python中不同的HTML解析器及其性能的更多信息。尽管这篇文章有点过时,但它仍然给了你一个很好的概述。
Python HTML parser performance
我推荐使用BeautifulSoup,尽管它不是内置的。只是因为它很容易处理这些类型的任务。例如:
import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen('http://www.google.com/')
soup = BeautifulSoup(page)
x = soup.body.find('div', attrs={'class' : 'container'}).text
发布于 2016-03-20 17:44:49
我会使用EHP
这就是它:
from ehp import *
doc = '''<html>
<head>Heading</head>
<body attr1='val1'>
<div class='container'>
<div id='class'>Something here</div>
<div>Something else</div>
</div>
</body>
</html>
'''
html = Html()
dom = html.feed(doc)
for ind in dom.find('div', ('class', 'container')):
print ind.text()
输出:
Something here
Something else
https://stackoverflow.com/questions/11709079
复制相似问题