整合Django Rest Framework和Scrapy

时间:2019-06-15 05:22:22

标签: python django django-rest-framework scrapy

Scrapy和Django框架都是独立的最佳Python框架,可使用较少的代码来构建搜寻器和Web应用程序,尽管无论何时您想创建蜘蛛,都必须始终生成新的代码文件并编写相同的代码(尽管有些变化。)我正在尝试将两者整合。但是卡在我需要发送状态成功的状态200_OK的蜘蛛运行成功的地方,同时蜘蛛继续运行,当它结束时,将数据保存到数据库。

尽管我知道该API已经可以使用scrapyd。但我想使其更具通用性。这样一来,您无需编写多个文件即可创建搜寻器。我以为Crawlrunner https://docs.scrapy.org/en/latest/topics/practices.html会有所帮助,因此也可以尝试一下 t Easiest way to run scrapy crawler so it doesn't block the script 却给我一个错误,builtins.ValueError: signal only works in main thread

即使我从Rest框架获得了响应。但是Crawler由于此错误而无法运行,这是否意味着我需要切换到主线程? 我用一段简单的代码来做到这一点

spider = GeneralSpider(pk)
runner = CrawlerRunner()
d = runner.crawl(GeneralSpider, pk)
d.addBoth(lambda _: reactor.stop())
reactor.run()

1 个答案:

答案 0 :(得分:2)

我在django视图中运行了scrapy spider,并分享了我的代码。

settings_file_path = "scraping.settings"  # Scrapy Project Setting
os.environ.setdefault('SCRAPY_SETTINGS_MODULE', settings_file_path)
settings = get_project_settings()
runner = CrawlerRunner(settings)

path = "/path/to/sample.py"
path = url.replace('.py', '')
path = url.replace('/', '.')
file_path = ".SampleSpider".format(path)

SampleSpider = locate(file_path)

d = runner.crawl(SampleSpider)
d.addBoth(lambda _: reactor.stop())
reactor.run()

我希望这会有所帮助。