【问题标题】:How does the Scrapy Downloader work?Scrapy 下载器是如何工作的?
【发布时间】:2017-08-18 22:44:47
【问题描述】:

请查看以下有关 Scrapy 架构的链接。

https://doc.scrapy.org/en/latest/topics/architecture.html#component-downloader

我不明白第 5 点。

一旦页面完成下载,Downloader 会生成一个 Response(与该页面一起)并将其发送到 Engine,通过 Downloader Middlewares 传递(请参阅 process_response())。

这是否意味着它在我们的系统(RAM)中下载/加载整个页面,因为页面的大小大于响应(HTML)?

请参阅第 6 点。

Engine 接收到 Downloader 的 Response 并通过 Spider Middleware 传递给 Spider 进行处理(参见 process_spider_input())。

如果我在任何地方错了,请纠正我。

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    没有。当它谈论下载页面时,它只是谈论在该请求中返回的一件事(它可能是 html,也可能是 jpg……取决于站点和您的蜘蛛)。 HTML 和包含 HTML 的响应之间的区别在于响应还包含许多随 HTML 一起提供的附加信息。它将包含错误代码(可能是 200,如果一切顺利的话)、cookie 或服务器可能返回的任何其他标头。

    您可能对下载器中间件感兴趣的地方是,例如检查网站是否存在 404 错误。通常这些是由下载器中间件过滤的,所以如果你想让你的蜘蛛处理它们(在我的例子中,我想记录它们。我写的蜘蛛是检查我的网站是否有错误页面,以便我可以快速响应) .

    如果您对图像感兴趣,例如,您需要让您的蜘蛛为它们创建一个新请求。

    很难从您的帖子中看出,但听起来您担心的是内存占用。文档为尝试调试内存/引用泄漏提供了一些好主意。 https://doc.scrapy.org/en/latest/topics/leaks.html

    【讨论】:

    • 感谢您的回复。我不明白一件事,当我们浏览 url 然后页面在服务器端执行,我们得到呈现的 html。我的问题是下载器如何/在哪里执行页面。如果我无法在我的实际帖子中正确提出我的问题,我很抱歉
    • 如果你的蜘蛛请求一个 HTML 页面,它会由服务器端生成并发送给你,就好像它是从浏览器请求的一样(除了站点可能会进行用户代理检查,尽管那是邪恶的)。当页面由服务器发送给您时,它只发送 html。该 HTML 由客户端(无论是蜘蛛还是浏览器)处理,然后继续请求它需要的任何其他内容(如图像)。这不是在服务器端而是在客户端完成的。它发生得很快,你可能不会注意到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多