python創建Scrapy代理反反爬蟲項目配置步驟

創建middlewares.py文件。

Scrapy代理IP、Uesr-Agent的切換都是通過DOWNLOADER_MIDDLEWARES進行控制,我們在settings.py同級目錄下創建middlewares.py文件,包裝所有請求。

#middlewares.py

#!/usr/bin/env python3

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):

proxy = random.choice(PROXIES)

if proxy['proxy'] is None:

request.meta['proxy'] = "http://"+proxy['ip_port']

else:

#對賬戶進行加密

base64_userpasswd = base64.b64encode(proxy['user_passwd'])

#對應到代理服務器的信令格式裡

request.hearers['Proxy-Authorization'] = 'Basic'+base64_userpasswd

request.meta['proxy'] = "http://"+proxy['ip_port']

python創建Scrapy代理反反爬蟲項目配置步驟

為什麼HTTP代理要使用base64編碼:

HTTP代理的原理很簡單,就是通過HTTP協議與代理服務器建立連接,協議信令中包含要連接到的遠程主機的IP和端口號,如果有需要身份驗證的話還需要加上授權信息,服務器收到信令後首先進行身份驗證,通過後便與遠程主機建立連接,連接成功之後會返回給客戶端200,表示驗證通過,就這麼簡單,下面是具體的信令格式:

CONNECT 59.64.128.198:21

HTTP/1.1 Host: 59.64.128.198:21

Proxy-Authorization: Basic bGV2I1TU5OTIz

User-Agent: OpenFetion

其中Proxy-Authorization是身份驗證信息,Basic後面的字符串是用戶名和密碼組合後進行base64編碼的結果,也就是對username:password進行base64編碼。

HTTP/1.0 200 Connection established

OK,客戶端收到收面的信令後表示成功建立連接,接下來要發送給遠程主機的數據就可以發送給代理服務器了,代理服務器建立連接後會在根據IP地址和端口號對應的連接放入緩存,收到信令後再根據IP地址和端口號從緩存中找到對應的連接,將數據通過該連接轉發出去。

2. 修改settings.py配置USER_AGENTS和PROXIES

  • 添加USER_AGENTS:

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; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)"

]

  • 添加代理IP設置PROXIES:
  • 免費代理IP可以網上搜索,或者付費購買一批可用的私密代理IP:

PROXIES = [

{'ip_port':'111.8.60.91:8123','user_passwd','user1:pass1'},

{'ip_port':'111.8.60.92:80','user_passwd','user1:pass1'},

{'ip_port':'111.8.60.93:8000','user_passwd','user1:pass1'}

]

  • 除非特殊需要,禁用cookies,防止某些網站根據Cookie來封鎖爬蟲。

COOKIES_ENABLED = False

  • 設置下載延遲

DOWNLOAD_DELAY = 3

  • 最後設置setting.py裡的DOWNLOADER_MIDDLEWARES,添加自己編寫的下載中間件類。

DOWNLOADER_MIDDLEWARES = {

#'mySpider.middlewares.MyCustomDownloaderMiddleware': 543,

'mySpider.middlewares.RandomUserAgent':1,

'mySpider.middlewares.ProxyMiddleware':100

}

python創建Scrapy代理反反爬蟲項目配置步驟

Settings

Scrapy設置(settings)提供了定製Scrapy組件的方法。可以控制包括核心(core),插件(extension),pipeline及spider組件。比如 設置Json Pipeliine、LOG_LEVEL等。

內置設置參考手冊

  • BOT_NAME
  1. 默認: 'scrapybot'
  2. 當您使用 startproject 命令創建項目時其也被自動賦值。
  • CONCURRENT_ITEMS
  1. 默認: 100
  2. Item Processor(即 Item Pipeline) 同時處理(每個response的)item的最大值。
  • CONCURRENT_REQUESTS
  1. 默認: 16
  2. Scrapy downloader 併發請求(concurrent requests)的最大值。
  • DEFAULT_REQUEST_HEADERS
  • 默認: 如下

{

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

'Accept-Language': 'en',

}

  • Scrapy HTTP Request使用的默認header。
  • DEPTH_LIMIT
  1. 默認: 0
  2. 爬取網站最大允許的深度(depth)值。如果為0,則沒有限制。
  • DOWNLOAD_DELAY
  • DOWNLOAD_DELAY = 0.25 # 250 ms of delay
  1. 默認情況下,Scrapy在兩個請求間不等待一個固定的值, 而是使用0.5到1.5之間的一個隨機值 * DOWNLOAD_DELAY 的結果作為等待間隔。
  2. 默認: 0
  3. 下載器在下載同一個網站下一個頁面前需要等待的時間。該選項可以用來限制爬取速度, 減輕服務器壓力。同時也支持小數:
  • DOWNLOAD_TIMEOUT
  1. 默認: 180
  2. 下載器超時時間(單位: 秒)。
  • ITEM_PIPELINES
  1. 默認: {}
  2. 保存項目中啟用的pipeline及其順序的字典。該字典默認為空,值(value)任意,不過值(value)習慣設置在0-1000範圍內,值越小優先級越高。
  3. ITEM_PIPELINES = {
  4. 'mySpider.pipelines.SomethingPipeline': 300,
  5. 'mySpider.pipelines.ItcastJsonPipeline': 800,
  6. }
  • LOG_ENABLED
  1. 默認: True
  2. 是否啟用logging。
  • LOG_LEVEL
  1. 默認: 'DEBUG'
  2. log的最低級別。可選的級別有: CRITICAL、 ERROR、WARNING、INFO、DEBUG 。
  • USER_AGENT
  1. 默認: "Scrapy/VERSION (+http://scrapy.org)"
  2. 爬取的默認User-Agent,除非被覆蓋。

點擊關注發私信(基礎視頻),即可獲取下載鏈接:

python創建Scrapy代理反反爬蟲項目配置步驟


分享到:


相關文章: