【问题标题】:Integrating Django Rest Framework and Scrapy集成 Django Rest 框架和 Scrapy
【发布时间】:2019-06-15 05:22:22
【问题描述】:

Scrapy 和 Django 框架都是 Python 的最佳独立框架,可以用更少的代码构建爬虫和 Web 应用程序,尽管无论何时你想创建一个蜘蛛,你总是必须生成新的代码文件并且必须编写相同的代码(虽然有一些变化。)我试图将两者结合起来。但是卡在我需要发送状态 200_OK 蜘蛛成功运行的地方,同时蜘蛛继续运行,当它完成时将数据保存到数据库。

虽然我知道 API 已经可用于 scrapyd。但我想让它更通用。这使您无需编写多个文件即可创建爬虫。我认为Crawlrunner https://docs.scrapy.org/en/latest/topics/practices.html 会对此有所帮助,因此也试试这个东西 电话Easiest way to run scrapy crawler so it doesn't block the script 但它给了我builtins.ValueError: signal only works in main thread

的错误

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

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

【问题讨论】:

    标签: python django django-rest-framework scrapy


    【解决方案1】:

    我在 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()
    

    希望对你有帮助。

    【讨论】: