偽裝!?爬蟲還要偽裝喔?
是的,不知道各位還記不記得在"關於爬蟲"有提到過:
爬蟲存取網站的過程會消耗目標系統資源。
不少網路系統並不默許爬蟲工作。
因為以上原因,很多網站都會把爬蟲拒之門外,就是為了保護自己的 Server。那我們要怎麼讓程式像一個瀏覽器呢?
其實很簡單!我們先看這篇在 ithelp 的提問:
看完文章後,可以知道一般 HTTP Method 為 Get 且不用特別登入的網站,被擋下來的話,問題通常是出在 Headers 中的 User-Agent。而 User-Agent 就是用來告訴 Server,連線過來的 Client 是什麼瀏覽器、OS 等。
那為什麼 Python 會被擋掉?我們來檢查一下 Python 的預設 Header 是什麼。
import requests
res = requests.get("https://www.google.com/")
print(res.request.headers)
# {'User-Agent': 'python-requests/2.25.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
預設的 User-Agent 是 python-requests/2.25.1,直接不演的告訴 Server 我們是 Python 拉!
所以我們送 Request 前,得要帶入像瀏覽器的 User-agent。
方法有兩種:
from fake_useragent import UserAgent
ua = UserAgent()
# 不同瀏覽器的 User-Agent
ua.ie
ue.google
ua.firefox
ua.safari
# 隨機產生
ua.random
套用到程式的 Header 中:
import requests
from fake_useragent import UserAgent
ua = UserAgent()
res = requests.get("https://www.google.com/", headers={
"User-Agent": ua.random
})
以上就是基本的爬蟲偽裝。
再進階一點的可能就是要自己做 cookie 之類的,會稍微複雜一點點,但概念跟 Headers 類似,由於本系列是以基礎為主,所以這邊就先不討論了,有興趣的讀者可以自己 google 看看囉。