超簡單的scrapy實現ip動態代理與更換ip的方法實現
簡單實現ip代理,為瞭不賣廣告,
請自行準備一個ip代理的平臺
例如我用的這個平臺,每次提取10個ip
從上面可以看到數據格式是文本,換行是\r\n,訪問鏈接之後大概就是長這樣的,scrapy裡面的ip需要加上前綴http://
例如:http://117.95.41.21:34854
OK,那現在已經準備好瞭ip瞭,先給你們屢一下思路。
ip池和計數器放在setting文件
第一次請求的時候要填滿ip池,所以在爬蟲文件的start_requests函數下手
更換ip的地方是middlewares的下載器中間件類的process_request函數,因為每個請求發起前都會經過這個函數
首先是setting文件,其實就是加兩句代碼
count = {'count': 0} ipPool = []
還有就是開啟下載器中間件,註意是下面那個download的類,中間件的process_request函數的時候才能生效
下載器中間件的process_request函數,進行ip代理和固定次數更還ip代理池
# 記得導包 from 你的項目.settings import ipPool, count import random import requests def process_request(self, request, spider): # 隨機選中一個ip ip = random.choice(ipPool) print('當前ip', ip, '-----', count['count']) # 更換request的ip----------這句是重點 request.meta['proxy'] = ip # 如果循環大於某個值,就清理ip池,更換ip的內容 if count['count'] > 50: print('-------------切換ip------------------') count['count'] = 0 ipPool.clear() ips = requests.get('你的ip獲取的地址') for ip in ips.text.split('\r\n'): ipPool.append('http://' + ip) # 每次訪問,計數器+1 count['count'] += 1 return None
最後就是爬蟲文件的start_requests函數,就是第一次發請求前要先填滿ip池的ip
# 記得導包 from 你的項目.settings import ipPool import random import requests def start_requests(self): # 第一次請求發起前先填充一下ip池 ips = requests.get('你的ip獲取的地址') for ip in ips.text.split('\r\n'): ipPool.append('http://' + ip)
簡單的ip代理以及固定次數就更換ip池就完成瞭
到此這篇關於超簡單的scrapy實現ip動態代理與更換ip的方法實現的文章就介紹到這瞭,更多相關scrapy ip動態代理與更換ip內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python爬蟲Scrapy框架IP代理的配置與調試
- Python Scrapy爬蟲框架使用示例淺析
- Python爬蟲scrapy框架Cookie池(微博Cookie池)的使用
- 使用scrapy實現增量式爬取方式
- scrapy爬蟲遇到js動態渲染問題