【Python】Wikipedia库实战指南:轻松获取维基百科数据

wikipedia 是一个 Python 库,用于从维基百科(Wikipedia)获取数据。它提供了一个简单易用的接口,允许用户搜索维基百科页面、获取页面内容、摘要、链接、图片等信息。该库主要通过维基百科的 API(MediaWiki API)与维基百科交互,适用于快速原型开发、数据挖掘或教育用途。

以下是对 wikipedia 库的详细说明和常见用法。


1. wikipedia 库的作用

  • 搜索维基百科:根据关键词搜索相关页面。
  • 获取页面内容:提取维基百科页面的完整内容、摘要、标题、URL 等。
  • 多语言支持:支持访问不同语言版本的维基百科(如英文、中文、法文等)。
  • 简单接口:提供直观的函数和方法,适合快速开发。
  • 注意wikipedia 库是第三方库,不是 Python 标准库,且功能较为基础。对于复杂需求(如批量爬取、解析维基文本),推荐使用 wikipedia-api 或直接调用 MediaWiki API。


    2. 安装与环境要求

  • Python 版本:支持 Python 2.7+ 和 3.x(推荐 3.6+)。
  • 依赖
  • requests:用于发送 HTTP 请求。
  • beautifulsoup4(可选):用于解析 HTML(某些功能可能需要)。
  • 安装命令
    pip install wikipedia
    
  • 验证安装
    import wikipedia
    print(wikipedia.__version__)  # 示例输出: 1.4.0
    

  • 3. 核心功能与用法

    wikipedia 库的主要功能通过模块级函数和 WikipediaPage 对象实现。

    3.1 搜索维基百科

    使用 wikipedia.search() 查找与关键词相关的页面:

    import wikipedia
    
    # 搜索关键词
    results = wikipedia.search("Python")
    print(results)
    

    输出示例

    ['Python (programming language)', 'Python', 'Monty Python', 'Python Software Foundation', ...]
    

    说明

  • search(query, results=10) 返回与查询相关的页面标题列表。
  • results 参数控制返回结果的最大数量。
  • 3.2 获取页面摘要

    使用 wikipedia.summary() 获取页面的简短摘要:

    import wikipedia
    
    # 获取摘要
    summary = wikipedia.summary("Python (programming language)")
    print(summary[:200])  # 截取前 200 字符
    

    输出示例

    Python is a high-level, interpreted programming language known for its readability and versatility. Created by Guido van Rossum and first released in 1991, Python emphasizes code simplicity...
    

    说明

  • summary(title, sentences=0) 返回指定页面的摘要。
  • sentences 参数可限制摘要的句子数(默认返回完整摘要)。
  • 如果页面标题有歧义,会抛出 wikipedia.exceptions.DisambiguationError
  • 3.3 获取完整页面内容

    使用 wikipedia.page() 获取 WikipediaPage 对象,访问页面详细信息:

    import wikipedia
    
    # 获取页面对象
    page = wikipedia.page("Python (programming language)")
    
    # 访问属性
    print(page.title)      # 输出: Python (programming language)
    print(page.url)        # 输出: https://en.wikipedia.org/wiki/Python_(programming_language)
    print(page.content[:200])  # 截取内容前 200 字符
    

    输出示例

    Python is a high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation...
    

    常用属性

  • page.title:页面标题。
  • page.content:完整页面内容(纯文本)。
  • page.url:页面 URL。
  • page.links:页面中链接到的其他维基百科页面列表。
  • page.images:页面中的图片 URL 列表。
  • page.references:页面中的外部引用链接。
  • 3.4 处理多语言

    通过 wikipedia.set_lang() 切换维基百科语言版本:

    import wikipedia
    
    # 设置为中文维基百科
    wikipedia.set_lang("zh")
    
    # 搜索和获取摘要
    print(wikipedia.search("Python"))  # 输出中文页面标题
    summary = wikipedia.summary("Python (编程语言)")
    print(summary[:200])
    

    输出示例

    Python(中文:蟒蛇)是一种广泛使用的高级编程语言,由吉多·范罗苏姆(Guido van Rossum)创造,首次发布于1991年。Python以其代码可读性和简洁的设计哲学而闻名...
    

    支持语言:通过语言代码(如 "en""zh""fr")切换,完整列表见 MediaWiki API 文档。

    3.5 处理歧义页面

    当页面标题有多种含义时,会抛出 DisambiguationError

    import wikipedia
    
    try:
        page = wikipedia.page("Python")
    except wikipedia.exceptions.DisambiguationError as e:
        print(e.options)  # 输出可能的页面标题
    

    输出示例

    ['Python (programming language)', 'Python', 'Monty Python', 'Python Software Foundation', ...]
    

    解决方法

  • 使用精确标题(如 "Python (programming language)")。
  • 捕获异常并选择所需选项。
  • 3.6 获取 HTML 内容

    使用 page.html() 获取页面的 HTML 源码:

    import wikipedia
    
    page = wikipedia.page("Python (programming language)")
    html_content = page.html()
    print(html_content[:200])
    

    说明

  • 返回原始 HTML,可结合 beautifulsoup4 解析特定元素。

  • 4. 性能与限制

  • API 限制:维基百科 API 有速率限制,短时间内大量请求可能被阻止。建议设置请求间隔或使用批量查询。
  • 数据量:完整页面内容可能很长,内存占用较高,建议优先使用 summary()
  • 内容格式:返回的文本是纯文本,复杂格式(如表格、公式)可能丢失。
  • 库维护wikipedia 库最后更新较旧(截至 2023 年为 1.4.0),可能不完全支持最新 MediaWiki API 特性。

  • 5. 实际应用场景

  • 数据采集:从维基百科获取知识数据,用于构建数据集或知识库。
  • 教育工具:开发交互式学习应用,展示维基百科内容。
  • 语义分析:结合 NLP 库(如 sentence_transformers)分析维基百科文本。
  • 聊天机器人:为用户查询提供维基百科摘要。
  • 内容聚合:自动汇总多语言维基百科内容。
  • 示例(批量获取摘要)

    import wikipedia
    
    keywords = ["Python (programming language)", "Java (programming language)", "C++"]
    summaries = {}
    for keyword in keywords:
        try:
            summaries[keyword] = wikipedia.summary(keyword, sentences=2)
        except wikipedia.exceptions.DisambiguationError as e:
            summaries[keyword] = f"Disambiguation: {e.options[:3]}"
        except wikipedia.exceptions.PageError:
            summaries[keyword] = "Page not found"
    
    for keyword, summary in summaries.items():
        print(f"{keyword}:\n{summary}\n")
    

    6. 注意事项

  • 异常处理
  • wikipedia.exceptions.PageError:页面不存在。
  • wikipedia.exceptions.DisambiguationError:标题有歧义。
  • wikipedia.exceptions.HTTPTimeoutError:API 请求超时。
  • 编码问题:某些语言的字符可能需要正确处理编码(如中文)。
  • API 使用规范
  • 遵循维基百科的 API 使用政策,避免过度请求。
  • 设置用户代理(User-Agent)以标识请求来源:
    wikipedia.set_user_agent("MyApp/1.0 (contact@example.com)")
    
  • 替代库
  • wikipedia-api:更现代的接口,支持结构化数据提取。
  • mwclient:适合复杂 MediaWiki 操作。
  • requests + MediaWiki API:直接调用 API,灵活性更高。

  • 7. 综合示例

    以下是一个综合示例,展示搜索、获取摘要和处理多语言:

    import wikipedia
    
    # 设置语言
    wikipedia.set_lang("en")
    
    # 搜索并获取页面
    query = "Python"
    try:
        # 搜索相关页面
        search_results = wikipedia.search(query, results=5)
        print("Search results:", search_results)
    
        # 获取精确页面的摘要和链接
        page = wikipedia.page("Python (programming language)")
        print("\nTitle:", page.title)
        print("Summary:", wikipedia.summary(page.title, sentences=2))
        print("URL:", page.url)
        print("Links (first 5):", page.links[:5])
    
        # 切换到中文并获取摘要
        wikipedia.set_lang("zh")
        summary_zh = wikipedia.summary("Python (编程语言)", sentences=2)
        print("\nChinese Summary:", summary_zh)
    
    except wikipedia.exceptions.DisambiguationError as e:
        print("Disambiguation options:", e.options)
    except wikipedia.exceptions.PageError:
        print("Page not found")
    except Exception as e:
        print("Error:", e)
    

    输出示例

    Search results: ['Python (programming language)', 'Python', 'Monty Python', 'Python Software Foundation', 'History of Python']
    
    Title: Python (programming language)
    Summary: Python is a high-level, interpreted programming language known for its readability and versatility. Created by Guido van Rossum and first released in 1991, Python emphasizes code simplicity...
    URL: https://en.wikipedia.org/wiki/Python_(programming_language)
    Links (first 5): ['.NET', '3D computer graphics', 'ABC (programming language)', 'ALGOL 68', 'API']
    
    Chinese Summary: Python(中文:蟒蛇)是一种广泛使用的高级编程语言,由吉多·范罗苏姆(Guido van Rossum)创造,首次发布于1991年。Python以其代码可读性和简洁的设计哲学而闻名...
    

    8. 资源与文档

  • PyPI 页面:https://pypi.org/project/wikipedia/
  • GitHub 仓库:https://github.com/goldsmith/Wikipedia
  • 官方文档:https://wikipedia.readthedocs.io/(有限,建议参考源代码或 PyPI)
  • MediaWiki API:https://www.mediawiki.org/wiki/API:Main_page
  • 维基百科政策:https://www.mediawiki.org/wiki/API:Etiquette
  • 作者:彬彬侠

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】Wikipedia库实战指南:轻松获取维基百科数据

    发表回复