我有一个包含如下条目的html:
<div class="entry">
<h3 class="foo">
<a href="http://www.example.com/blog-entry-slug"
rel="bookmark">Blog Entry</a>
</h3>
...
</div>
我想提取文本“Blog Entry”(和其他一些属性,所以我正在寻找一个通用的答案)。
在jQuery中,我愿意
$('.entry a[rel=bookmark]').text()
我在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()
从http://code.google.com/p/soupselect/中选择灵魂。
Soupselect不理解完整的CSS3选择器语法,就像jQuery一样。Python里有这样的野兽吗?
您可能还想看看pyquery。pyquery是一个类似jquery的python库。 找到它here
您可能想看看lxml的CSSSelector类,该类尝试实现w3c规范中描述的CSS选择器。另外,出于性能和其他原因,manyfolksrecommendlxml用于在BeautifulSoup上解析HTML/XML。
我认为lxml的CSSSelector使用XPath进行元素选择,但是您可能需要自己检查文档。下面是使用lxml的示例:
使用关键字参数非常容易。
或者
您还可以使用
attrs
来影响.entry
的选择器,而不是div.entry
:(注意调用汤或汤的一部分相当于
.findAll()
。)作为列表理解,这是
[b.text for e in soup('div', 'entry') for b in e(rel='bookmark')]
(产生[u'Blog Entry']
)。如果你想要真正的CSS3选择器,我不知道有任何这样的东西美化组。所有(或者如果不是全部,几乎全部)都可以通过简单的嵌套、条件和正则表达式来完成(您也可以使用
entry(rel=re.compile('^bookmark$'))
)。如果你想要这样的东西,考虑下一个项目吧!它可能有助于扁平化代码,使其更易于网络用户理解。相关问题 更多 >
编程相关推荐