Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 Scrapy如何使用动态(变量)参数递归运行spider?_Python_Scrapy_Web Crawler_Twisted_Scrapy Spider - Fatal编程技术网

Python Scrapy如何使用动态(变量)参数递归运行spider?

Python Scrapy如何使用动态(变量)参数递归运行spider?,python,scrapy,web-crawler,twisted,scrapy-spider,Python,Scrapy,Web Crawler,Twisted,Scrapy Spider,我有一个完整的函数spider,它接受一个参数date。在spider的每次迭代中都会发生变化 为了测试purpouse,我创建了一个shell脚本,它执行以下操作 有一个点文件.date,其格式为YYYY-MM-DD脚本读取该文件并将日期传递给spider 一旦任务完成并将数据保存到mysql,日期值将减少一天,并将其保存到文件中以供下一次迭代使用 Shell脚本 现在我需要将其移动到爬虫进程。那我该怎么做呢?我是否需要创建一个独立的python文件并运行它?例如,我创建了一个文件proces

我有一个完整的函数spider,它接受一个参数
date
。在spider的每次迭代中都会发生变化

为了测试purpouse,我创建了一个shell脚本,它执行以下操作

  • 有一个点文件
    .date
    ,其格式为
    YYYY-MM-DD
    脚本读取该文件并将日期传递给spider
  • 一旦任务完成并将数据保存到mysql,日期值将减少一天,并将其保存到文件中以供下一次迭代使用
  • Shell脚本 现在我需要将其移动到爬虫进程。那我该怎么做呢?我是否需要创建一个独立的python文件并运行它?例如,我创建了一个文件
    process.py

    Python脚本process.py 参数date=date已经过了,但是我有点不明白在这之后如何继续。我是否在python文件上读写点文件?此文件代码是否在每次迭代或报废时运行,只接受一次参数并与之一起运行

    问题:如何使用动态(变量)参数递归运行spider?

    此脚本正常

    from DailyDataSpider import DailyDataSpider
    from scrapy.crawler import CrawlerProcess
    
    process = CrawlerProcess()
    process.crawl( DailyDataSpider, date=date ) # TODO: Read and pass date
    process.start()
    
    现在在您的蜘蛛文件中执行此操作

    from scrapy.spiders import CrawlSpider
    class DailyDataSpider (CrawlSpider):
    
          def __init__(self, date=None):
                 if date:
                      self.date = date
    
    现在访问spider中的任何位置。 您可以访问
    管道中的
    日期
    中间件
    ,如
    spider.date

    init()中提供了默认无,以防止在不希望传递日期参数时出错。。。所以
    scrapy crawl spider1-a date=date\u这里
    scrapy crawl spider1
    会起作用

    这个脚本没问题

    from DailyDataSpider import DailyDataSpider
    from scrapy.crawler import CrawlerProcess
    
    process = CrawlerProcess()
    process.crawl( DailyDataSpider, date=date ) # TODO: Read and pass date
    process.start()
    
    现在在您的蜘蛛文件中执行此操作

    from scrapy.spiders import CrawlSpider
    class DailyDataSpider (CrawlSpider):
    
          def __init__(self, date=None):
                 if date:
                      self.date = date
    
    现在访问spider中的任何位置。 您可以访问
    管道中的
    日期
    中间件
    ,如
    spider.date


    init()中提供了默认无,以防止在不希望传递日期参数时出错。。。所以
    scrapy crawl spider1-a date=date\u在这里
    scrapy crawl spider1
    可以工作

    可能应该始终指定
    self.date
    。我不确定为什么这里提供了默认值
    None
    ,但是如果它有用,那么让下游应用程序代码检查它-而不是在未设置时点击AttributeError。@Jean-PaulCalderone默认值None在uuu init_uu()中提供,以防止在我们不想传递日期参数时出错。。。因此
    scrapy crawl spider1-这里的日期=日期
    scrapy crawl spider1
    可以工作如果应用程序代码需要一个日期来运行,那么进程在
    scrapy crawl…
    时间失败比以后在爬网过程中的某个随机点失败要好得多。但是,当然,保留默认值,只需无条件地创建属性。可能应该始终指定
    self.date
    。我不确定为什么这里提供了默认值
    None
    ,但是如果它有用,那么让下游应用程序代码检查它-而不是在未设置时点击AttributeError。@Jean-PaulCalderone默认值None在uuu init_uu()中提供,以防止在我们不想传递日期参数时出错。。。因此
    scrapy crawl spider1-这里的日期=日期
    scrapy crawl spider1
    可以工作如果应用程序代码需要一个日期来运行,那么进程在
    scrapy crawl…
    时间失败比以后在爬网过程中的某个随机点失败要好得多。但是,当然,保留默认值,只需无条件地创建属性即可。