[爬蟲][反反爬]使用 undetected_chromedriver 爬取 Dcard 文章資料

前言

最近在爬 Dcard 的資料時,試了許多反反爬的方式。今天就來分享可以解決 Dcard 反爬機制的工具 —— 「undetected_chromedriver」 。它可以幫助我們解決被擋的問題,並實現穩定的網頁爬蟲。

當我們頻繁去爬取 Dcard 頁面資料時,可能會出現以下的畫面:

“Error 1020: Access Denied” 是 Cloudflare 防火牆保護的網站上可能出現的錯誤訊息。當我們嘗試訪問一個受到 Cloudflare 保護的網址時,Cloudflare 會封鎖我們的 IP 地址,導致我們無法訪問這個網站。

什麼是 undetected_chromedriver

undetected_chromedriver 是一個基於 ChromeDriver 的 Python Library,它提供了一個穩定和不被檢測的瀏覽器環境,繞過網站的反爬蟲機制,讓我們可以順利爬取數據。

爬取 Dcard 範例

首先,我們需要安裝 undetected_chromedriver 庫

1
pip install undetected-chromedriver

接著就能使用它了

1
2
3
4
5
import undetected_chromedriver as uc


driver = uc.Chrome()
driver.get( '要讀取的網站' )

實作範例:爬取 Dcard 手搖板文章 URL

接著我們使用它來爬取 Dcard 手搖版的連結

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
import random
import undetected_chromedriver as uc

# 使用 undetected_chromedriver 初始化 Chrome 瀏覽器
driver = uc.Chrome()

# 前往手搖版
driver.get("https://www.dcard.tw/f/boba")

# 等待頁面載入
sleep(5)


try:
# 等待文章元素出現
wait = WebDriverWait(driver, 10)
articles = wait.until(EC.presence_of_all_elements_located((By.TAG_NAME, "article")))

# 提取文章的連結
urls = [article.find_element(By.TAG_NAME, "a").get_attribute("href") for article in articles]
print(urls)

except Exception as e:
print("錯誤:", e)

# 關閉瀏覽器
driver.quit()

結語

除了 Dcard 的爬取,undetected_chromedriver 當然也可以應用於其他類似的情境中。祝大家在爬取網頁資料的旅程中順利!

參考資料

undetected_chromedriver Github


[爬蟲][反反爬]使用 undetected_chromedriver 爬取 Dcard 文章資料
https://shinyu0430.github.io/2023/05/17/dcard-webcrawl-uc/
作者
Mavis Tsai
發布於
2023年5月17日
許可協議