使用Python解析HTML

我正在寻找一个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的“检查元素”功能(查看HTML),您会知道它会以树状结构的方式为您提供所有标签。

我更喜欢内置模块,但可能会有点太多。


我在堆栈溢出和网上的几个博客上经历了很多问题,其中大部分都提到了BeautifulSoup或lxml或HTMLParser,但其中很少详细说明了这些功能,并简单地结束为争论哪一个更快/更有效。


所以我基本上可以要求它将div标签中的内容/文本与body标签中包含的class ='container'相提并论,或者类似的东西。

try: 
    from BeautifulSoup import BeautifulSoup
except ImportError:
    from bs4 import BeautifulSoup
html = #the HTML code you've written above
parsed_html = BeautifulSoup(html)
print parsed_html.body.find('div', attrs={'class':'container'}).text

我猜你不需要性能描述 - 只需阅读BeautifulSoup的工作原理。 看看它的官方文档。


我想你正在寻找的是pyquery:

pyquery:一个类似jquery的python库。

你想要的例子可能是这样的:

from pyquery import PyQuery    
html = # Your HTML CODE
pq = PyQuery(html)
tag = pq('div#class')
print tag.text()

它使用与Firefox或Chrome的检测元素相同的选择器。 例如:

元素选择器是'div#mw-head.noprint'

被检查的元素选择器是'div#mw-head.noprint'。 所以在pyquery中,你只需要传递这个选择器:

pq('div#mw-head.noprint')

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

Python HTML分析器性能

尽管它不是内置的,我仍然会推荐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
链接地址: http://www.djcxy.com/p/76885.html

上一篇: Parsing HTML using Python

下一篇: Python RegEx Matching Newline