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