帮助中心

   

热门搜索: 免费续期  推广  永久会员

Scrapy使用代理爬取网站操作案例分享

在爬虫的时候,因为采集访问频次太多、速度过快导致IP被封是爬虫的常见操作了。所以,为了不耽误爬虫开展,爬虫工程师才会选择用代理IP来保证正常的数据采集。下面通过一个使用代理IP爬虫的方案,来进一步了解。

 

线上爬虫使用代理IP方案:

 

目前爬虫使用代理的方法很多,这里简单说说我在线上环境使用代理的心得。

 

首先,我自己维护了一个代理ip池,这个ip池是放在redis中的,也就是说我的所有可使用的代理ip是放在redis中,使用redis的set数据结构。

 

Scrapy使用代理爬取网站操作案例分享
  当然了,这里列出的ip都是可使用的,因为在放入redis之前我会使用特定的程序去检测代理ip的可用性。

 

代理IP的来源这里我要说一下,最好是越多越好,分好类,付费的,免费的,拨号的,全部拿来用,使用的时候随机从redis中取一个出来用。代理IP推荐迅联加速,专业的动态IP服务商,拥有全国180+个城市的线路,3000万+可用IP库,7*24小时不断供应IP。

 

scrapy使用代理IP:

 

class RandomProxyMiddleware(object):

def __init__(self):

settings = get_project_settings()

self.PROXY_REDIS_HOST = settings.get(‘PROXY_REDIS_HOST’)

self.PROXY_REDIS_PORT = settings.get(‘PROXY_REDIS_PORT’)

self.PROXY_REDIS_PARAMS = settings.get(‘PROXY_REDIS_PARAMS’)

self.PROXY_REDIS_KEY = settings.get(‘PROXY_REDIS_KEY’)

self.pool = redis.ConnectionPool(host=self.PROXY_REDIS_HOST,

port=self.PROXY_REDIS_PORT,

db=self.PROXY_REDIS_PARAMS[‘db’],

password=self.PROXY_REDIS_PARAMS[‘password’])

self.conn = redis.StrictRedis(connection_pool=self.pool)

def process_request(self, request, spider):

proxy = self.conn.srandmember(self.PROXY_REDIS_KEY)

proxy = proxy.decode(‘utf-8’)

proxy = json.loads(proxy)

ip = proxy[‘proxy’]

request.meta[‘proxy’] = “https://%s” % ip

 

上图代码片段自定义一个代理中间件RandomProxyMiddleware,在scrapyprocess_request(self, request, spider)这个方法中使用redis的操作随机获取一个代理出来,加到request.meta[‘proxy’]中,便完成了代理中间件的编写。随后把RandomProxyMiddleware加到setting文件中。

 

DOWNLOADER_MIDDLEWARES = {

‘crawl_spider.middlewares.RandomProxyMiddleware’: 400,

}

便可完成scrapy增加代理的需求。

 

以上就是scrapy使用代理IP爬取网站的案例分享,迅联加速拥有多年动态拨号服务器运营经验,自有资源搭建动态IP服务器,轻松上手!

关闭
19907977089
关注微信公众号,免费送30分钟时长