首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python解析HTML

使用Python解析HTML
EN

Stack Overflow用户
提问于 2012-07-29 20:00:43
回答 2查看 353K关注 0票数 217

我正在寻找一个用于Python的HTML解析器模块,它可以帮助我以Python列表/字典/对象的形式获得标签。

如果我有一个格式为:

代码语言:javascript
复制
<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,但很少有详细说明其功能,只是简单地以争论哪个更快/更有效而告终。

EN

回答 2

Stack Overflow用户

发布于 2012-07-29 20:07:26

在这里,您可以阅读有关Python中不同的HTML解析器及其性能的更多信息。尽管这篇文章有点过时,但它仍然给了你一个很好的概述。

Python HTML parser performance

我推荐使用BeautifulSoup,尽管它不是内置的。只是因为它很容易处理这些类型的任务。例如:

代码语言:javascript
复制
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
票数 44
EN

Stack Overflow用户

发布于 2016-03-20 17:44:49

我会使用EHP

https://github.com/iogf/ehp

这就是它:

代码语言:javascript
复制
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()

输出:

代码语言:javascript
复制
Something here
Something else
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11709079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档