Scrapy:在运行时传递HTTP代理

时间:2016-02-09 11:42:32

标签: python scrapy

我需要在scrapy中为特定的蜘蛛设置HTTP代理。有没有办法在Scrapy中在运行时传递HTTP代理?

例如,我可以在运行时传递用户代理,如下所示:

scrapy crawl <spidername> -s USER_AGENT='<some user agent>'

我可以以类似的方式传递我想要使用的HTTP代理吗?

2 个答案:

答案 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_proxyhttps_proxy个环境变量(请参阅HttpProxyMiddleware documentation

所以你可以这样做:

http_proxy="http://www.someproxy.com:3128" scrapy crawl <spidername>