<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • Scrapy框架設(shè)置下載中間件的方法-創(chuàng)新互聯(lián)

            創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

            成都創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站制作、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元博湖做網(wǎng)站,已為上家服務(wù),為博湖各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575

            小編給大家分享一下Scrapy框架設(shè)置下載中間件的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家學(xué)習(xí),希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學(xué)習(xí)方法吧!

            設(shè)置下載中間件(Downloader Middlewares)

            下載中間件是處于引擎(crawler.engine)和下載器(crawler.engine.download())之間的一層組件,可以有多個下載中間件被加載運(yùn)行。

            1.當(dāng)引擎?zhèn)鬟f請求給下載器的過程中,下載中間件可以對請求進(jìn)行處理 (例如增加http header信息,增加proxy信息等);

            2.在下載器完成http請求,傳遞響應(yīng)給引擎的過程中, 下載中間件可以對響應(yīng)進(jìn)行處理(例如進(jìn)行g(shù)zip的解壓等)

            要激活下載器中間件組件,將其加入到 DOWNLOADER_MIDDLEWARES 設(shè)置中。 該設(shè)置是一個字典(dict),鍵為中間件類的路徑,值為其中間件的順序(order)。

            DOWNLOADER_MIDDLEWARES = {
                'mySpider.middlewares.MyDownloaderMiddleware': 543,
            }

            編寫下載器中間件十分簡單。每個中間件組件是一個定義了以下一個或多個方法的Python類:

            class scrapy.contrib.downloadermiddleware.DownloaderMiddleware

            process_request(self, request, spider)

            1.當(dāng)每個request通過下載中間件時,該方法被調(diào)用。

            2.process_request() 必須返回以下其中之一:一個 None 、一個 Response 對象、一個 Request 對象或 raise IgnoreRequest:

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

            (2)如果其返回 Response 對象,Scrapy將不會調(diào)用 任何 其他的 process_request() 或 process_exception() 方法,或相應(yīng)地下載函數(shù); 其將返回該response。 已安裝的中間件的 process_response() 方法則會在每個response返回時被調(diào)用。

            (3)如果其返回 Request 對象,Scrapy則停止調(diào)用 process_request方法并重新調(diào)度返回的request。當(dāng)新返回的request被執(zhí)行后, 相應(yīng)地中間件鏈將會根據(jù)下載的response被調(diào)用。

            (4)如果其raise一個 IgnoreRequest 異常,則安裝的下載中間件的 process_exception() 方法會被調(diào)用。如果沒有任何一個方法處理該異常, 則request的errback(Request.errback)方法會被調(diào)用。如果沒有代碼處理拋出的異常, 則該異常被忽略且不記錄(不同于其他異常那樣)。

            3.參數(shù):

            (1)request (Request 對象) – 處理的request

            (2)spider (Spider 對象) – 該request對應(yīng)的spider

            process_response(self, request, response, spider)

            1.當(dāng)下載器完成http請求,傳遞響應(yīng)給引擎的時候調(diào)用。

            2.process_request() 必須返回以下其中之一: 返回一個 Response 對象、 返回一個 Request 對象或raise一個 IgnoreRequest 異常。

            (1)如果其返回一個 Response (可以與傳入的response相同,也可以是全新的對象), 該response會被在鏈中的其他中間件的 process_response() 方法處理。

            (2)如果其返回一個 Request 對象,則中間件鏈停止, 返回的request會被重新調(diào)度下載。處理類似于 process_request() 返回request所做的那樣。

            (3)如果其拋出一個 IgnoreRequest 異常,則調(diào)用request的errback(Request.errback)。 如果沒有代碼處理拋出的異常,則該異常被忽略且不記錄(不同于其他異常那樣)。

            3.參數(shù):

            (1)request (Request 對象) – response所對應(yīng)的request

            (2)response (Response 對象) – 被處理的response

            (3)spider (Spider 對象) – response所對應(yīng)的spider

            實例

            #!/usr/bin/env python
            # -*- coding:utf-8 -*-
            import random
            import base64
            from settings import USER_AGENTS
            from settings import PROXIES
            # 隨機(jī)的User-Agent
            class RandomUserAgent(object):
                def process_request(self, request, spider):
                    useragent = random.choice(USER_AGENTS)
                    request.headers.setdefault("User-Agent", useragent)
            class RandomProxy(object):
                def process_request(self, request, spider):
                    proxy = random.choice(PROXIES)
                    if proxy['user_passwd'] is None:
                        # 沒有代理賬戶驗證的代理使用方式
                        request.meta['proxy'] = "http://" + proxy['ip_port']
                    else:
                        # 對賬戶密碼進(jìn)行base64編碼轉(zhuǎn)換
                        base64_userpasswd = base64.b64encode(proxy['user_passwd'])
                        # 對應(yīng)到代理服務(wù)器的信令格式里
                        request.headers['Proxy-Authorization'] = 'Basic ' + base64_userpasswd
                        request.meta['proxy'] = "http://" + proxy['ip_port']

            為什么HTTP代理要使用base64編碼:

            HTTP代理的原理很簡單,就是通過HTTP協(xié)議與代理服務(wù)器建立連接,協(xié)議信令中包含要連接到的遠(yuǎn)程主機(jī)的IP和端口號,如果有需要身份驗證的話還需要加上授權(quán)信息,服務(wù)器收到信令后首先進(jìn)行身份驗證,通過后便與遠(yuǎn)程主機(jī)建立連接,連接成功之后會返回給客戶端200,表示驗證通過,就這么簡單,下面是具體的信令格式:

            修改settings.py配置USER_AGENTS和PROXIES

            添加USER_AGENTS:

             USER_AGENTS = [
                "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET 
                CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
                "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
                "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
                ]

            添加代理IP設(shè)置PROXIES:

            PROXIES = [
                {'ip_port': 'ip:port1', 'user_passwd': 'user1:pass1'},
                {'ip_port': 'ip2:port2', 'user_passwd': 'user2:pass2'},
                {'ip_port': 'ip3:port3', 'user_passwd': 'user3:pass3'},
            ]

            除非特殊需要,禁用cookies,防止某些網(wǎng)站根據(jù)Cookie來封鎖爬蟲。

            COOKIES_ENABLED = False

            設(shè)置下載延遲

            DOWNLOAD_DELAY = 3

            最后添加自己寫的下載中間件類

            DOWNLOADER_MIDDLEWARES = {
                'mySpider.middlewares.MyDownloaderMiddleware': 543,
            }

            以上是Scrapy框架設(shè)置下載中間件的方法的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

            新聞標(biāo)題:Scrapy框架設(shè)置下載中間件的方法-創(chuàng)新互聯(lián)
            瀏覽地址:http://www.jbt999.com/article42/cddjhc.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)、搜索引擎優(yōu)化、定制網(wǎng)站、網(wǎng)站收錄、ChatGPT

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

            網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 一本大道中文字幕无码29 | 操逼操逼片 | www,污网站 | 四虎影院在线无码 | 亚洲777777 |