本文轉載自以下網站: Scrapy 中設置隨機 User-Agent 的方法匯總 https://www.makcyun.top/web_scraping_withpython14.html
一行代碼搞定 Scrapy 中的隨機 UA 設置。
摘要:爬蟲過程中的反爬措施非常重要,其中設置隨機 User-Agent 是一項重要的反爬措施,Scrapy 中設置隨機 UA 的方式有很多種,有的復雜有的簡單,本文就對這些方法進行匯總,提供一種只需要一行代碼的設置方式。
最近使用 Scrapy 爬一個網站,遇到了網站反爬的情況,於是開始搜索一些反爬措施,了解到設置隨機 UA 來偽裝請求頭是一種常用的方式,這能夠做到一定程度上避免網站直接識別出你是一個爬蟲從而封掉你。設置隨機 UA 的方法有挺多種,有的需要好多行代碼,有的卻只需要一行代碼就搞定了,接下來就來介紹下。
▌常規設置 UA
首先,說一下常規情況不使用 Scrapy 時的用法,比較方便的方法是利用 fake_useragent包,這個包內置大量的 UA 可以隨機替換,這比自己去搜集羅列要方便很多,下面來看一下如何操作。
首先,安裝好fake_useragent包,一行代碼搞定:
pip install fake-useragent |
然后,就可以測試了:
from fake_useragent import UserAgent |
這里,使用了 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。
response.request.headers['User-Agent'] |
▌手動添加 UA
第二種方法,是在 settings.py 文件中手動添加一些 UA,然后通過 random.choise 方法隨機調用,即可生成 UA,這種方便比較麻煩的就是需要自己去找 UA,而且增加了代碼行數量。
▌middlewares.py 中設置 UA
第三種方法,是使用 fake-useragent 包,在 middlewares.py 中間件中改寫 process_request() 方法,添加以下幾行代碼即可。
from fake_useragent import UserAgent |
然后,我們回到 settings.py 文件中調用自定義的 UserAgent,注意這里要先關閉默認的 UA 設置方法才行。
DOWNLOADER_MIDDLEWARES = { |
可以看到,我們成功得到了隨機 UA。
▌一行代碼設置 UA
可以看到,上面幾種方法其實都不太方便,代碼量也比較多,有沒有更簡單的設置方法呢?
有的,只需要一行代碼就搞定,利用一款名為 scrapy-fake-useragent 的包。
先貼一下該包的官方網址:https://pypi.org/project/scrapy-fake-useragent/,使用方法非常簡單,安裝好然后使用就行了。
執行下面的命令進行安裝,然后在 settings.py 中啟用隨機 UA 設置命令就可以了,非常簡單省事。
pip install scrapy-fake-useragent |
DOWNLOADER_MIDDLEWARES = { |
我們輸出一下 UA 和網頁 Response,可以看到成功輸出了結果。
以上就是 Scrapy 中設置隨機 UA 的幾種方法,推薦最后一種方法,即安裝 scrapy-fake-useragent 庫,然后在 settings 中添加下面這一行代碼即可:
'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400, |
另外,反爬措施除了設置隨機 UA 以外,還有一種非常重要的措施是設置隨機 IP,我們后續再進行介紹。







