我正在寻找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>
那么它应该给我一种方式来访问嵌套标签通过名称或id的HTML标签,这样我基本上可以要求它让我的内容/文本在div标签与class='容器'包含在主体标签,或类似的东西。
如果您使用过Firefox的“Inspect element”功能(查看HTML),您就会知道它以一种漂亮的嵌套方式为您提供所有标记,就像树一样。
我更喜欢内置模块,但这可能要求有点太多。
我在Stack Overflow和互联网上的一些博客上看了很多问题,大多数人都建议使用BeautifulSoup或lxml或HTMLParser,但很少有人详细介绍了功能,并简单地结束了关于哪个更快/更有效的争论。
我会使用EHP
https://github.com/iogf/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
我建议使用justext库:
https://github.com/miso-belica/jusText
用法:
Python2:
import requests
import justext
response = requests.get("http://planet.python.org/")
paragraphs = justext.justext(response.content, justext.get_stoplist("English"))
for paragraph in paragraphs:
print paragraph.text
Python3:
import requests
import justext
response = requests.get("http://bbc.com/")
paragraphs = justext.justext(response.content, justext.get_stoplist("English"))
for paragraph in paragraphs:
print (paragraph.text)