从Django视图开始Scrapy

pyr*_*ace 10 python django scrapy web-scraping

我对Scrapy的体验是有限的,每次我使用它时,它总是通过终端的命令.如何从我的django模板中获取我的表单数据(要删除的URL)以与scrapy进行通信以开始进行刮擦?到目前为止,我只想到从django的视图中获取表单的返回数据,然后尝试进入scrapy目录中的spider.py,将表单数据的url添加到spider的start_urls中.从那里开始,我真的不知道如何触发实际的爬行,因为我习惯于通过我的终端使用"scrapy crawl dmoz"等命令严格执行此操作.谢谢.

微小的编辑:刚刚发现了scrapyd ...我想我可能正朝着正确的方向前进.

ale*_*cxe 12

你实际上是通过编辑回答的.最好的选择是设置scrapyd服务并进行API调用schedule.json以触​​发运行的抓取作业.

要进行API http调用,您可以使用urllib2/ requests,或使用scrapydAPI 的包装器- python-scrapyd-api:

from scrapyd_api import ScrapydAPI

scrapyd = ScrapydAPI('http://localhost:6800')
scrapyd.schedule('project_name', 'spider_name')
Run Code Online (Sandbox Code Playgroud)

如果我们放下scrapyd并尝试从视图中运行蜘蛛,它将阻止请求,直到扭曲的反应堆停止 - 因此,它实际上不是一个选项.

但是,您可以开始使用celery(与之配合使用django_celery) - 定义一个可以运行Scrapy蜘蛛并从django视图调用任务的任务.这样,您就可以将任务放在队列中,并且不会让用户等待爬网完成.


另外,看看django-dynamic-scraper包:

Django动态刮板(DDS)是一个应用程序Django构建在刮擦框架Scrapy之上.在保留Scrapy的许多功能的同时,它允许您通过Django管理界面动态创建和管理蜘蛛.

  • 好极了!得到了我的网络刮银徽章!:) (2认同)
  • 对于那些以类似目标访问此问题的人来说,我无法让python-scrapyd-api接受start_urls参数,我认为它现在不支持它.我做的是超级我的蜘蛛,所以它实际上需要一个网址,当你卷曲它,然后使用请求发送到scrapyd与网址 (2认同)
  • 我的两分钱:DDS是一个非常好的项目,但我觉得在内部配置蜘蛛时缺乏灵活性.很高兴使用模型直接存储物品和芹菜整合,但如果你的目标不是很简单或需要几个要求去培根,它可能会变得痛苦.也许我错过了什么?我会尝试在DDS [不是管理站点配置]中使用我自己的蜘蛛,希望这仍然有意义.否则我的下一个项目肯定是报废芹菜. (2认同)