the*_*orn 9 python jquery beautifulsoup css-selectors
我有html包含这样的条目:
<div class="entry">
<h3 class="foo">
<a href="http://www.example.com/blog-entry-slug"
rel="bookmark">Blog Entry</a>
</h3>
...
</div>
Run Code Online (Sandbox Code Playgroud)
我想提取文本"博客条目"(和其他一些属性,所以我正在寻找一个通用的答案).
在jQuery中,我会这样做
$('.entry a[rel=bookmark]').text()
Run Code Online (Sandbox Code Playgroud)
我能用Python获得的最接近的是:
from BeautifulSoup import BeautifulSoup
import soupselect as soup
rawsoup = BeautifulSoup(open('fname.html').read())
for entry in rawsoup.findAll('div', 'entry'):
print soup.select(entry, 'a[rel=bookmark]')[0].string.strip()
Run Code Online (Sandbox Code Playgroud)
来自http://code.google.com/p/soupselect/的 soupselect .
Soupselect不理解完整的CSS3选择器语法,但是jQuery也是如此.Python中有这样的野兽吗?
Hae*_*aes 13
您可能需要查看lxml的CSSSelector类,该类尝试实现w3c规范中描述的CSS选择器.作为旁注,由于性能和其他原因,许多 人 建议现在使用 lxml来解析BeautifulSoup上的HTML/XML.
我认为lxml的CSSSelector使用XPath进行元素选择,但您可能需要自己查看文档.这是lxml的例子:
>>> from lxml.cssselect import CSSSelector
>>> from lxml.html import fromstring
>>> html = '<div class="entry"><h3 class="foo"><a href="http://www.example.com/blog-entry-slug" rel="bookmark">Blog Entry</a></h3></div>'
>>> h = fromstring(html)
>>> sel = CSSSelector("a[rel=bookmark]")
>>> [e.text for e in sel(h)]
['Blog Entry']
Run Code Online (Sandbox Code Playgroud)