Python 刮痧+;生产中的Django
我正在编写一个Django web应用程序,它利用了Scrapy,并且在本地运行得很好,但我想知道如何设置一个生产环境,在这个环境中,我的爬行器会定期自动启动(我的意思是,一旦爬行器完成工作,它会在一定时间后重新启动…例如24小时后)。 目前,我使用一个定制的Django命令启动spider,其主要目标是允许使用Django的ORM来存储刮取的项目,因此我运行:Python 刮痧+;生产中的Django,python,json,django,scrapy,scrapyd,Python,Json,Django,Scrapy,Scrapyd,我正在编写一个Django web应用程序,它利用了Scrapy,并且在本地运行得很好,但我想知道如何设置一个生产环境,在这个环境中,我的爬行器会定期自动启动(我的意思是,一旦爬行器完成工作,它会在一定时间后重新启动…例如24小时后)。 目前,我使用一个定制的Django命令启动spider,其主要目标是允许使用Django的ORM来存储刮取的项目,因此我运行: python manage.py scrapy crawl myspider 结果存储在我的Postgres数据库中。 我安装了,因
python manage.py scrapy crawl myspider
结果存储在我的Postgres数据库中。
我安装了,因为这似乎是生产中运行scrapy的首选方式
但不幸的是,我不能在不编写monkey补丁的情况下使用它(我希望避免),因为它的web服务API使用JSON,我得到“modelX不是JSON可序列化的”异常。
我看过了,但它的设计似乎不像Scrapy那样灵活和可定制,事实上,他们在文档中说:
由于它简化了事情,DDS不适用于所有类型的应用程序
刮刀,但它非常适合相对常见的
定期清理网站上的更新项目列表
我还想用crontab来安排我的蜘蛛。。。但是我应该在什么时间间隔运行我的蜘蛛呢?如果我的EC2实例(我将使用AmazonWebServices托管我的代码)需要重新启动,我必须手动重新运行我的所有爬行器。。。嗯。。。事情变得复杂了。。。
所以生产环境的有效设置是什么?你是怎么处理的?你有什么建议?我也有同样的问题,这让我想到了你的问题。以下是我对我的项目的想法和做法 目前,我使用定制的Django命令启动spider,该命令 主要目标是允许使用Django的ORM来存储刮取的数据 项目 这听起来很有趣。我还想在Scrapy Spider中使用Django的ORM,所以我确实导入了Django,并在刮擦发生之前进行了设置。如果从已经实例化的Django上下文调用scrapy,我想这是不必要的 我安装了scrapyd,因为它似乎是首选的运行方式 在制作过程中很粗糙,但不幸的是,我不能不写作就使用它 猴子补丁(我想避免) 我想到了使用subprocess.Popen,将stdout和stderr重定向到管道。然后获取stdout和stderr结果并进行处理。我不需要从输出中收集项目,因为爬行器已经通过管道将结果写入数据库。若您以这种方式从Django调用scrapy进程,它将是递归的,并且scrapy进程将设置Django上下文以便可以使用ORM 然后我尝试了scrapyd,是的,您必须向scrapyd发出HTTP请求以使作业排队,但它不会在作业完成或挂起时向您发出信号。那部分你必须检查,我想那是一个猴子补丁的地方 我还想用crontab来安排我的蜘蛛。。。但是什么时候 我应该运行我的蜘蛛吗?如果我的EC2实例(我将 使用amazon Web服务托管我的代码)需要重新启动我必须 手动重新运行我所有的蜘蛛。。。嗯。。。事情变得复杂了。。。 所以生产环境的有效设置是什么? 你是怎么处理的?你有什么建议 我目前正在使用cron来安排刮削。这不是用户可以改变的东西,即使他们想要,但它也有它的优点。这样,我确信用户不会缩短周期,让多个刮刀同时工作 我担心在链条中引入不必要的链接。Scrapyd将是中间环节,目前看来它正在做它的工作,但如果它不能保持生产负荷,它也可能是薄弱环节 考虑到您不久前发布了这篇文章,我很高兴听到您对整个Django-Scrapy-Scrapyd集成的解决方案 干杯