pandas、requests 和 Selenium 三個 Python 模組的簡單介紹及比較
這三個模組在爬蟲過程中經常會搭配使用,requests 和 pandas 通常用於靜態網頁的抓取和數據處理,Selenium 用於處理動態網頁和複雜的交互操作。
模組 | 主要用途 | 優點 | 缺點 | 適用場景 |
---|---|---|---|---|
pandas |
數據處理與分析 抓表格 | 高效的數據處理與分析功能,支持多種數據格式 | 主要處理結構化數據,不適用於爬蟲抓取 | 數據分析、數據清洗與處理 |
requests |
發送 HTTP 請求並獲取網頁內容 使用get和Post抓資料 | 簡單、快速、輕量 | 不支持動態網頁、JavaScript 渲染的內容 | 靜態網頁抓取 |
Selenium |
自動化瀏覽器操作 | 支持js動態網頁,可以模擬用戶操作 | 速度較慢,資源消耗大 | 動態網頁抓取,需要與頁面交互時 |
在政府網站的資料開放區、行政院資料開放平台,通常有個地方可以下載 csv 檔,把下載的連結複製之後,貼到 url,再用 pandas 的 read_csv 讀就可以直接用了
import pandas as pd
url = 'https://www.ncc.gov.tw/chinese/files/opendata/%E8%A1%8C%E5%8B%95%E9%80%9A%E4%BF%A1%E6%A5%AD%E5%8B%99%E5%9F%BA%E5%9C%B0%E8%87%BA%E7%B5%B1%E8%A8%88%E6%95%B8(%E5%8D%80%E5%88%86%E7%B8%A3%E5%B8%82%E6%A5%AD%E8%80%85).csv'
#url = 'https://www.ncc.gov.tw/chinese/files/opendata/行動通信業務基地臺統計數(區分縣市業者).csv' # 這樣是不行的
df = pd.read_csv(url, header=0) # 這裡的 header 指的是要用第幾列資料當作表頭
df
看到網頁裡面有表格,就要想到可以用 read_html。read_html 同時有送請求和解析的功能,送請求的部分只能用 get 請求,似乎沒什麼偽裝,所以可以直接放網址的網頁越來越少。但只要先用 requests 取得網頁原始碼,再用 read_html 解析,就可以省去用 BeautifulSoup 解析和定位的功夫。 回到剛才台積電重訊清單的例子,原本的程式碼如下:
url = 'https://mops.twse.com.tw/mops/web/ajax_t05st01'
data = {'firstin': 1, 'co_id': 2330, 'year': 113}
r = requests.post(url, headers=header, data=data)
soup = BeautifulSoup(r.text, 'html.parser')
soup
用途:發送 HTTP 請求(如 GET 和 POST),用於下載網頁內容。
特點:簡單易用,適合抓取靜態網頁。
安裝:pip install requests
範例:
import requests
response = requests.get("https://example.com")
print(response.text)
用途:自動化操作瀏覽器,抓取需要 JavaScript 渲染的動態網頁。
特點:支持模擬用戶操作(點擊、滾動等)。
檢查是否已安裝:pip show selenium
安裝:pip install selenium
範例:
from selenium import webdriver
driver = webdriver.Chrome() # 確保已安裝 ChromeDriver
driver.get("https://example.com")
print(driver.page_source) # 獲取渲染後的 HTML
driver.quit()
在 Selenium 中,driver 是瀏覽器驅動的實例(對象),用於與瀏覽器進行交互。這裡的 webdriver.Chrome() 表示使用 Google Chrome 作為瀏覽器,並啟動 Chrome 驅動程序(即 ChromeDriver)。
進階爬蟲工具 Python-Selenium : 安裝和使用ChromeDriver
Python進階爬蟲工具-Selenium : 定位