在 Python 中进行类似 jquery 的 HTML 解析?

Posted

技术标签:

【中文标题】在 Python 中进行类似 jquery 的 HTML 解析?【英文标题】:jquery-like HTML parsing in Python? 【发布时间】:2011-03-04 08:06:52 【问题描述】:

是否有任何 Python 库可以让我解析类似于 jQueryhtml 文档?

即我希望能够使用 CSS 选择器语法 从文档中抓取任意一组节点,读取它们的内容/属性等。

我以前使用过的唯一 Python HTML 解析库是 BeautifulSoup,尽管它很好,但我一直认为如果我有可用的 jQuery 语法,我的解析会更快。 :D

【问题讨论】:

最新BeautifulSoup has support for css-selectors现在 【参考方案1】:

lxml 库支持CSS selectors。

【讨论】:

【参考方案2】:

如果您精通BeautifulSoup,您可以将soupselect 添加到您的库中。 Soupselect 是 BeautifulSoup 的 CSS 选择器扩展。

用法:

from bs4 import BeautifulSoup as Soup
from soupselect import select
import urllib
soup = Soup(urllib.urlopen('http://slashdot.org/'))
select(soup, 'div.title h3')
    [<h3><span><a href='//science.slashdot.org/'>Science</a>:</span></h3>,
     <h3><a href='//slashdot.org/articles/07/02/28/0120220.shtml'>Star Trek</h3>,
    ..]

【讨论】:

这听起来对我来说是最好的解决方案,我会试一试。谢谢! 美丽汤4现在是from bs4 如果你安装soupselect有问题,你应该试试她提供的pip兼容版本github.com/syabro/soupselect:sudo pip install https://github.com/syabro/soupselect/archive/master.zip 顺便提一下,Beautiful Soup 4 已经包含了内置对 CSS 选择器的支持的 soupselect 项目。请参阅release note。【参考方案3】:

考虑 PyQuery:

http://packages.python.org/pyquery/

>>> from pyquery import PyQuery as pq
>>> from lxml import etree
>>> import urllib
>>> d = pq("<html></html>")
>>> d = pq(etree.fromstring("<html></html>"))
>>> d = pq(url='http://google.com/')
>>> d = pq(url='http://google.com/', opener=lambda url: urllib.urlopen(url).read())
>>> d = pq(filename=path_to_html_file)
>>> d("#hello")
[<p#hello.hello>]
>>> p = d("#hello")
>>> p.html()
'Hello world !'
>>> p.html("you know <a href='http://python.org/'>Python</a> rocks")
[<p#hello.hello>]
>>> p.html()
u'you know <a href="http://python.org/">Python</a> rocks'
>>> p.text()
'you know Python rocks'

【讨论】:

【参考方案4】:

BeautifulSoup,现在支持 css selectors

import requests
from bs4 import BeautifulSoup as Soup
html = requests.get('https://***.com/questions/3051295').content
soup = Soup(html)

这个问题的标题

soup.select('h1.grid--cell :first-child')[0].text

问题点赞数

# first item 
soup.select_one('[itemprop="upvoteCount"]').text

使用Python Requests获取html页面

【讨论】:

以上是关于在 Python 中进行类似 jquery 的 HTML 解析?的主要内容,如果未能解决你的问题,请参考以下文章

python的类似jquery的库

27Python之jQuery基础

Python之路第十三篇:jQuery

jQuery

python(27):模块

Python中的模块