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以其代碼可讀性和簡潔的設計哲學而聞名...