【问题标题】:How to use Downloader Middleware in Scrapy如何在 Scrapy 中使用下载器中间件
【发布时间】:2016-01-06 01:32:38
【问题描述】:

我正在使用 scrapy 来抓取一些网页。我编写了自定义的 ProxyMiddleware 类,在其中实现了 process_request(self,request,spider) 方法中的要求。 这是我的代码(已复制):

class ProxyMiddleware(scrapy.downloadermiddlewares.httpproxy):
def __init__(self, proxy_ip=''):
    self.proxy_ip = proxy_ip

def process_request(self,request,spider):
    ip = random.choice(self.proxy_list)
    if ip:
        request.meta['proxy'] = ip
    return request

proxy_list = [list of proxies]

现在,我不明白 scrapy 会如何考虑我的实现而不是默认类。经过一番搜索和头脑风暴,我的理解是,我需要在 settings.py 中进行更改

DOWNLOADER_MIDDLEWARES = {
    'IPProxy.middlewares.MyCustomDownloaderMiddleware': 543,
    'IPProxy.IPProxy.spiders.RandomProxy': 600
}

为了让读者更好地了解我的项目结构,我在列表中添加了具有一些随机值的第二个元素。 我的项目结构是:

我的问题是,

  • 如何在settings.py中正确使用DOWNLOADER_MIDDLEWARES
  • 如何将值分配给 DOWNLOADER_MIDDLEWARES 中的元素
  • 如何让 scrapy 调用我的自定义代码而不是默认代码

【问题讨论】:

    标签: python python-2.7 scrapy scrapy-spider


    【解决方案1】:

    如果您想禁用内置的 HttpProxyMiddleware 下载器中间件 - 将其在 DOWNLOADER_MIDDLEWARES 中的值设置为 None

    DOWNLOADER_MIDDLEWARES = {
        'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None,
        'IPProxy.middlewares.MyCustomDownloaderMiddleware': 543,
        'IPProxy.IPProxy.spiders.RandomProxy': 600
    }
    

    【讨论】:

    • 谢谢。另一个模糊之处是,我编写 ProxyMiddleware 类的 process_request 的方式将覆盖默认的 scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware 的 process_request。
    • DOWNLOADER_MIDDLEWARES = {'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':无,'IPProxy.IPProxy.spiders.ProxyMiddleware':600,'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware':无,' IPProxy.IPProxy.spiders.RotateUserAgentMiddleware':700 } 现在我的代码正在通过 No module name UserAgentMiddleware 异常。如何在这里使用我的自定义类。
    • @Ashwanth 我想是scrapy.downloadermiddlewares.useragent.UserAgentMiddleware
    • 相应更改,但仍然抛出相同的错误
    • 他们在调用自定义的 process_request 方法时有些模棱两可。您能否解释一下如何在 RotateUserAgentMiddleware 类中调用我的 process_request 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    相关资源
    最近更新 更多