用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)
:
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()
需要 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
:
總結
方法 | 適用情境 |
---|---|
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 |