來自於scrapy官方文件描述:
這裡是乙個例子:
**********_middlewares =
class scrapy.contrib.**********middleware.**********middleware
process_request() 必須返回以下其中之一:乙個 none 、乙個 response 物件、乙個 request 物件或
raise ignorerequest:
引數:引數:
scrapy**ip、uesr-agent的切換都是通過**********_middlewares進行控制,我們在settings.py同級目錄下建立middlewares.py檔案,包裝所有請求。
# middlewares.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import random
import base64
from settings import user_agents
from settings import proxies
# 隨機的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:
# 沒有**賬戶驗證的**使用方式
# 對賬戶密碼進行base64編碼轉換
base64_userpasswd = base64.b64encode(proxy['user_passwd'])
# 對應到**伺服器的信令格式裡
request.headers['proxy-authorization'] = 'basic ' + base64_userpasswd
request.meta['proxy'] = "http://" + proxy['ip_port']
為什麼http**要使用base64編碼:
http**的原理很簡單,就是通過http協議與**伺服器建立連線,協議信令中包含要連線到的遠端主機的ip和埠號,如果有需要身份驗證的話還需要加上授權資訊,伺服器收到信令後首先進行身份驗證,通過後便與遠端主機建立連線,連線成功之後會返回給客戶端200,表示驗證通過,就這麼簡單,下面是具體的信令格式:
user-agent: openfetion其中proxy-authorization
是身份驗證資訊,basic後面的字串是使用者名稱和密碼組合後進行base64編碼的結果,也就是對username:password進行base64編碼。
http/1.0 200 connection established
ok,客戶端收到收面的信令後表示成功建立連線,接下來要傳送給遠端主機的資料就可以傳送給**伺服器了,**伺服器建立連線後會在根據ip位址和埠號對應的連線放入快取,收到信令後再根據ip位址和埠號從快取中找到對應的連線,將資料通過該連線**出去。
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 (compatible; msie 8.0; windows nt 6.0; trident/4.0; wow64; trident/4.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; .net clr 1.0.3705; .net clr 1.1.4322)",
"mozilla/4.0 (compatible; msie 7.0b; windows nt 5.2; .net clr 1.1.4322; .net clr 2.0.50727; infopath.2; .net clr 3.0.04506.30)",
"mozilla/5.0 (windows; u; windows nt 5.1; en-us; rv:1.8.1.2pre) gecko/20070215 k-ninja/2.1.1",
"mozilla/5.0 (windows; u; windows nt 5.1; zh-cn; rv:1.9) gecko/20080705 firefox/3.0 kapiko/3.0",
"mozilla/5.0 (x11; linux i686; u;) gecko/20070322 kazehakase/0.4.5"
]
免費**ip可以網上搜尋,或者付費購買一批可用的私密**ip:
proxies = [,,
,,
]
**********_middlewares =
Redis相關機制
什麼是redis redis是nosql資料庫,記憶體資料庫,是利用記憶體對資料進行快取,從而加快資料的訪問速度,一般情況下,會將熱點資料放入快取,例如使用者資料,許可權資料,排行榜,更新頻率低的報表資料等。速度快的原因有三個 1.資料在記憶體 2.單執行緒 3.多路復用的i o redis的資料結...
反反爬蟲策略
點選我前往github檢視源 別忘記star 自建 池 一.對請求ip等進行限制的。以知乎為例,當我們的請求速度到達一定的閾值,會觸發反爬蟲機制!在我爬取知乎百萬使用者資訊中,出現了429錯誤 too many requests 詳情請見我的部落格 應對策略.1.降低爬蟲採集速率,使速率略低於閾值 ...
爬蟲 一文了解反反爬蟲及其相關技術
那麼什麼又是反爬蟲呢?反爬蟲是指使用任何技術手段阻止別人批量獲取自己 資訊的一種方式。不返回網頁是比較傳統的反爬蟲手段,也就是在爬蟲傳送請求給相應 位址後,返回404頁面,表示伺服器無法正常提供資訊或伺服器無法回應 也可能長時間不返回資料,這代表對爬蟲已經進行了 例如去哪兒網的 你有張良計,我有過梁...