Python库可以做类似jQuery的文本提取吗?

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

您可能需要查看lxmlCSSSelector类,该类尝试实现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)

  • 对于格式错误的html,请使用"from lxml.html import fromstring" (2认同)