我有一个Scrapy项目,在它之上,我使用ScrapyRT创建一个API。首先,我使用默认设置和Procfile在Heroku中部署了应用程序,如下所示:web: scrapyrt -i 0.0.0.0 -p $PORT
到目前为止一切都很好,它按预期运行。
Scrapy项目有一个管道,可以将报废的项目发送到mongo数据库,这也可以正常工作。
现在,由于我已经将收集到的数据保存到数据库中,我的意图是创建一个额外的资源来处理get
请求,这样ScrapyRT会在数据库中检查该项目是否以前被丢弃过,并将其返回,而不是运行spider。根据ScrapyRT的文档,为了添加一个新资源,我需要通过命令行(Windows中的PowerShell)传递自定义设置,如下所示:scrapyrt -S nist_scraper.scrapyrt.settings
其中,nist_scraper
是项目的名称,scrapyrt
是项目内的子目录,settings
是设置所在的python文件的名称。
第一个
同样,在本地,一旦我发送了get请求{{BASE_URL}}crawl.json?spider_name=webbook_nist&start_requests=true&crawl_args={"cas":"74828"}
我得到了所需的行为,资源从数据库而不是从Scrapy项目中的蜘蛛发送项目。我知道项目来自数据库,因为我修改了ScrapyRT返回的响应并删除了所有元数据。
然而,这里有一个问题。我更新了相同的本地项目到Heroku,以覆盖在开始提到的工作正常的原始项目,并将Procfile更改为:web: scrapyrt -S nist_scraper.scrapyrt.settings -i 0.0.0.0 -p $PORT
但是当我发送相同的get请求时,ScrapyRT调用spider,并且不检查该项目是否在数据库中。为了清楚起见,数据库是相同的,并且该项目确实记录在该数据库中。发送的响应包含我从自定义资源中删除的元数据。
我不精通Heroku和ScrapyRT,但我认为问题是Heroku在启动API时没有添加我的自定义设置,因此ScrapyRT模块正在运行其默认设置,这些设置总是使用蜘蛛来破坏网站。
这里的项目是直播:https://nist-scrapyrt.herokuapp.com/crawl.json?spider_name=webbook_nist&start_requests=true&crawl_args={%22cas%22:%227732185%22}
这里有一个GitHub存储库:https://github.com/oscarcontrerasnavas/nist-webbook-scrapyrt-spider
据我所知,如果我不通过命令行参数添加自定义设置,scrapy.cfg
的默认设置将被ScrapyRT的默认设置覆盖。
我想要与本地环境相同的行为,但超过Heroku。我不想每次都运行蜘蛛,因为我知道从数据库中提取信息的“成本”较低。
有什么建议吗?
1条答案
按热度按时间h9a6wy2h1#
这个问题中显示的实现是正确的,Heroku上的环境变量有一个错字。如果你对如何自己做有问题,你可以留下评论。