本文截圖及運行環境均在Win7上實現(沒錯,我有折騰回來了,MAC上面的兄弟就照葫蘆畫瓢吧~)數據庫
scrapy版本爲1.0.3數據結構
參考文獻以及下載連接:scrapy
本篇教程參考代碼打包下載分佈式
scrapy官方手冊ide
請按順序閱讀本教程函數
教程已經三個月沒有更新了,緣由是老闆接了一箇中興的大數據項目,我被拉過去負責這個項目了,有興致回來再來一發Spark教程吧~,最近終於有時間接着稍微寫一些了,我必定要將寫博客這個活動堅持下去,不論斷了多少次我都會續上的~,原本準備寫一些分佈式爬蟲的內容,可是還在調試階段,等搞完以後一塊兒寫出來,咩哈哈~測試
本篇內容主要是教各位怎麼初期配置一下scrapy的代理,其實後續有不少很麻煩的事情(好比如何構建代理池、如何獲取大量代理、如何測試代理可用性等)。有空我會慢慢寫的~(我須要讀者的支持啊~粉我一下吧,不粉的話推薦一下也行啊~你們都不容易是吧~)大數據
在scrapy中專門有一個模塊Downloader Middleware
來實現scrapy爬蟲中請求和相應的某些通用功能,好比咱們此次要用到的代理功能,就是經過其子模塊HttpProxyMiddleware
來實現的,至於Downloader Middleware
的其餘子模塊,我之後有空會一一介紹的,如今你們只要知道這個模塊的基本含義就好了。網站
首先咱們如今njupt
目錄下面新建一個名稱爲middlewares.py
的文件,文件內容以下:編碼
import base64 class ProxyMiddleware(object): def process_request(self, request, spider): request.meta['proxy'] = "http://IP地址:端口號" proxy_user_pass = "用戶名:賬號" encoded_user_pass = base64.encodestring(proxy_user_pass) request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
其中
process_request
這個方法是自帶的,是在每一個請求以前都會自動執行一下,藉此來修改參數
request.meta['proxy']
直接經過這個屬性直接設置代理,填的是IP地址和端口號,如http://218.200.66.196:8080
,通常你搞來的代理都會有着兩個東西,直接填上去就好~
若是你搞來的代理還須要帳號和密碼的話,咱們就須要給proxy_user_pass
賦值,形如root:12345
。
爲了讓你的代理賬號密碼能良好運行,咱們還須要base64.encodestring
這個函數來幫一下忙,對你的代理賬號密碼進行編碼。
最後將編碼事後的函數賦值給http頭中的Proxy-Authorization
參數便可。
注意:以上3~5步,若是代理沒有賬號密碼的話就不要折騰了。
創建完畢以後文件目錄結構以下:
|---- njupt | |---- njupt | |---- __init__.py | |---- items.py #用來存儲爬下來的數據結構(字典形式) | |---- middlewares.py #用來配置代理 | |---- pipelines.py #用來對爬出來的item進行後續處理,如存入數據庫等 | |---- settings.py #爬蟲配置文件 | |---- spiders #此目錄用來存放建立的新爬蟲文件(爬蟲主體) | |---- __init__.py | |---- scrapy.cfg #項目配置文件
代理文件建立完畢以後,須要修改配置文件settings.py
,並在添加以下內容:
DOWNLOADER_MIDDLEWARES = { 'njupt.middlewares.ProxyMiddleware': 100, }
嘛,就是添加一下大的配置模塊Downloader Middleware
,外加配置一個子模塊HttpProxyMiddleware
嘛~
其實這個配置代理重點之一就是測試環節了,我這裏給各位提供一種測試思路直接請求查看自身IP以及區域的網站便可,如(http://ip.filefab.com/),根據其返回的結果(圖2-1與圖2-2所示)來判斷是否成功。
圖2-1 生成的文件
圖2-2 代理的具體信息
具體測試代碼可參考基本說明中的附件代碼。我們下期見~