我需要在scrapy中为特定的蜘蛛设置HTTP代理。有没有办法在Scrapy中在运行时传递HTTP代理?
例如,我可以在运行时传递用户代理,如下所示:
scrapy crawl <spidername> -s USER_AGENT='<some user agent>'
我可以以类似的方式传递我想要使用的HTTP代理吗?
答案 0 :(得分:1)
我不确定你是否可以在运行时传递代理,但你可以在middleware.py中实现这样的类
class CustomProxyMiddleware(object):
def process_request(self, request, spider):
if spider.name == 'particular_spider':
proxy = random.choice(LIST_OF_PROXIES)
request.meta['proxy'] = proxy
您可以对用户代理执行相同的操作。
class CustomUserAgentMiddleware(object):
def process_request(self, request, spider):
if spider.name =='particular_spider':
agent = random.choice(USER_AGENTS)
request.headers['User-Agent'] = agent
请确保将这些类添加到settings.py中的DOWNLOADER_MIDDLEWARES。
答案 1 :(得分:1)
Scrapy了解http_proxy
和https_proxy
个环境变量(请参阅HttpProxyMiddleware
documentation)
所以你可以这样做:
http_proxy="http://www.someproxy.com:3128" scrapy crawl <spidername>