Python+scrapy代理接入之聚合代理

我們在做爬蟲的很多時候,都會遇到一個問題,那就是爬取一段時間後突然不能爬了,那多半是你的IP被封掉了,此時我們就可以接入代理進行數據爬去,下面以聚合代理為例,下篇文章接著講訊代理的接入。

Python+scrapy代理接入之聚合代理

聚合代理middleware的代碼配置如下

<code>import datetime
import requests
import json
class MaoyanJuheProxyMiddleware(object):
"""
聚合代理:http://daili.spbeen.com/
"""
# ==============代理初始化============
def __init__(self):
# 代理API
self.url = "http://daili.spbeen.com/get_api_json/?token=4nZufMcvqklMfwNjmiIXSseJ&num=1"

# 初始化代理IP為空字符串
self.proxyip = ""

# 獲取當前時間與前一分鐘的時間差
self.expire_datatime = datetime.datetime.now() - datetime.timedelta(minutes=1)

# ==============獲取代理IP============
def _get_ProxyIP(self):
# 獲取代理響應內容
proxy_respon = requests.get(url=self.url)

# 將代理響應內容轉換為json格式
proxy_info = json.loads(proxy_respon.text)
proxy = proxy_info["data"][0]
self.proxyip = proxy["proxyip"]
self.expire_datatime = datetime.datetime.now() - datetime.timedelta(minutes=1)

# ==============驗證代理IP============
def _check_expire(self):
# 判斷當前時間是否大於初始時間
if datetime.datetime.now() >= self.expire_datatime:

# 再次獲取代理IP
self._get_ProxyIP()

def process_request(self,spider,request):
self._check_expire()

# 將自身IP修改為代理IP
request.meta["proxy"] = "http://" + self.proxyip
/<code>

同時,我們還需要在setting文件裡進行配置,代碼如下

<code>DOWNLOADER_MIDDLEWARES = {
# 'maoyan.middlewares.MaoyanDownloaderMiddleware': 543,
'maoyan.middlewares.MaoyanJuheProxyMiddleware': 543,
}/<code>

最後,接入代理之後繼續爬取數據是不是很爽啊!


分享到:


相關文章: