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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:42:43