如何解决beautifulsoup-文本前面有img标签时,锚标签的过滤器文本不起作用
我有以下html内容:
from bs4 import BeautifulSoup
import re
html = """<a href="http://app_url1" >install app xyz</a>
<a href="http://app_url2" ><img src="/path.jpg">install app xyz</a>
<a href="http://app_url3" >install app aaa</a>
<a href="http://app_url4">install app aaa</a>"""
soup = BeautifulSoup(html,"html.parser")
print(soup.findAll("a",text=re.compile("xyz$")))
我要过滤以给定正则表达式模式结尾的锚标记文本(例如此处的xyz)?我希望通过一个正则表达式模式来findAll,而不是所有锚标记的额外迭代。但是我只输出一个锚标签作为
<a href="http://app_url1">install app xyz</a>
另一个在文本前面带有img的锚标记将被忽略
预期输出:
<a href="http://app_url1" >install app xyz</a>
<a href="http://app_url2" ><img src="/path.jpg">install app xyz</a>
解决方法
仅按text=re.compile("xyz$")
过滤,然后使用.parent
例如:
from bs4 import BeautifulSoup
import re
html = """<a href="http://app_url1" >install app xyz</a>
<a href="http://app_url2" ><img src="/path.jpg">install app xyz</a>
<a href="http://app_url3" >install app aaa</a>
<a href="http://app_url4">install app aaa</a>"""
soup = BeautifulSoup(html,"html.parser")
result = [el.parent for el in soup.findAll(text=re.compile("xyz$"))]
print(result)
输出:
[<a href="http://app_url1">install app xyz</a>,<a href="http://app_url2"><img src="/path.jpg"/>install app xyz</a>]
,
您可以使用CSS选择器select
代替所有锚标记的额外迭代。
示例:
from bs4 import BeautifulSoup
import re
html = """<a href="http://app_url1" >install app xyz</a>
<a href="http://app_url2" ><img src="/path.jpg">install app xyz</a>
<a href="http://app_url3" >install app aaa</a>
<a href="http://app_url4">install app aaa</a>"""
soup = BeautifulSoup(html,"html.parser")
print(soup.select('a:contains("xyz")'))
输出将为:
[<a href="http://app_url1">install app xyz</a>,<a href="http://app_url2"><img src="/path.jpg"/>install app xyz</a>]
要从上述输出的列表中获取href
内容:
anchors = soup.select('a:contains("xyz")')
href = [i['href'] for i in anchors]
print(href)
输出将是:
['http://app_url1','http://app_url2']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。