2016-11-18 32 views
0

我想找到其中包含BeautifulSoup4文本和一些噪音的链接:查找其文本的文本有可能包含噪声

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

当我试图通过“有些text123”找到它,它失败:

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

这是什么解决方案?

更新:

的“一”是不是单一的一个,可以有很多。但带有“一些text123”的“a”是独一无二的。

+0

用'soup123.find尝试( “A”,文本= re.compile (“一些text123”))' – Fejs

+0

请发布真正的html代码 –

+0

@Fejs我试过并没有收到任何东西 –

回答

0

以下内容可能会满足您的需求。它只是找到所有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 
0

这里的工作解决方案(测试):

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得到它。

相关问题