Scrapy架構之如何給你的請求添加代理,scrapy架構

來源:互聯網
上載者:User

Scrapy架構之如何給你的請求添加代理,scrapy架構

      首先做好準備工作,建立一個Scrapy項目,目錄結構如下:

      註:spiders目錄下多了3個檔案,db.py,default.init和items.json。db.py是我簡單封裝的一個資料庫訪問的lib檔案,default.init是我的資料庫和代理相關的設定檔,items.json是最後的輸出檔案。

      給請求添加代理有2種方式,第一種是重寫你的爬蟲類的start_request方法,第二種是添加download中介軟體。下面會分別介紹這2種方式。

重寫start_request方法

      我在我的爬蟲類中重寫了start_requests方法:

      比較簡單,只是在meta中加了一個proxy代理。然後可以測試了,那麼問題來了,我怎麼知道我的請求是否帶上了代理呢?可以在測試的時候去爬 "http://ip.filefab.com/index.php" 這個網站,它會顯示你當前訪問ip地址。一切準備就緒了,我在我的intellij控制台中輸入命令: cd /spider和scrapy crawl dmoz,然後控制台列印:

      需要注意的一點是,在使用那種Basic認證的代理ip時,scrapy不同於python的requests包,這裡不能直接把使用者名稱和密碼與代理ip放在一起。假設我這裡使用一個基於Basic認證的代理ip,比如:http://username:passwd@180.125.196.155,把上述代碼簡單的改成:meta={'proxy': 'http://username:passwd@180.125.196.155'} 是不正確的:

      它會給你報一個407的錯誤(在可為此請求提供服務之前,您必須驗證此Proxy 伺服器。請登入到Proxy 伺服器,然後重試)。正確的做法是將驗證訊息加到header的Proxy-Authorization中:

      紅色的部分填使用者名稱和密碼,這樣就解決了,這裡也看到了請求的header資訊也是在這裡添加的~

使用DOWNLOAD中介軟體

      在middlewares.py中增加一個類,取名:ProxyMiddleware即代理中介軟體:

      這裡的初始化方法可以忽略,是我業務上的需求,主要是看這裡的process_request方法,加了一個代理,然後在settings中配置這個中介軟體:

      這裡的數字是中介軟體的一個唯一編號,可以隨意指定,只要不重複就行。然後同樣在控制台中啟動爬蟲,沒有問題~,同樣的,對於Basic認證的代理ip同樣可以在這裡設定,header通過process_request的request方法取到。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.