【Python】wikipedia 库:用于从维基百科(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. 资源与文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值