【Python】Wikipedia库实战指南:轻松获取维基百科数据
wikipedia 是一个 Python 库,用于从维基百科(Wikipedia)获取数据。它提供了一个简单易用的接口,允许用户搜索维基百科页面、获取页面内容、摘要、链接、图片等信息。该库主要通过维基百科的 API(MediaWiki API)与维基百科交互,适用于快速原型开发、数据挖掘或教育用途。
以下是对 wikipedia 库的详细说明和常见用法。
1. wikipedia 库的作用
注意:
wikipedia库是第三方库,不是 Python 标准库,且功能较为基础。对于复杂需求(如批量爬取、解析维基文本),推荐使用wikipedia-api或直接调用 MediaWiki API。
2. 安装与环境要求
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])
说明:
beautifulsoup4 解析特定元素。4. 性能与限制
summary()。wikipedia 库最后更新较旧(截至 2023 年为 1.4.0),可能不完全支持最新 MediaWiki API 特性。5. 实际应用场景
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 请求超时。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. 资源与文档
作者:彬彬侠