1 回答

TA贡献1856条经验 获得超11个赞
您可以分析中的元素BeautifulSoup.contents以查找所有a对象。然后可以过滤后者以确保周围的内容不会创建(和)配对:
from bs4 import BeautifulSoup as soup
def is_valid(ind:int, content:list, flag=False) -> bool:
return not isinstance(content[ind], str) or (['(', ')'][flag] not in content[ind])
s = """
<p>
Some text (even more text <a href='link_text'>link_text</a>) another link <a href='link_text2'>link_text2</a>
</p>
"""
d = soup(s, 'html.parser').p.contents
l = [[i, a] for i, a in enumerate(d) if getattr(a, 'name', None) == 'a']
new_l = [a for i, a in l if (not i or i == len(d)-1) or (is_valid(i-1, d) and is_valid(i+1, d, True))]
输出:
[<a href="link_text2">link_text2</a>]
添加回答
举报