构建用于抓取和可视化数据的管道

时间:2018-04-02 18:21:11

标签: python scrapy scrapy-pipeline

我有一个Scrapy蜘蛛,它从网站获取所有必要的数据并将其存储在数据库中。我通常用" scrapy runspider"来运行它。存储数据时,我想显示它 - 为此我手动启动Flask服务器并将数据可视化为图形,从数据库中提取数据。

我需要做的是:

1)每天自动运行蜘蛛。为此,我想,我应该将它部署到Web服务器上。但是什么服务器以及如何达到收集的数据?

2)要创建一个简单的应用程序,在第一页上要求用户选择要传递给蜘蛛的参数值。然后,当有请求时,应该使用这些参数调用spider。然后它应该返回数据,应用程序应该处理并可视化这些数据。

3)将所有这些部署到Web服务器。

问题是,我不太了解如何建立一个连贯的流程管道。我尝试做的是使用子进程模块从应用程序运行蜘蛛,如

subprocess.call(["scrapy", "crawl", f"-a countries={countries} -a period= {period}", "news" ])

但是像这样,蜘蛛说它缺少必要的论据"国家"和"句号",即使我实际通过它们。而且,我认为事情不应该如何发挥作用。

我将不胜感激任何建议。

1 个答案:

答案 0 :(得分:1)

您不了解subprocess.call的工作原理。您调用它的方式等同于以下命令行:

scrapy crawl "-a countries={countries} -a  period= {period}" news

正如您所看到的,-a标志和参数被放在一起作为一个参数,而不是您想要的。你只需要在这个电话中稍微改变一下:

subprocess.call(["scrapy", "crawl", "-a", f"countries={countries}", "-a", f"period={period}", "news"])