python - 如何使用 http 请求启动我的 scrapy 蜘蛛?

标签 python django scrapy

我是 Python 的新手,刚刚使用 scrapy 编写了一些蜘蛛程序。现在我想使用这样的 http 请求来激活我的蜘蛛: http://xxxxx.com/myspidername/args

我使用 nginx + uwsgi + django 来调用我的 scrapy 蜘蛛。

步骤:

  1. 创建&配置django项目

  2. 在django项目根目录下创建scrapy项目,写我的spider

  3. 启动uwsgi:uwsgi -x django_socket.xml

  4. 在 django 应用程序的 views.py 中调用我的蜘蛛

    from django.http import HttpResponse
    from scrapy import cmdline
    def index(request, mid):
        cmd = "scrapy crawl myitem -a mid=" + mid
        cmdline.execute(cmd.split())
        return HttpResponse("Hello, it work")
    

当我访问 http://myhost/myapp/index指向索引 View ,nginx返回错误页面,错误日志显示“upstream prematurely closed connection while reading response header from upstream”,我可以看到进程uwsgi消失了,但在 uwsgi 的日志中我可以看到我的蜘蛛正确运行。

我该如何解决这个错误?

这样对吗?还有其他方法可以做我想做的事吗?

最佳答案

我不认为在 Django View 中启动蜘蛛工具是个好主意。 Django 网络应用程序旨在向最终用户提供快速请求/响应,以便他们可以快速检索信息。即使我不完全确定导致错误发生的原因,我想只要蜘蛛不完成,您的 View 函数就会卡在那里。

这里有两个选项,您可以尝试改善用户体验并尽量减少可能发生的错误:

  1. 定时任务 它会定期运行您的脚本。它可靠且更容易记录和调试。但调度不灵活,缺乏控制。

  2. celery 这是非常适合 python/django 的特定工具,可以动态安排您的任务。您可以定义类似 crontab 的任务以定期运行,或者在运行时应用任务。它不会阻止您的 View 功能并在单独的进程中执行所有内容,因此它很可能是您想要的。它需要一些设置,因此一开始可能并不简单。但是,很多人都使用过它,一切就绪后效果很好。

关于python - 如何使用 http 请求启动我的 scrapy 蜘蛛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35063682/

相关文章:

python - 如何从文本数据中获取词袋?

python - 我如何区分和修补/merge 字符串而不是文件?

python - 我如何通过 numpy 从大数组中搜索数组

python - 如何找到正确的 xpath 并循环遍历表?

django - 如何在 Travis CI 上运行 redis?

javascript - 我如何根据用户提供的过滤值显示搜索结果?

python - 即使在处理 302 状态时,Scrapy 也会重定向我

python - Post 请求在 Scrapy 中不起作用。在 postman 工作。我哪里错了?

python - 以下链接,Scrapy 网络爬虫框架

Django - 加入两个多对一的关系