萬能除錯 | Python爬蟲Scrapy框架HTTP代理的配置與除錯

N叔談資料採集發表於2022-12-14

本文分為兩部分:


一、HTTP代理的邏輯


做過python爬蟲的都知道,HTTP代理的設定時要在傳送請求前設定好,那HTTP代理的邏輯點在哪裡呢?實際上,只需要在Scrapy 的專案結構中新增就好,具體程式碼如下:

# Scrapy 內建的 Downloader Middleware 為 Scrapy 供了基礎的功能, 
# 定義一個類,其中(object)可以不寫,效果一樣 
class SimpleProxyMiddleware(object): 
    # 宣告一個陣列
    proxyList = ['你購買的HTTP代理地址'] 
    
    # Downloader Middleware的核心方法,只有實現了其中一個或多個方法才算自定義了一個 Downloader Middleware def process_request(self, request, spider): 
        # 隨機從其中選擇一個,並去除左右兩邊空格 
        proxy = random.choice(self.proxyList).strip() 
        # 列印結果出來觀察 
        print("this is request ip:" + proxy) 
        # 設定request的proxy屬性的內容為代理ip 
        request.meta['proxy'] = proxy 
        # Downloader Middleware的核心方法,只有實現了其中一個或多個方法才算自定義了一個Downloader Middleware def process_response(self, request, response, spider): 
        # 請求失敗不等於200 
        if response.status != 200: 
            # 重新選擇一個代理ip 
            proxy = random.choice(self.proxyList).strip() 
            print("this is response ip:" + proxy) 
            # 設定新的代理ip內容 
            request.mete['proxy'] = proxy 
            return request 
    return response

每個 Downloader Middleware 定義了一個或多個方法的類,核心的方法有如下三個:

1.process_request(request, spider)

2.process_response(request,response, spider)

3.process_exception(request, exception, spider)

找到 setting.py 檔案中的這塊區域:

#DDWNLQADER_MIDDLEWARES = {
#        *images.middlewares.ImagesDownloaderMiddleware": 543,
    #    *images middlewares,LocalProxyMiddleware*: 100
#}



這部分需要修改,也就是取消註釋,加上剛剛寫的Middleware 類的路徑:

#DDWNLQADER_MIDDLEWARES = {
'scrapydownloadertest.middlewares.SimpleProxyMiddleware': 100,
|
}



這樣,我們就配置好了一個簡單的HTTP代理,此時來到httpProxyIp.py 這個檔案, 這個檔案是我透過命令 scrapy genspider httpProxyIp icanhazip.com 生成的,建立成功內容如下:

# -*- coding: utf-8 -*-
import scrapy
class HttpproxyipSpider(scrapy.Spider):
    name = 'httpProxyIp'
    allowed_domains = ['icanhazip.com']
    start_urls = [']
    def parse(self, response):
        pass



修改一下,最終程式碼如下所示:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.cmdline import execute
class HttpproxyipSpider(scrapy.Spider):
    # spider 任務名
    name = 'httpProxyIp'
    # 允許訪問的域名
    allowed_domains = ['icanhazip.com']
    # 起始爬取的url
    start_urls = [']
    
    # spider 爬蟲解析的方法,關於內容的解析都在這裡完成; self表示例項的引用,response爬蟲的結果
    def parse(self, response):
        print('代理後的ip: ', response.text)
    # 這個是main函式也是整個程式入口的慣用寫法
    if __name__ == '__main__':
        execute(['scrapy', 'crawl', 'httpbin'])


以上,就完成了Scrapy代理的設定和驗證除錯。


PS:icanhazi是一個顯示當前訪問者ip的網站,可以很方便的用來驗證scrapy的HTTP代理設定是否成功。


二、如何配置動態的HTTP代理?

免費的可用率太低了,我用的是青果網路提供的服務。在控制檯那可以獲取臺哦是工具,可以直接線上簡單對接除錯,測試HTTP代理資源替換、釋放和通道配額等資訊。


1.請求方式

請求方式包括POST和GET,預設POST請求,根據自己的需求選擇;右側網址則是介面網址完整資訊,包括選擇的key、介面方法等引數資訊。

萬能除錯 | Python爬蟲Scrapy框架HTTP代理的配置與除錯

2.key

key為必選項,是對接介面的必要資訊。key的選擇根據登入狀態不同,可操作性不同。未登入時,需手動輸入key值,已登入時,可下拉選擇已購買的代理業務key,key資訊附帶業務資源配置和業務備註資訊,方便辨別業務。

未登入狀態:

萬能除錯 | Python爬蟲Scrapy框架HTTP代理的配置與除錯

已登入狀態:

萬能除錯 | Python爬蟲Scrapy框架HTTP代理的配置與除錯

3.介面方法

介面方法主要是選擇要除錯的介面型別,包括資源相關、IP白名單、資訊查詢三大模組,各個介面說明詳情如下圖:


4.引數型別

除錯工具中各個引數根據不同的介面型別對應顯示,各個引數有不同的含義,詳情如下:


5.結果引數說明

點選“測試”,右側文字框區域顯示介面請求結果,返回結果引數說明:



部分轉載自: 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70025002/viewspace-2928114/,如需轉載,請註明出處,否則將追究法律責任。

相關文章