我试图获得在包含文本的以下模式的HTML文档中的元素:#\ S {11}

<h2> this is cool #12345678901 </h2>

所以,以前的将通过使用匹配:

soup('h2',text=re.compile(r' #\S{11}'))

和的结果将是这样的:

[u'blahblah #223409823523', u'thisisinteresting #293845023984']

我能得到所有匹配的文本(见上线)。但我想文字的父元素来搭配,这样我就可以把它作为一个起点,遍历文档树。在这种情况下,我希望所有的H2元素返回,而不是文本相匹配。

想法?

有帮助吗?

解决方案

from BeautifulSoup import BeautifulSoup
import re

html_text = """
<h2>this is cool #12345678901</h2>
<h2>this is nothing</h2>
<h1>foo #126666678901</h1>
<h2>this is interesting #126666678901</h2>
<h2>this is blah #124445678901</h2>
"""

soup = BeautifulSoup(html_text)


for elem in soup(text=re.compile(r' #\S{11}')):
    print elem.parent

打印:

<h2>this is cool #12345678901</h2>
<h2>this is interesting #126666678901</h2>
<h2>this is blah #124445678901</h2>

其他提示

使用BS4(美丽的汤4)中,OP的尝试的操作完全相同预期:

from bs4 import BeautifulSoup
soup = BeautifulSoup("<h2> this is cool #12345678901 </h2>")
soup('h2',text=re.compile(r' #\S{11}'))

返回[<h2> this is cool #12345678901 </h2>]

scroll top