您好,登錄后才能下訂單哦!
這篇文章主要介紹Python爬蟲Scrapy框架IP代理如何配置與調試,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一個scrapy 的項目結構是這樣的
scrapydownloadertest # 項目文件夾 │ items.py # 定義爬取結果存儲的數據結構 │ middlewares.py # 中間件(可以理解java的過濾器攔截器) │ pipelines.py # 數據管道,對獲取到的數據做操作 │ settings.py # 項目的配置文件 │ __init__.py # 初始化邏輯 │ ├─spiders # 放置 Spiders 的文件夾 │ │ httpProxyIp.py # 爬取到結果后的處理類 │ │ __init__.py # spider初始化邏輯 scrapy.py
從上可以發現,代理ip的設置肯定是在發送請求之前就要設置好,那么唯一符合條件的地方就是 middlewares.py
,所以關于代理的相關邏輯都寫在這個里面。直接在其中添加如下代碼:
# Scrapy 內置的 Downloader Middleware 為 Scrapy 供了基礎的功能, # 定義一個類,其中(object)可以不寫,效果一樣 class SimpleProxyMiddleware(object): # 聲明一個數組 proxyList = ['http://218.75.158.153:3128','http://188.226.141.61:8080'] # 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 定義了一個或多個方法的類,核心的方法有如下三個:
process_request(request, spider)
process_response(request,response, spider)
process_exception(request, exception, spider)
然后找到 setting.py
文件中的這塊區域
修改如下,也就是取消注釋,加上剛剛寫的Middleware 類的路徑
以上就已經配置好了一個簡單的代理ip,此時來到 httpProxyIp.py
這個文件, 這個文件是我通過命令 scrapy genspider httpProxyIp icanhazip.com
生成的,創建成功內容如下:
# -*- coding: utf-8 -*- import scrapy class HttpproxyipSpider(scrapy.Spider): name = 'httpProxyIp' allowed_domains = ['icanhazip.com'] start_urls = ['http://icanhazip.com/'] 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 = ['http://icanhazip.com/'] # spider 爬蟲解析的方法,關于內容的解析都在這里完成; self表示實例的引用, response爬蟲的結果 def parse(self, response): print('代理后的ip: ', response.text) # 這個是main函數也是整個程序入口的慣用寫法 if __name__ == '__main__': execute(['scrapy', 'crawl', 'httpbin'])
此時運行程序 scrapy crawl httpProxyIp
可以看到結果輸出
很明顯,這里沒有打印出我們想要的結果,說明之前 proxyList = ['http://218.75.158.153:3128','http://188.226.141.61:8080']
沒有用,我們找找有沒有可以用的,這里用免費的,所以找起來費點時間 免費代理ip
這樣就完成了scrapy的代理設置和驗證調試。
這里使用的是收費的代理ip了,你可以使用快代理或者阿布云等云服務商提供的服務,當你注冊并繳費之后,會給你一個訪問url和用戶名密碼,這里直接看代碼吧! 同樣在 middlewares.py
新建一個類
修改 setting.py
的 DOWNLOADER_MIDDLEWARES
內容
DOWNLOADER_MIDDLEWARES = { # 注釋掉之前的例子改用AbuyunProxyMiddleware # 'scrapydownloadertest.middlewares.SimpleProxyMiddleware': 100, 'scrapydownloadertest.middlewares.AbuyunProxyMiddleware': 100, }
其他地方不動,我們在啟動看看,這里換種啟動方式,因為使用的是PyCharm開發工具,所以可以直接
http://icanhazip.com/
是一個顯示當前訪問者ip的網站,可以很方便的用來驗證scrapy的代理ip 設置是否成功。
以上是“Python爬蟲Scrapy框架IP代理如何配置與調試”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。