溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么用代碼搞定Scrapy隨機(jī) User-Agent

發(fā)布時(shí)間:2021-12-04 16:15:04 來(lái)源:億速云 閱讀:197 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)怎么用代碼搞定Scrapy隨機(jī) User-Agent,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

摘要:爬蟲(chóng)過(guò)程中的反爬措施非常重要,其中設(shè)置隨機(jī) User-Agent 是一項(xiàng)重要的反爬措施,Scrapy 中設(shè)置隨機(jī) UA 的方式有很多種,有的復(fù)雜有的簡(jiǎn)單,本文就對(duì)這些方法進(jìn)行匯總,提供一種只需要一行代碼的設(shè)置方式。

最近使用 Scrapy 爬一個(gè)網(wǎng)站,遇到了網(wǎng)站反爬的情況,于是開(kāi)始搜索一些反爬措施,了解到設(shè)置隨機(jī) UA 來(lái)偽裝請(qǐng)求頭是一種常用的方式,這能夠做到一定程度上避免網(wǎng)站直接識(shí)別出你是一個(gè)爬蟲(chóng)從而封掉你。設(shè)置隨機(jī) UA 的方法有挺多種,有的需要好多行代碼,有的卻只需要一行代碼就搞定了,接下來(lái)就來(lái)介紹下。

▌常規(guī)設(shè)置 UA

首先,說(shuō)一下常規(guī)情況不使用 Scrapy 時(shí)的用法,比較方便的方法是利用 fake_useragent包,這個(gè)包內(nèi)置大量的 UA 可以隨機(jī)替換,這比自己去搜集羅列要方便很多,下面來(lái)看一下如何操作。

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

1pip install fake-useragent

然后,就可以測(cè)試了:

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

這里,使用了 ua.random 方法,可以隨機(jī)生成各種瀏覽器的 UA,見(jiàn)下圖:

怎么用代碼搞定Scrapy隨機(jī) User-Agent

(放大查看)

如果只想要某一個(gè)瀏覽器的,比如 Chrome ,那可以改成 ua.chrome,再次生成隨機(jī) UA 查看一下:

怎么用代碼搞定Scrapy隨機(jī) User-Agent

以上就是常規(guī)設(shè)置隨機(jī) UA 的一種方法,非常方便。

下面,我們來(lái)介紹在 Scrapy 中設(shè)置隨機(jī) UA 的幾種方法。

先新建一個(gè) Project,命名為 wanojia,測(cè)試的網(wǎng)站選擇為:http://httpbin.org/get

首先,我們來(lái)看一下,如果不添加 UA 會(huì)得到什么結(jié)果,可以看到顯示了scrapy,這樣就暴露了我們的爬蟲(chóng),很容易被封。

怎么用代碼搞定Scrapy隨機(jī) User-Agent

下面,我們添加上 UA 。

▌直接設(shè)置 UA

怎么用代碼搞定Scrapy隨機(jī) User-Agent

第一種方法是和上面程序一樣,直接在主程序中設(shè)置 UA,然后運(yùn)行程序,通過(guò)下面這句命令可以輸出該網(wǎng)站的 UA,見(jiàn)上圖箭頭處所示,每次請(qǐng)求都會(huì)隨機(jī)生成 UA,這種方法比較簡(jiǎn)單,但是每個(gè) requests 下的請(qǐng)求都需要設(shè)置,不是很方便,既然使用了 Scrapy,它提供了專(zhuān)門(mén)設(shè)置 UA 的地方,所以接下來(lái)我們看一下如何單獨(dú)設(shè)置 UA。

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

▌手動(dòng)添加 UA

怎么用代碼搞定Scrapy隨機(jī) User-Agent

第二種方法,是在 settings.py 文件中手動(dòng)添加一些 UA,然后通過(guò) random.choise 方法隨機(jī)調(diào)用,即可生成 UA,這種方便比較麻煩的就是需要自己去找 UA,而且增加了代碼行數(shù)量。

▌middlewares.py 中設(shè)置 UA

第三種方法,是使用 fake-useragent 包,在 middlewares.py 中間件中改寫(xiě) 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 文件中調(diào)用自定義的 UserAgent,注意這里要先關(guān)閉默認(rèn)的 UA 設(shè)置方法才行。

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

可以看到,我們成功得到了隨機(jī) UA。

怎么用代碼搞定Scrapy隨機(jī) User-Agent

▌一行代碼設(shè)置 UA

可以看到,上面幾種方法其實(shí)都不太方便,代碼量也比較多,有沒(méi)有更簡(jiǎn)單的設(shè)置方法呢?

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

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

執(zhí)行下面的命令進(jìn)行安裝,然后在 settings.py 中啟用隨機(jī) UA 設(shè)置命令就可以了,非常簡(jiǎn)單省事。

1pip install scrapy-fake-useragent
1DOWNLOADER_MIDDLEWARES = {
2    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, # 關(guān)閉默認(rèn)方法
3    'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400, # 開(kāi)啟
4}

我們輸出一下 UA 和網(wǎng)頁(yè) Response,可以看到成功輸出了結(jié)果。

怎么用代碼搞定Scrapy隨機(jī) User-Agent

以上就是 Scrapy 中設(shè)置隨機(jī) UA 的幾種方法,推薦最后一種方法,即安裝 scrapy-fake-useragent 庫(kù),然后在 settings 中添加下面這一行代碼即可:

1'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400,

另外,反爬措施除了設(shè)置隨機(jī) UA 以外,還有一種非常重要的措施是設(shè)置隨機(jī) IP。

看完上述內(nèi)容,你們對(duì)怎么用代碼搞定Scrapy隨機(jī) User-Agent有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI