Python如何过滤爬取的链接列表 仅保留指定社媒URL
Python实现链接过滤的方案
你要的类似Google Sheets FILTER函数的效果,在Python里不需要额外依赖库,直接通过基础的字符串判断就能实现,直接在遍历<a>标签提取链接的环节加过滤规则即可,不用全量收集无关链接后再二次清理。
核心优化逻辑
- 提前定义好需要保留的3个社交平台域名规则
- 提取href属性时先做非空判断,避免个别无href属性的a标签触发运行报错
- 逐一对提取到的链接做规则匹配,只有符合域名要求的链接才存入结果列表,其余直接跳过
优化后可直接运行的代码
from bs4 import BeautifulSoup import requests # 配置需要保留的链接域名前缀,后续新增过滤规则直接往这个列表加即可 ALLOWED_SOCIAL_DOMAINS = [ "https://www.facebook.com", "https://www.twitter.com", "https://www.instagram.com" ] def get_profile(url): social_links = [] req = requests.get(url) soup = BeautifulSoup(req.text, 'html.parser') container = soup.find('div', attrs={'class': 'main-container'}) for a_tag in container.find_all('a'): href = a_tag.get('href') # 跳过空链接 if not href: continue # 匹配目标域名,符合条件就存入结果 for domain in ALLOWED_SOCIAL_DOMAINS: if href.startswith(domain): social_links.append(href) break # 输出当前页面结果 print(f"页面 {url} 提取到的社交账号链接:") for link in social_links: print(f"- {link}") print("-" * 30) if __name__ == "__main__": get_profile('https://basketball.realgm.com/player/Carmelo-Anthony/Summary/452') get_profile('https://basketball.realgm.com/player/LeBron-James/Summary/250')
和Google Sheets过滤逻辑的对应关系
你之前在Sheets里用的FILTER+多条件判断逻辑,和上面Python实现的逻辑完全等价:
- Sheets逻辑:逐行检查A列的链接,只要包含三个平台域名任意一个就保留
- Python逻辑:逐个检查提取到的href值,只要以三个平台域名开头就保留,过滤其余无关内容
如果后续需要调整过滤规则,比如新增TikTok、YouTube的账号链接爬取,只需要把对应域名加到
ALLOWED_SOCIAL_DOMAINS列表中即可,不需要修改核心遍历和判断代码。
内容的提问来源于stack exchange,提问作者Anthony Madle
相关产品推荐
相关产品推荐

