scrapy入門教程4:代理模塊(1)

0. 基本環境說明

  1. 本文截圖及運行環境均在Win7上實現(沒錯,我有折騰回來了,MAC上面的兄弟就照葫蘆畫瓢吧~)數據庫

  2. scrapy版本爲1.0.3數據結構

  3. 參考文獻以及下載連接:scrapy

  4. 請按順序閱讀本教程函數

0.1前言

教程已經三個月沒有更新了,緣由是老闆接了一箇中興的大數據項目,我被拉過去負責這個項目了,有興致回來再來一發Spark教程吧~,最近終於有時間接着稍微寫一些了,我必定要將寫博客這個活動堅持下去,不論斷了多少次我都會續上的~,原本準備寫一些分佈式爬蟲的內容,可是還在調試階段,等搞完以後一塊兒寫出來,咩哈哈~測試

本篇內容主要是教各位怎麼初期配置一下scrapy的代理,其實後續有不少很麻煩的事情(好比如何構建代理池、如何獲取大量代理、如何測試代理可用性等)。有空我會慢慢寫的~(我須要讀者的支持啊~粉我一下吧,不粉的話推薦一下也行啊~你們都不容易是吧~)大數據

1. 簡述

在scrapy中專門有一個模塊Downloader Middleware來實現scrapy爬蟲中請求和相應的某些通用功能,好比咱們此次要用到的代理功能,就是經過其子模塊HttpProxyMiddleware來實現的,至於Downloader Middleware的其餘子模塊,我之後有空會一一介紹的,如今你們只要知道這個模塊的基本含義就好了。網站

2.代理配置

2.1 建立代理模塊

首先咱們如今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

其中

  1. process_request這個方法是自帶的,是在每一個請求以前都會自動執行一下,藉此來修改參數

  2. request.meta['proxy']直接經過這個屬性直接設置代理,填的是IP地址和端口號,如http://218.200.66.196:8080,通常你搞來的代理都會有着兩個東西,直接填上去就好~

  3. 若是你搞來的代理還須要帳號和密碼的話,咱們就須要給proxy_user_pass賦值,形如root:12345

  4. 爲了讓你的代理賬號密碼能良好運行,咱們還須要base64.encodestring這個函數來幫一下忙,對你的代理賬號密碼進行編碼。

  5. 最後將編碼事後的函數賦值給http頭中的Proxy-Authorization參數便可。
    注意:以上3~5步,若是代理沒有賬號密碼的話就不要折騰了。

創建完畢以後文件目錄結構以下:

|---- njupt
| |---- njupt
|   |---- __init__.py
|   |---- items.py        #用來存儲爬下來的數據結構(字典形式)
|   |---- middlewares.py  #用來配置代理
|    |---- pipelines.py    #用來對爬出來的item進行後續處理,如存入數據庫等
|    |---- settings.py    #爬蟲配置文件
|    |---- spiders        #此目錄用來存放建立的新爬蟲文件(爬蟲主體)
|     |---- __init__.py
| |---- scrapy.cfg        #項目配置文件

2.2 修改配置文件

代理文件建立完畢以後,須要修改配置文件settings.py,並在添加以下內容:

DOWNLOADER_MIDDLEWARES = {
    'njupt.middlewares.ProxyMiddleware': 100,
}

嘛,就是添加一下大的配置模塊Downloader Middleware,外加配置一個子模塊HttpProxyMiddleware嘛~

2.3 結果測試

其實這個配置代理重點之一就是測試環節了,我這裏給各位提供一種測試思路直接請求查看自身IP以及區域的網站便可,如(http://ip.filefab.com/),根據其返回的結果(圖2-1與圖2-2所示)來判斷是否成功。
代碼生成的文件
圖2-1 生成的文件
代理的具體信息
圖2-2 代理的具體信息

具體測試代碼可參考基本說明中的附件代碼。我們下期見~

相關文章
相關標籤/搜索