按文本查找文本,可以包含nois

2024-10-01 02:21:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过BeautifulSoup4找到一个包含文本和一些噪音的链接:

<a href="#">
  <span>gggggggggggg</span>
  Some text123
  <div>fdsfdsfdsfd</div>
  <span> fdsfdsfdsfd</span>
</a>

当我试图通过“Some text123”找到它时,它失败了:

soup123.find("a", "Some text123") # => NoneType

解决这个问题的办法是什么?你知道吗

更新:

“a”不是单个的,可以有很多。但是带有“Some text123”的“a”是独一无二的。你知道吗


Tags: 文本div链接somefindhrefspanbeautifulsoup4
2条回答

以下内容可能适合您的需要。它只是查找所有a标记,并确定您要查找的搜索文本是否存在。然后,它显示任何匹配项的关联href标记:

from bs4 import BeautifulSoup

html = """
    <a href="#1"><span>gggggggggggg</span>Some text123<div>fdsfdsfdsfd</div><span> fdsfdsfdsfd</span></a>
    <a href="#2"><span>gggggggggggg</span>Some text124<div>fdsfdsfdsfd</div><span> fdsfdsfdsfd</span></a>"""

soup = BeautifulSoup(html, "html.parser")
search = "Some text123"

for a in soup.find_all('a'):
    if search in a.text:
        print a['href']

例如,它会显示:

#1

以下是工作解决方案(已测试):

a_tag = soup.find('a', text=re.compile("Some text123")).parent

如果无法获得此输出:

<a href="#">
<span>gggggggggggg</span>
  Some text123
  <div>fdsfdsfdsfd</div>
<span> fdsfdsfdsfd</span>
</a>

在使用我的命令之后,就没有了在soup中所期望的输入。如果这部分代码是由JS生成的,那么您将无法通过BS获得它。你知道吗

相关问题 更多 >