为了账号安全,请及时绑定邮箱和手机立即绑定

尝试提取其他链接时忽略括号中的链接

尝试提取其他链接时忽略括号中的链接

交互式爱情 2021-09-28 15:29:46
我正在尝试从p块中提取链接,但我想忽略括号内的任何内容。例如,<p>   Some text (even more text <a href='link_text'>link_text</a>) another link <a href='link_text2'>link_text2</a></p>我只想在括号中的内容之后选择任何链接,因此在上述情况下只选择link_text2链接。我目前使用这个获取链接...... ps = content.find_all('p', recursive=False) for p in ps:    as = p.find_all('a', recursive=False)我想我必须使用正则表达式,但不确定如何合并它,以便忽略括号中的任何链接。此正则表达式用于隔离括号中的任何内容 - \(.*?\)。任何人都可以提供帮助?
查看完整描述

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>]


查看完整回答
反对 回复 2021-09-28
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信