5

我的列表中有 >100,000 个 url(不同的域),我想下载并保存在数据库中以供进一步处理和修改。

使用scrapy而不是python的多处理/多线程是否明智?如果是,我该如何编写一个独立的脚本来做同样的事情?

此外,请随意提出您想到的其他很棒的方法。

4

4 回答 4

2

如果您非常了解要获取的 URL,则 Scrapy 在这里似乎不相关(这里不涉及爬网)。

想到的最简单的方法是使用Requests. 但是,按顺序查询每个 URL 并阻止等待答案的效率并不高,因此您可以考虑GRequests异步发送批量请求。

于 2013-06-06T08:48:59.967 回答
0

如果您突然创建高负载,大多数网站所有者都会尝试阻止您的爬虫。

因此,即使您有固定的链接列表,您也需要在 scrapy 或grab上控制超时、http 应答代码、代理等

于 2013-06-06T10:07:23.640 回答
0

Scrapy 仍然是一种选择。

  1. 速度/性能/效率

    Scrapy 是用 Twisted 编写的,这是一个流行的 Python 事件驱动网络框架。因此,它是使用非阻塞(又名异步)代码来实现并发的。

  2. 数据库流水线

    您提到您希望将数据通过管道传输到数据库中——您可能知道 Scrapy 具有Item Pipelines以下功能:

    一个项目被蜘蛛抓取后,它被发送到项目管道,该管道通过几个按顺序执行的组件来处理它。

    因此,每个页面都可以在下载后立即写入数据库。

  3. 代码组织

    Scrapy 为您提供了一个漂亮而清晰的项目结构,您可以在其中逻辑分离设置、蜘蛛、项目、管道等。即便如此,您的代码也更清晰,更易于支持和理解。

  4. 编码时间

    Scrapy 在幕后为你做了很多工作。这使您专注于实际的代码和逻辑本身,而不是考虑“金属”部分:创建进程、线程等。

但是,与此同时,Scrapy 可能是开销。请记住,Scrapy 旨在(并且擅长)从网页中抓取、抓取数据。如果您只想下载一堆页面而不查看它们 - 那么是的,grequests是一个不错的选择。

于 2013-06-06T12:05:59.480 回答
0

AFAIK,Scrapy如果 URL 列表不适合内存,则不可能。

这应该与minet 相关

minet fetch url_column urls.csv > report.csv
于 2019-11-21T22:36:57.060 回答