You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2.7中如何用BeautifulSoup结合re排除特定URL结果?

解决BeautifulSoup过滤URL时排除特定属性标签的问题

我来帮你搞定这个困扰!你需要的是同时满足两个条件的<a>标签:href中包含past,并且不带有target="_blank"属性。你之前的两次尝试各自覆盖了一个条件,现在把它们结合起来就能完美解决啦~

方法一:自定义过滤函数(灵活适配复杂正则)

把href正则匹配和target属性检查整合到同一个函数里,这样就能精准筛选符合要求的标签:

import re
from bs4 import BeautifulSoup

def valid_link(tag):
    # 1. 确保是<a>标签
    if tag.name != 'a':
        return False
    # 2. 检查href是否匹配正则(和你原来的re.compile('past')逻辑一致)
    href = tag.get('href', '')
    if not re.search('past', href):
        return False
    # 3. 排除带有target="_blank"的标签
    return not (tag.has_attr('target') and tag['target'] == '_blank')

issue_index = soup.find_all(valid_link)

这个函数会逐一验证每个标签:先确认是<a>标签,再检查href包含past,最后排除掉带有target="_blank"的那个结果,完全符合你的需求。

方法二:CSS选择器(简洁高效)

如果你的href匹配逻辑只是简单的包含past,用BeautifulSoup支持的CSS选择器会更简洁:

issue_index = soup.select('a[href*="past"]:not([target="_blank"])')

解释一下这个选择器的逻辑:

  • a[href*="past"]:选中所有href属性包含past的<a>标签
  • :not([target="_blank"]):从上述结果中排除带有target="_blank"属性的标签

两种方法都能帮你拿到想要的28个URL(原来的29个去掉那个带target的),你可以根据自己的需求选择~

内容的提问来源于stack exchange,提问作者Tim Elhajj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:42:45