python - BeautifulSoup:查找带有嵌入标签的标签文本

标签 python regex beautifulsoup

我正在尝试寻找 <a>使用 Python 中的 BeautifulSoup 4 通过其所包含的文本在网页中进行标记。我使用真实的表达式,如下例所示:

>>> from bs4 import BeautifulSoup as BS
soup = BS('<a>lalala <del>10</del> lalala </a>')
soup1 = BS('<a>lalala 10 lalala </a>'
>>> soup.find_all('a', text=re.compile('lalala'))
[]
>>> soup1.find_all('a', text=re.compile('lalala'))
[<a>lalala 10 lalala </a>]

为什么嵌入<del></del>标签使我无法找到 <a>标签的文本包含它?我该如何解决它?

最佳答案

这与你的正则表达式无关,而是 .string 的方式。 (在 Beautiful Soup 4.4.0 中,text 参数称为 string)参数的作用是,如果标签包含多个内容,则返回 None 。 您可以使用a function这样做:

def in_text(tag):
    return tag.name == 'a' and 'lalala' in tag.text

soup.find_all(in_text)

其产量:

[<a>lalala <del>10</del> lalala </a>]

关于python - BeautifulSoup:查找带有嵌入标签的标签文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33095285/

相关文章:

python - 有序请求参数python

python - 在 Python 中引用子目录之间的文件的正确方法和 VSCode 设置是什么

regex - 在 $group 的 mongodb 聚合框架中使用 $regex

html - 删除 <img> 标签上的内联样式并替换为类

Python从本地html文件中提取信息

python - pycrypto 需要 Visual Studio 吗?

Python、Tkinter : How to redirect the output of a function to a notebook tab?

java - 模式/正则表达式*仅*如果它是记录中的唯一字段

python-3.x - 如何单击 "Next"按钮直到它不再存在 - Python、Selenium、Requests

python-3.x - Python3 Beautifulsoup4 从多个容器兄弟中提取文本