Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 刮痧和芹菜`更新_状态`_Python_Scrapy_Celery_Scrapy Pipeline - Fatal编程技术网

Python 刮痧和芹菜`更新_状态`

Python 刮痧和芹菜`更新_状态`,python,scrapy,celery,scrapy-pipeline,Python,Scrapy,Celery,Scrapy Pipeline,我有以下设置(Docker): 芹菜链接到烧瓶设置,运行刮擦蜘蛛 烧瓶设置(显然) 烧瓶安装程序收到Scrapy->fire up worker执行某些工作的请求 现在我想根据芹菜工人的进度更新原来的烧瓶设置。但是现在无法在scraper内部使用芹菜.update_state(),因为它无法访问原始任务(尽管它正在芹菜任务内部运行) 顺便说一句:我是不是遗漏了一些关于scrapy的结构?我可以在\uuuu init\uuuu中指定参数,以便能够使用进一步的功能,这似乎是合理的,但scrapy

我有以下设置(Docker):

  • 芹菜链接到烧瓶设置,运行刮擦蜘蛛
  • 烧瓶设置(显然)
  • 烧瓶安装程序收到Scrapy->fire up worker执行某些工作的请求
现在我想根据芹菜工人的进度更新原来的烧瓶设置。但是现在无法在scraper内部使用
芹菜.update_state()
,因为它无法访问原始任务(尽管它正在芹菜任务内部运行)

顺便说一句:我是不是遗漏了一些关于scrapy的结构?我可以在
\uuuu init\uuuu
中指定参数,以便能够使用进一步的功能,这似乎是合理的,但scrapy似乎将该方法用作lambda函数


要回答一些问题:

  • 如何将芹菜与scrapy一起使用?
    scrapy在芹菜任务内部运行,而不是从命令行运行。我也从未听说过scrapyd,这是scrapy的子项目吗?我使用远程工作者从芹菜/烧瓶实例内部发射scrapy,因此它与原始请求所维护的线程不同,它们是独立的docker实例
task.update\u state
非常有效!在芹菜任务的内部,但一旦我们“进入”蜘蛛,我们就不能再获得芹菜。有什么想法吗

从项_刮取信号发出任务。更新_状态(taskid,meta={})。如果scrapy恰好在芹菜任务本身中运行(默认为self),也可以不使用taskid运行


这有点像访问当前芹菜任务的静态方式吗?我很乐意……

我们需要更多的信息来回答这个问题

你是怎么用芹菜和刮痧的?scrapy在芹菜任务中运行吗? 如果对您的项目有意义的话,我强烈建议您在自己的服务器下运行scrapy

如果不是,那么item_scraped信号将是良好的,但前提是您有权访问芹菜任务ID或芹菜任务对象本身


从项目_scrapedsignal issue
Task.update_state(taskid,meta={})
。如果scrapy恰好在芹菜任务本身中运行(默认为
self
),您也可以不使用taskid运行。

我们需要更多信息来回答这个问题

你是怎么用芹菜和刮痧的?scrapy在芹菜任务中运行吗? 如果对您的项目有意义的话,我强烈建议您在自己的服务器下运行scrapy

如果不是,那么item_scraped信号将是良好的,但前提是您有权访问芹菜任务ID或芹菜任务对象本身


从项目_scrapedsignal issue
Task.update_state(taskid,meta={})
。如果scrapy恰好在芹菜任务中运行(默认为
self
),您也可以不使用taskid运行。

我不确定您是如何启动爬行器的,但我遇到了与您描述的相同的问题

我的设置是flask作为RESTAPI,它根据请求启动芹菜任务来启动爬行器。我还没有编写代码,但我会告诉你我想做什么:

from scrapy.settings import Settings
from scrapy.utils.project import get_project_settings
from twisted.internet import reactor
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from scrapy import signals
from .your_celery import app



@app.task(bind=True)
def scrapping(self):

    def my_item_scrapped_handler(item, response, spider):
        meta = {
            # fill your state meta as required based on scrapped item, spider, or response object passed as parameters
        }

        # here self refers to the task, so you can call update_state when using bind
        self.update_state(state='PROGRESS',meta=meta)

    settings = get_project_settings()
    configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s'})

    runner = CrawlerRunner(settings)
    d = runner.crawl(MySpider)
    d.addBoth(lambda _: reactor.stop())

    for crawler in runner.crawlers:
        crawler.signals.connect(my_item_scrapped_handler, signal=signals.item_scraped)


    reactor.run()
很抱歉,我无法确认它是否有效,但一旦我开始测试它,我会在这里报告!我目前无法在该项目上投入我想要的时间:(

如果您认为我可以进一步帮助您,请不要犹豫与我联系

干杯,拉米罗

资料来源:

  • 爬虫程序爬虫程序方法:
  • 芹菜任务文档:
    • 绑定任务:
    • 海关国家:
  • 刮擦信号:
  • 以脚本形式运行scrapy:

我不确定你是如何解雇你的蜘蛛的,但我遇到了与你描述的相同的问题

我的设置是flask作为rest api,它会根据请求启动芹菜任务来启动爬行器。我还没有编写代码,但我会告诉你我想做什么:

from scrapy.settings import Settings
from scrapy.utils.project import get_project_settings
from twisted.internet import reactor
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from scrapy import signals
from .your_celery import app



@app.task(bind=True)
def scrapping(self):

    def my_item_scrapped_handler(item, response, spider):
        meta = {
            # fill your state meta as required based on scrapped item, spider, or response object passed as parameters
        }

        # here self refers to the task, so you can call update_state when using bind
        self.update_state(state='PROGRESS',meta=meta)

    settings = get_project_settings()
    configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s'})

    runner = CrawlerRunner(settings)
    d = runner.crawl(MySpider)
    d.addBoth(lambda _: reactor.stop())

    for crawler in runner.crawlers:
        crawler.signals.connect(my_item_scrapped_handler, signal=signals.item_scraped)


    reactor.run()
很抱歉,我无法确认它是否有效,但一旦我开始测试它,我会在这里报告!我目前无法在这个项目上投入我想要的时间:(

如果您认为我可以进一步帮助您,请不要犹豫与我联系

干杯,拉米罗

资料来源:

  • 爬虫程序爬虫程序方法:
  • 芹菜任务文档:
    • 绑定任务:
    • 海关国家:
  • 刮擦信号:
  • 以脚本形式运行scrapy:

更新了我的问题,hop我澄清了一些事情。@Rabidcicada更新了我的问题,hop我澄清了一些事情。@RabidCicadawoah buddy,我确实解决了它。但是谢谢你的意见!最后我还是像你一样处理了它,尽管参与度稍微低了一点。Oah buddy,我确实解决了它。但是谢谢你的意见!最后我处理了它这和你做的一样,只是少了一点参与