企業獨享

經銷商

$0

身份未認證
ico_andr

儀表板

ico_andr

代理設定

right
API 提取
帳密驗證
代理管理器
Local Time Zone

本地時區

right
使用設備的本地時區
(UTC+0:00) 格林威治標準時間
(UTC-8:00) 太平洋時間(美國和加拿大)
(UTC-7:00) 亞利桑那州(美國)
(UTC+8:00) 香港(CN)、新加坡
ico_andr

帳戶

icon

身份認證

img $0
logo

EN

img 語言

當地時區

使用設備的本地時區
(UTC+0:00)
格林威治標準時間
(UTC-8:00)
太平洋時間(美國和加拿大)
(UTC-7:00)
亞利桑那州(美國)
(UTC+8:00)
香港(中國)、新加坡
首頁 img 博客 img 如何使用Python抓取維基百科數據

如何使用Python抓取維基百科數據

作者 Annie
上傳時間: 2025-04-23
更新時間: 2025-04-23

一、維基百科的數據類型


維基百科作為全球最大的免費在線百科全書,擁有超過 6000 萬篇多語言文章,其結構化數據和開放版權特性使其成為理想的網頁抓取學習對象。通過抓取維基百科,您可以獲取:


image.png


當把以上的數據類型進行分類匯總,會發現大概可以抓取的種類是如下的四種:


文本數據


當抓取的是文本數據時,可用於語言學研究,分析不同語言的使用習慣、詞匯頻率等。如統計英語文章中不同詞性的分佈情況。也可用於構建文本語料庫,為機器學習中的自然語言處理任務提供訓練數據,像訓練情感分析模型、文本生成模型等。


錶格數據


人們往往需要錶格去進行數據分析,抓取的錶格數據可用於收集各種結構化信息。如歴史事件的時間軸、各國經濟數據對比、體育賽事成績排名等,便於後續的數據分析和可視化。


圖片數據


維基百科的圖片可用於圖像識別相關的機器學習項目。如訓練圖像分類模型、目標檢測模型等。也可用於文化研究,分析不同歴史時期藝術風格的演變等。例如,收集不同時期繪畫作品的圖片,研究繪畫風格的變遷。


鏈接數據


通過分析鏈接結構,可以了解文章之間的引用關繫和相關性,有助於構建知識圖譜和推薦繫統。例如,根據頁面之間的鏈接關繫,推薦與當前瀏覽頁面相關的其他頁面內容。


二、如何使用Python抓取維基百科


首先確定要抓取的維基百科頁面,接下來的教程將以這個頁面作為參考進行抓取https://en.wikipedia.org/wiki/Python_(programming_language)


image.png


1.准備環境


在開始抓取維基百科數據之前,需要准備好 Python 環境併安裝必要的庫。


  • 安裝 Python:確保妳的繫統已安裝 Python 3.6+


  • 創建環境:


# 創建環境(Windows)
python -m venv venv
# 激活(Windows)
venv\Scripts\activate
# 創建環境(Mac/Linux)
python3 -m venv venv
# 激活(Mac/Linux)
source venv/bin/activate



激活後,終端應顯示 (venv) 前綴。


  • 安裝必要的庫


pip install requests beautifulsoup4 pandas


requests:用於發送 HTTP 請求(獲取網頁內容)

beautifulsoup4:用於解析 HTML 併提取數據


測試環境是否正常


import requests
from bs4 import BeautifulSoup
url = "https://en.wikipedia.org/wiki/Python_(programming_language)"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
print("頁面標題:", soup.title.text)


2.檢查頁面


抓取維基百科頁面時,我們需要確保頁面存在。這就需要妳右鍵單擊光標併選擇查看網頁源代碼。如果妳要提取所有的鏈接,那麽妳可以確定標記位置:<a>


image.png


如果要提取圖片,那麽妳可以確定標記位置:<img>src


image.png


從錶格中提取數據也是一樣,幫您收集行和列:<table>wikitable


image.png


要提取段落,只要包含主要的文本內容即可:<p>


image.png


以下是完整的代碼示例,可以從維基百科頁面提取和保存數據:


import requests
from bs4 import BeautifulSoup
import csv



1. 獲取頁面內容


url = "https://en.wikipedia.org/wiki/Python_(programming_language)"
headers = {'User-Agent': 'Mozilla/5.0'}  # 模擬瀏覽器訪問
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')


2. 提取核心數據


def scrape_wikipedia_page(soup):
    data = {
        "title": "",
        "text": [],
        "images": [],
        "tables": [],
        "links": []
    }



    提取標題

data["title"] = soup.find('h1', id='firstHeading').text



    提取正文文本(排除引用標記)

   

for paragraph in soup.select('div.mw-parser-output > p'):
        text = paragraph.get_text().strip()
        if text:  # 跳過空段落
            data["text"].append(text)



    提取圖片(獲取src和alt文本)

   

for img in soup.select('div.mw-parser-output img'):
        data["images"].append({
            "src": img.get('src', ''),
            "alt": img.get('alt', ''),
            "caption": img.find_parent('figcaption').text if img.find_parent('figcaption') else ""
        })



    提取錶格(包括信息框)

   

for table in soup.select('table'):
        rows = []
        for row in table.find_all('tr'):
            cells = [cell.get_text(strip=True) for cell in row.find_all(['th', 'td'])]
            if cells:
                rows.append(cells)
        if rows:  # 跳過空錶格
            data["tables"].append(rows)



    提取內部鏈接(僅限維基百科站內鏈接)

   

for link in soup.select('div.mw-parser-output a[href^="/wiki/"]'):
        if ':' not in link['href']:  # 過濾特殊頁面(如"File:")
            data["links"].append({
                "text": link.get_text(strip=True),
                "url": "https://en.wikipedia.org" + link['href']
            })
    return data



3. 執行抓取

page_data = scrape_wikipedia_page(soup)



4. 打印部分結果示例

print(f"標題: {page_data['title']}\n")
print("前兩段文本:")
for i, text in enumerate(page_data['text'][:2], 1):
    print(f"{i}. {text[:150]}...")  # 截斷顯示
print("\n前兩張圖片:")
for img in page_data['images'][:2]:
    print(f"描述: {img['alt']}\n鏈接: https:{img['src']}")  # 補全協議
print("\n第一個錶格的前兩行:")
for row in page_data['tables'][0][:2]:  # 通常第一個是信息框
    print(row)
print("\n前五個鏈接:")
for link in page_data['links'][:5]:
    print(f"{link['text']}: {link['url']}")



5. 保存為CSV文件(示例:保存鏈接數據)

with open('wikipedia_links.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['Link Text', 'URL'])
    for link in page_data['links']:
        writer.writerow([link['text'], link['url']])



三、網頁抓取存在哪些風險?


版權問題:網頁上的內容通常受版權保護。未經授權抓取和使用受版權保護的數據,可能構成侵權,需承擔相應的法律責任。


違反網站使用條款:許多網站在其使用條款中明確處理抓取行為,違反這些條款可能導致法律訴訟或被處理訪問該網站。


反爬蟲機制:經常的請求可能會導致 IP 地址被網絡異常,從而中斷數據抓取過程。維基百科頁面的結構復雜,包含大量的動態內容和嵌套元素,這使得准確提取所需數據變得睏難。


數據准確性:維基百科的內容由用戶編輯,雖然有審核機制,但仍然可能存在錯誤、不完整或過時的信息。抓取的數據如果未經進一步驗證和清洗,可能會對後續的研究或分析產生誤導。


維基百科頁面可能會經常更新,抓取的數據可能在短時間內就失去時效性,需要定期重新抓取以保持數據的最新狀態。


因此,在抓取維基百科網頁數據時,必須謹慎行事,充分考慮這些處理和風險,併採取相應的措施來確保數據抓取的合法性和可持續性。


四、結論


網頁抓取是一項強大的技術工具,尤其在獲取維基百科這類開放知識庫時,能夠為學術研究、商業分析和創新應用提供寶貴的數據支持。然而,這一過程涉及法律、技術、倫理等多方面的挑戰,需要謹慎操作。


如果您需要專業的網頁抓取服務,不妨嘗試一下LunaProxy,我們為個人和企業提供高效的抓取服務,確保您無限使用流量、獲取准確的數據信息。

目錄
公告欄
通過站內訊息即時了解luna的最新活動和功能更新。
通過電子郵件聯絡我們
提示:
  • 提供您的帳號或電子郵件。
  • 提供截圖或視頻,並簡單描述問題。
  • 我們將在 24 小時內回覆您的問題。
WhatsApp
加入我們的頻道,以了解有關 LunaProxy 產品和最新發展的最新資訊。
icon

請通過郵件聯繫客服

[email protected]

我們將在24小時內通過電子郵件回复您