Scrapy爬蟲框架之下載器中間件(可設(shè)置隨機請求頭和隨機代理IP)

Downloader Middlewares (下載器中間件)

下載器中間件是引擎和下載器之間通信的中間件色徘。在這個中間件中我們可以設(shè)置代理捣域、更換請求頭等來達到反反爬蟲的目的。要寫下載器中間件衣形,可以在下載器中實現(xiàn)兩個方法翎苫。

process_request(self,request,spider),這個方法是在請求發(fā)送之前會執(zhí)行

process_ response(self ,request,response,spider)零聚,這個方法是數(shù)據(jù)下載到引擎之前執(zhí)行

process_ request(self,request,spider):

這個方法是下載器在發(fā)送請求之前會執(zhí)行的袍暴。一般可以在這個里面設(shè)置隨機代理ip等。

1.參數(shù):

  • request 發(fā)送請求的request對象隶症。

  • spider 發(fā)送請求的spider對象政模。

2.返回值:

  • 返回None :如果返回None, Scrapy將 繼續(xù)處理該request,執(zhí)行其他中間件中的相應(yīng)方法,直到合適的下載器處理函數(shù)被調(diào)用蚂会。

  • 返回Response對象: Scrapy將不會調(diào)用任何其他的process. request方法淋样,將直接返回這個response對象。

已經(jīng)激活的中間件的process_ response()方法則會在每個response返回時被調(diào)用胁住。

  • 返回Request對象:不再使用之前的request對象去下載數(shù)據(jù)趁猴,而是根據(jù)現(xiàn)在返回的request對象返回數(shù)據(jù)刊咳。如果這個方法中拋出了異常,則會調(diào)用process. exception方法儡司。

process_response(self,request,response,spider):

這個是下載器下載的數(shù)據(jù)到引擎中間會執(zhí)行的方法娱挨。

1.參數(shù):

  • request: request對象。

  • response:被處理的response對象枫慷。

  • spider: splder對象让蕾。

2.返回值:

  • 返回Response對象: 會將這個新的response對象傳給其他中間件,最終傳給爬蟲或听。

  • 返回Request對象:下載器鏈被切斷探孝,返回的request會重新被下載器調(diào)度下載。

  • 如果拋出一個異常誉裆,那么調(diào)用request的errback 方法顿颅,如果沒有指定這個方法,那么會拋出一個異常足丢。

隨機請求頭中間件:

爬蟲在頻繁訪問一個頁面的時候粱腻,這個請求頭如果一直保持一致。那么很容易被服務(wù)器發(fā)現(xiàn)斩跌,從而禁止掉這個請求頭的訪問绍些。因此我們要在訪問這個頁面之前隨機的更改請求頭,這樣才可以避免尼蟲被抓耀鸦。隨機更改請求頭柬批,可以在下載中間件中實現(xiàn)。在請求發(fā)送給服務(wù)器之前袖订,隨機的選擇一一個請求頭氮帐。這樣就可以避免總使用一個請求頭了。示例代碼如下:

1.在middlewares.py里面編寫隨機請求頭中間件

請求頭可以去這個網(wǎng)站去找
http://www.useragentstring.com/pages/useragentstring.php?typ=Browser

class UserAgentDownloadMiddleware(object):
    # user-agent 設(shè)置隨機的請求頭中間鍵
    USER_AGENTS = [
        'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
        'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1',
        'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko',
        'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.21pre) Gecko K-Meleon/1.7.0',
        'Mozilla/4.0 (compatible; MSIE 6.0; Windows XP 5.1) Lobo/0.98.4',
        'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.28) Gecko/20120410 Firefox/3.6.28 '
    ]

    def process_request(self, request, spider):
        # random.choice()在列表中隨機選擇一個
        user_agent = random.choice(self.USER_AGENTS)
        request.headers['User-Agent'] = user_agent
  1. 寫好中間件之后記得要在settings.py調(diào)用
DOWNLOADER_MIDDLEWARES = {
   'useragent_demo.middlewares.UserAgentDownloadMiddleware': 543,
}

上一篇:Scrapy爬蟲框架之Request和Response(請求和響應(yīng))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洛姑,一起剝皮案震驚了整個濱河市上沐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌楞艾,老刑警劉巖参咙,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異产徊,居然都是意外死亡昂勒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門舟铜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來戈盈,“玉大人,你說我怎么就攤上這事√寥ⅲ” “怎么了归斤?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刁岸。 經(jīng)常有香客問我脏里,道長,這世上最難降的妖魔是什么虹曙? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任迫横,我火速辦了婚禮,結(jié)果婚禮上酝碳,老公的妹妹穿的比我還像新娘矾踱。我一直安慰自己,他們只是感情好疏哗,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布呛讲。 她就那樣靜靜地躺著,像睡著了一般返奉。 火紅的嫁衣襯著肌膚如雪贝搁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天芽偏,我揣著相機與錄音雷逆,去河邊找鬼。 笑死污尉,一個胖子當(dāng)著我的面吹牛关面,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播十厢,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捂齐!你這毒婦竟也來了蛮放?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤奠宜,失蹤者是張志新(化名)和其女友劉穎包颁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體压真,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡娩嚼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了滴肿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岳悟。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贵少,到底是詐尸還是另有隱情呵俏,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布滔灶,位于F島的核電站普碎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏录平。R本人自食惡果不足惜麻车,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斗这。 院中可真熱鬧动猬,春花似錦、人聲如沸涝影。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽燃逻。三九已至序目,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伯襟,已是汗流浹背猿涨。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姆怪,地道東北人叛赚。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像稽揭,于是被迫代替她去往敵國和親俺附。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容