Skip to content

pandas爬資料

pandas 中,有幾種常見的方法可以用來抓取網路上的資料:


1. 讀取 CSV 檔案

如果網頁提供了 CSV 檔案的下載連結,可以直接使用 pd.read_csv(url) 讀取:

import pandas as pd

url = "https://example.com/data.csv"
df = pd.read_csv(url)

print(df.head())  # 顯示前五筆資料

2. 讀取 JSON 資料

如果 API 或網站提供 JSON 格式的數據,可以使用 pd.read_json(url)

url = "https://example.com/data.json"
df = pd.read_json(url)

print(df.head())

3. 讀取 HTML 表格

如果網頁上有 表格 (HTML <table>),可以使用 pd.read_html(url)

url = "https://example.com/page_with_table.html"
dfs = pd.read_html(url)  # 這會返回一個 DataFrame 的列表
df = dfs[0]  # 選擇第一個表格

print(df.head())

注意read_html() 需要 lxmlhtml5libBeautifulSoup4 支援,請確保已安裝:

pip install lxml html5lib beautifulsoup4

4. 用 requests + pandas 讀取 API

如果是 API 回傳 JSON 格式數據,可以使用 requests 來獲取資料,再轉換成 pandas DataFrame:

import requests

url = "https://example.com/api/data"
response = requests.get(url)

if response.status_code == 200:
    data = response.json()  # 解析 JSON
    df = pd.DataFrame(data)  # 轉換成 DataFrame
    print(df.head())

5. 用 BeautifulSoup 抓取特定資料

如果網頁上的數據不是直接以表格呈現,而是嵌在 HTML 裡,可以用 BeautifulSoup 抓取:

from bs4 import BeautifulSoup
import requests

url = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 假設數據在 <div class="data"> 中
data = [item.text for item in soup.find_all("div", class_="data")]

# 轉成 DataFrame
df = pd.DataFrame(data, columns=["Data"])

print(df.head())

需要安裝 beautifulsoup4

pip install beautifulsoup4

總結

方法 適用情境
pd.read_csv(url) 網頁提供 CSV 下載
pd.read_json(url) 網頁提供 JSON 下載
pd.read_html(url) 網頁有 HTML <table>
requests.get(url).json() + pd.DataFrame() API 回傳 JSON
BeautifulSoup 網頁沒有標準表格,需要解析 HTML