使用BeautifulSoup的findAll搜索HTML元素的innerText,能否得到与搜索属性相同的结果?

5 投票
1 回答
4658 浏览
提问于 2025-04-15 21:15

比如说,如果我通过一个元素的属性,比如说id,来搜索:

soup.findAll('span',{'id':re.compile("^score_")})

我会得到一个完整的匹配的span元素列表(我觉得这样很好)。

但是如果我试着通过html元素的innerText来搜索,像这样:

soup.findAll('a',text = re.compile("discuss|comment")) 

我得到的只是匹配的innerText部分,而不是像上面那样包含标签和属性的整个元素。

有没有办法在不先找到匹配项再获取它的父元素的情况下做到这一点?

谢谢。

1 个回答

6

你得到的不是纯文本,而是一个叫做NavigableString的对象,这个对象里面包含了文本。它还有一些方法,可以让你访问它的父级元素等等。

from BeautifulSoup import BeautifulSoup
import re

soup = BeautifulSoup('<html><p>foo</p></html>')

r = soup.findAll('p', text=re.compile('foo'))

print r[0].parent

打印

<p>foo</p>

撰写回答