Python自動化工具 – 爬蟲爬不了? 使用虛擬UA來略過反爬蟲機制

目的:

若您開始深入研究,會發現有些網站是對爬蟲或自動化程式比較不友善。而網站辨認是不是爬蟲來瀏覽網頁第一步通常是看http request的檔頭,裡面會挾帶user-agent資訊,也就是告訴網路主機你是什麼瀏覽器。因此爬蟲類的瀏覽器,例如: Scrapy 或 Selenium的webdrive有機會被主機發現,而阻擋你爬取資料。有些網站例如: 蝦皮,它透過辨認user-agent看到是爬蟲來爬,就會直接轉址到其他說明頁面,讓爬蟲硬生生停下來。

因此本文將透過更改UA的方式,來讓網頁主機以為是真正的瀏覽器來看網頁,就不會阻擋它了。

若對爬蟲還不熟的人,可以先看下面這兩篇:

Python自動化工具 – Selenium 機器人般的瀏覽器

Python自動化工具 – 實戰PyAutoGUI 來自動註冊Twitter帳號

問題:

爬蟲對主機來說,基本是一種以擬人的方式瀏覽網頁藉而奪取資料的行為。因此很多網站會故意防止爬蟲入侵,最簡單的方式就是看瀏覽器在http協議中; 提出 request的檔頭,裡面一定會帶有一個user-agent資料來告訴網頁主機,我是用什麼瀏覽器,請依照我的瀏覽器給我資料,以符合網頁渲染的版型、設計、功能等。

打個比方來說,就是告訴網頁主機,我是哪種人,請你餵給我哪一種食物。

而先前提到的 webdrive ,或是Scrapy 都會直接 / 間接透漏自己的身分。

什麼是User-Agemt、該如何查詢?

在任一個瀏覽器的網頁上面,任意瀏覽一個頁面,按右鍵,選 “檢查元素” 或 “檢查”。接著會跳出下圖般的介面,再來點選 “網路” 或 “Network” ,在按一次F5,讓網頁重新載入,接著看左下欄位,裡面會有目前在讀取的資料 ,可選http 頭字段或任一資料,接著在右邊找到user-agent欄位。

後面的資料就是此篇文章的主角。

下圖是  Firefox 瀏覽器

下圖為 Chrome 瀏覽器

方法:

利用設定argument的方式,更改UA參數。參考程式如下。

# !/usr/bin/python
# -*- coding: utf-8 -*-

from selenium import webdriver
#設定瀏覽器選項
options = webdriver.ChromeOptions()
#設定語系
options.add_argument('lang=zh_TW.UTF-8')
#更換User-Agent
options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"')

browser = webdriver.Chrome(chrome_options=options)

#開啟網址
url = "https://google.com.tw"
browser.get(url)

這裡收錄了兩種user-agent,分別是Chrome 84版、以及 Firefox 79版。若有需要的人可以從包含Mozilla/5.0的地方開始複製貼上到code裡面。

Mozilla/5.0 代表是一種現代瀏覽器的代碼,讓主機能夠知道你的瀏覽器與這些規格相符。

##User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36

##User-Agent Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0

以上就完成了更改user-agent的方式。

現成套件 Fake-UserAgent:

若覺得上面貼得user-agent 範例還不夠用,可以直接安裝fake-useragent套件。由它直接幫你生成user-agent細節代碼。

conda install -c mlgill fake-useragent

如此一來,就能透過直接呼叫  ua.ie 或 ua.chrome 等方式,直接回傳str值到變數內。非常方便就能造假出各種瀏覽器。

ua.ie
# 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)'

結論:

簡單更改字串,是躲過防止爬蟲機制的第一步,很多網站其實沒有很嚴格阻擋爬蟲,透過修改User Agent已經能解決大部分網站不給爬的文題。

這技巧相當實用又簡單,供遇到問題的人參考。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *