我在列表中有一个> 100,000个网址(不同的域名),我想下载并保存在数据库中以便进一步处理和修改。
使用scrapy而不是python的多处理/多线程是否明智?如果是,我如何编写独立脚本来执行相同的操作?
另外,请随时提出您想到的其他令人敬畏的方法。
答案 0 :(得分:2)
如果你非常了解要获取的URL(这里没有涉及抓取),那么Scrapy似乎与此无关。
最简单的想法是使用Requests
。但是,查询序列中的每个URL并阻止等待答案都不会有效,因此您可以考虑GRequests
异步发送批量请求。
答案 1 :(得分:0)
如果您突然创建高负载,大多数网站所有者会尝试阻止您的抓取工具。
所以即使你有固定的链接列表,你需要控制超时,http答案代码,代理等scrapy或grab
答案 2 :(得分:0)
Scrapy仍然是一种选择。
速度/性能/效率
Scrapy是用Twisted编写的,这是一种流行的事件驱动网络 Python的框架。因此,它使用非阻塞(也就是说 异步)并发代码。
数据库流水线
您提到您希望将数据流水线化到数据库中 - 您可能知道Scrapy具有Item Pipelines
功能:
物品被蜘蛛刮掉后,会被发送到物品 管道通过几个执行的组件处理它 顺序。
因此,每个页面在下载后都可以立即写入数据库。
代码组织
Scrapy为您提供了一个漂亮而清晰的项目结构,您可以在逻辑上分离设置,蜘蛛,物品,管道等。即使这样,您的代码也会更清晰,更容易支持和理解。
编码时间
Scrapy在幕后为您做了很多工作。这使您专注于实际的代码和逻辑本身,而不是考虑“金属”部分:创建进程,线程等。
grequests
是一个不错的选择。
答案 3 :(得分:0)