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
相关产品推荐
相关产品推荐

