<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                中間件是scrapy提供用于在爬蟲過程中可修改`Request`和`Response`,用于擴展scrapy的功能。 <br/> 下面寫一個隨機請求頭的中間件來說明中間件的作用:爬蟲在頻繁訪問一個頁面的時候,如果請求頭一直保持一致,那么很容易被服務器發現,從而禁止這個請求頭的訪問。下面通過自定義中間件來實現隨機的選擇一個請求頭。 <br/> 步驟如下: <br/> **1. 在`settings.py`做如下配置** (1)你可以在 http://www.useragentstring.com/pages/useragentstring.php?typ=Browser 找到大量的User-Agent; (2)你可以訪問 http://httpbin.org/user-agent 直接測試你使用的瀏覽器的User-Agent。 ```python # User-Agent池 USER_AGENTS = [ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6 Camino/1.5.1" ] # 啟動自定義中間件 DOWNLOADER_MIDDLEWARES = { # 自定義中間件: 權重,權重越小,優先被調用 # CareerstencentDownloaderMiddleware在項目創建的時候就自動創建好了 'CareersTencent.middlewares.CareerstencentDownloaderMiddleware': 543, 'CareersTencent.middlewares.RandomUserAgentMiddleware': 544, } ``` <br/> **2. 在`middlewares.py`中自定義一個中間類** ```python class RandomUserAgentMiddleware(object): def process_request(self, request, spider): """ 定義process_request方法,方法名不能自定義哦. 當每個Request對象經過中間件時會被調用,優先級越高的中間件,越先調用; 該方法應該返回以下對象: None、Response、Request、拋出IgnoreRequest異常 :return: (1)返回None: scrapy會繼續執行其他中間件相應的方法; (2)返回Response對象: scrapy不會再調用其他中間件的process_request 方法,也不會去發起下載,而是直接返回該Response對象 (3)返回Request對象: scrapy不會再調用其他中間件的process_request() 方法,而是將其放置調度器待調度下載 (4)如果這個方法拋出異常,則會調用process_exception方法 """ # 隨機請求頭 user_agent = random.choice(spider.settings['USER_AGENTS']) request.headers['User-Agent'] = user_agent return None def process_response(self, request, response, spider): """ 當每個Response經過中間件會被調用,優先級越高的中間件,越晚被調用, 與process_ request()相反; 該方法返回以下對象: Response、Request、拋出IgnoreRequest異常。 :return: (1)返回Response對象: scrapy會繼續調用其他中間件的process_response方法; (2)返回Request對象:停止中間器調用,將其放置到調度器待調度下載; (3)拋出IgnoreRequest異常: Request.errback會被調用來處理函數,如果沒有處理,它將會被忽略且不會寫進日志。 """ # 經測試,請求頭是隨機的 print(request.headers['User-Agent']) return response ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看