【问题标题】:CPU-intensive parsing with scrapy使用 scrapy 进行 CPU 密集型解析
【发布时间】:2014-03-11 18:45:20
【问题描述】:

http://doc.scrapy.org/en/latest/topics/settings.html#concurrent-items 的 CONCURRENT_ITEMS 部分将其定义为:

要处理的最大并发项目数(每个响应) 在项目处理器(也称为项目管道)中并行。

这让我很困惑。这是否意味着发送到管道的项目是并行处理的,即。真的是多进程的吗?

假设我的解析涉及很多 lxml 查询和 xpath'ing。我应该在蜘蛛的 parse 方法本身中执行它们,还是应该发送一个包含整个响应的 Item 并让自定义管道类通过解析响应主体来填充 Item 的字段?

【问题讨论】:

    标签: python web-scraping screen-scraping scrapy


    【解决方案1】:

    CONCURRENT_ITEMS 设置是指在处理来自蜘蛛输出的项目时限制并发活动。并发活动是指扭曲(Scrapy 使用的底层框架)将同时执行的操作 - 通常是网络请求之类的东西。

    Scrapy 不使用多线程,并且不会使用多个内核。如果你的蜘蛛受 CPU 限制,通常的加速方法是使用多个单独的 scrapy 进程,避免 python GIL 的任何瓶颈。

    【讨论】:

      【解决方案2】:

      请求系统也可以并行工作,请参阅http://doc.scrapy.org/en/latest/topics/settings.html#concurrent-requests。 Scrapy 旨在处理蜘蛛本身的请求和解析,回调方法使其异步,并且默认情况下多个请求确实并行工作。

      并行处理的项目管道并不打算进行繁重的解析:而是要检查和验证您在每个项目中获得的值。 (http://doc.scrapy.org/en/latest/topics/item-pipeline.html)

      因此,您应该在蜘蛛本身中进行查询,因为它们被设计为在那里。来自蜘蛛的文档:

      Spider 是定义如何抓取某个网站(或一组网站)的类,包括如何执行抓取(即跟踪链接)以及如何从其页面中提取结构化数据(即抓取项目)。

      【讨论】:

        猜你喜欢
        • 2017-07-25
        • 1970-01-01
        • 1970-01-01
        • 2013-07-31
        • 2017-01-25
        • 1970-01-01
        • 1970-01-01
        • 2012-09-24
        • 1970-01-01
        相关资源
        最近更新 更多