根据单个scrapy.Spider的不同命令设置不同的IP,可以通过以下步骤实现:
IP_POOL = [
'http://ip1:port',
'http://ip2:port',
'http://ip3:port',
...
]
from scrapy import signals
import random
class IPProxyMiddleware(object):
def __init__(self, ip_pool):
self.ip_pool = ip_pool
@classmethod
def from_crawler(cls, crawler):
ip_pool = crawler.settings.get('IP_POOL')
return cls(ip_pool)
def process_request(self, request, spider):
ip_proxy = random.choice(self.ip_pool)
request.meta['proxy'] = ip_proxy
DOWNLOADER_MIDDLEWARES = {
'your_project_name.middlewares.IPProxyMiddleware': 543,
}
class MySpider(scrapy.Spider):
name = 'my_spider'
...
def __init__(self, proxy=None, *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
self.proxy = proxy
def start_requests(self):
if self.proxy:
# 使用Spider指定的IP代理
request = scrapy.Request(url=self.start_urls[0], callback=self.parse, meta={'proxy': self.proxy})
else:
# 使用全局IP代理池
request = scrapy.Request(url=self.start_urls[0], callback=self.parse)
yield request
scrapy crawl my_spider -a proxy=http://ip4:port
来启动Spider,并指定使用特定的IP代理。通过以上步骤,可以根据单个scrapy.Spider的不同命令设置不同的IP代理。每个Spider可以选择使用全局IP代理池或者指定的IP代理,从而实现对不同IP的灵活控制。
领取专属 10元无门槛券
手把手带您无忧上云