1. 程式人生 > >一行程式碼搞定 Scrapy 隨機 User-Agent 設定

一行程式碼搞定 Scrapy 隨機 User-Agent 設定

摘要:爬蟲過程中的反爬措施非常重要,其中設定隨機 User-Agent 是一項重要的反爬措施,Scrapy 中設定隨機 UA 的方式有很多種,有的複雜有的簡單,本文就對這些方法進行彙總,提供一種只需要一行程式碼的設定方式。

最近使用 Scrapy 爬一個網站,遇到了網站反爬的情況,於是開始搜尋一些反爬措施,瞭解到設定隨機 UA 來偽裝請求頭是一種常用的方式,這能夠做到一定程度上避免網站直接識別出你是一個爬蟲從而封掉你。設定隨機 UA 的方法有挺多種,有的需要好多行程式碼,有的卻只需要一行程式碼就搞定了,接下來就來介紹下。

▌常規設定 UA

首先,說一下常規情況不使用 Scrapy 時的用法,比較方便的方法是利用 fake_useragent

包,這個包內建大量的 UA 可以隨機替換,這比自己去搜集羅列要方便很多,下面來看一下如何操作。

首先,安裝好fake_useragent包,一行程式碼搞定:

1pip install fake-useragent

然後,就可以測試了:

1from fake_useragent import UserAgent
2ua = UserAgent()
3for i in range(10):
4    print(ua.random)

這裡,使用了 ua.random 方法,可以隨機生成各種瀏覽器的 UA,見下圖:

(放大檢視)

如果只想要某一個瀏覽器的,比如 Chrome ,那可以改成 ua.chrome,再次生成隨機 UA 檢視一下:

 

以上就是常規設定隨機 UA 的一種方法,非常方便。

下面,我們來介紹在 Scrapy 中設定隨機 UA 的幾種方法。

先新建一個 Project,命名為 wanojia,測試的網站選擇為:http://httpbin.org/get

首先,我們來看一下,如果不新增 UA 會得到什麼結果,可以看到顯示了scrapy,這樣就暴露了我們的爬蟲,很容易被封。

 

下面,我們新增上 UA 。

▌直接設定 UA

第一種方法是和上面程式一樣,直接在主程式中設定 UA,然後執行程式,通過下面這句命令可以輸出該網站的 UA,見上圖箭頭處所示,每次請求都會隨機生成 UA,這種方法比較簡單,但是每個 requests 下的請求都需要設定,不是很方便,既然使用了 Scrapy,它提供了專門設定 UA 的地方,所以接下來我們看一下如何單獨設定 UA。

1response.request.headers['User-Agent']

▌手動新增 UA

 

第二種方法,是在 settings.py 檔案中手動新增一些 UA,然後通過 random.choise 方法隨機呼叫,即可生成 UA,這種方便比較麻煩的就是需要自己去找 UA,而且增加了程式碼行數量。

▌middlewares.py 中設定 UA

第三種方法,是使用 fake-useragent 包,在 middlewares.py 中介軟體中改寫 process_request() 方法,新增以下幾行程式碼即可。

1from fake_useragent import UserAgent
2class RandomUserAgent(object):
3    def process_request(self, request, spider):
4        ua = UserAgent()
5        request.headers['User-Agent'] = ua.random

然後,我們回到 settings.py 檔案中呼叫自定義的 UserAgent,注意這裡要先關閉預設的 UA 設定方法才行。

1DOWNLOADER_MIDDLEWARES = {
2    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, 
3    'wandoujia.middlewares.RandomUserAgent': 543,
4}

可以看到,我們成功得到了隨機 UA。

 

▌一行程式碼設定 UA

可以看到,上面幾種方法其實都不太方便,程式碼量也比較多,有沒有更簡單的設定方法呢?

有的,只需要一行程式碼就搞定,利用一款名為  scrapy-fake-useragent 的包。

先貼一下該包的官方網址:https://pypi.org/project/scrapy-fake-useragent/,使用方法非常簡單,安裝好然後使用就行了。

執行下面的命令進行安裝,然後在 settings.py 中啟用隨機 UA 設定命令就可以了,非常簡單省事。

1pip install scrapy-fake-useragent
1DOWNLOADER_MIDDLEWARES = {
2    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, # 關閉預設方法
3    'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400, # 開啟
4}

我們輸出一下 UA 和網頁 Response,可以看到成功輸出了結果。

 

以上就是 Scrapy 中設定隨機 UA 的幾種方法,推薦最後一種方法,即安裝 scrapy-fake-useragent 庫,然後在 settings 中新增下面這一行程式碼即可:

1'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400,

另外,反爬措施除了設定隨機 UA 以外,還有一種非常重要的措施是設定隨機 IP,我們後續再進行介紹。