如何使用Python与re库匹配并移除维基百科的引用标记
移除维基百科爬虫中的引用标记解决方案
嘿,刚好碰到过类似的需求!那些维基百科的[1][2]这类引用标记确实有点碍眼,用Python的re库分分钟就能把它们清掉。我把修改后的完整代码给你,再讲讲关键部分:
import requests from bs4 import BeautifulSoup import re import sys def fetch_wikipedia_content(keyword): # 构造维基百科URL,空格替换成下划线符合维基的URL规则 url = f"https://en.wikipedia.org/wiki/{keyword.replace(' ', '_')}" try: response = requests.get(url) response.raise_for_status() # 捕获HTTP请求错误 except requests.exceptions.RequestException as e: print(f"请求出错啦: {e}") return soup = BeautifulSoup(response.text, 'html.parser') # 提取页面标题 title = soup.find('h1', id='firstHeading').text print(f"\n📝 标题: {title}\n") # 定位到主内容区,只提取直接子节点的p标签(避免抓取到侧边栏或其他无关内容) content_div = soup.find('div', id='mw-content-text').find('div', class_='mw-parser-output') paragraphs = content_div.find_all('p', recursive=False) # 逐段处理并展示内容 for idx, p in enumerate(paragraphs, 1): # 获取段落文本并清理引用标记 raw_text = p.get_text(strip=True) # 核心:用正则移除所有[数字]格式的引用标记 cleaned_text = re.sub(r'\[\d+\]', '', raw_text) if cleaned_text: # 跳过空段落,避免显示无效内容 print(f"段落 {idx}: {cleaned_text}") # 按回车继续下一段 input("\n👉 按回车键查看下一段...") if __name__ == "__main__": # 支持命令行传参或者控制台输入关键词 if len(sys.argv) > 1: keyword = ' '.join(sys.argv[1:]) else: keyword = input("请输入你要搜索的维基百科关键词: ") fetch_wikipedia_content(keyword)
关键细节解释
- 正则表达式部分:
re.sub(r'\[\d+\]', '', raw_text)是核心逻辑:\[和\]:转义方括号,因为它们在正则语法里是特殊字符,我们要匹配实际的[和]\d+:匹配一个或多个连续数字,也就是引用的编号- 整个模式会把所有类似
[1]、[12]的标记直接替换为空字符串,彻底移除
- 额外优化:我还加了请求异常捕获、跳过空段落的逻辑,让代码更稳定,不会因为页面结构小变化或者请求失败直接崩溃
你测试下搜索Tom Holland,原来的[1]这类标记就都消失了,阅读起来清爽多啦!
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

