本文分為兩部分:
一、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、介面方法等引數資訊。
2.key
key為必選項,是對接介面的必要資訊。key的選擇根據登入狀態不同,可操作性不同。未登入時,需手動輸入key值,已登入時,可下拉選擇已購買的代理業務key,key資訊附帶業務資源配置和業務備註資訊,方便辨別業務。
未登入狀態:
已登入狀態:
3.介面方法
介面方法主要是選擇要除錯的介面型別,包括資源相關、IP白名單、資訊查詢三大模組,各個介面說明詳情如下圖:
4.引數型別
除錯工具中各個引數根據不同的介面型別對應顯示,各個引數有不同的含義,詳情如下:
5.結果引數說明
點選“測試”,右側文字框區域顯示介面請求結果,返回結果引數說明:
部分轉載自: