加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Scrapy如何暂停/恢复工作?

发布时间:2020-12-16 23:42:54 所属栏目:Python 来源:网络整理
导读:有人可以向我解释Scrapy中的暂停/恢复功能是如何工作的吗? 我正在使用的scrapy版本是0.24.5 documentation没有提供太多细节. 我有以下简单的蜘蛛: class SampleSpider(Spider):name = 'sample'def start_requests(self): yield Request(url='https://colos
有人可以向我解释Scrapy中的暂停/恢复功能是如何工作的吗?

我正在使用的scrapy版本是0.24.5

documentation没有提供太多细节.

我有以下简单的蜘蛛:

class SampleSpider(Spider):
name = 'sample'

def start_requests(self):
        yield Request(url='https://colostate.textbookrack.com/listingDetails?lst_id=1053')
        yield Request(url='https://colostate.textbookrack.com/listingDetails?lst_id=1054')
        yield Request(url='https://colostate.textbookrack.com/listingDetails?lst_id=1055')

def parse(self,response):
    with open('responses.txt','a') as f:
        f.write(response.url + 'n')

我正在运行它:

from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log,signals


from scrapyproject.spiders.sample_spider import SampleSpider
spider = SampleSpider()
settings = get_project_settings()
settings.set('JOBDIR','/some/path/scrapy_cache')
settings.set('DOWNLOAD_DELAY',10)
crawler = Crawler(settings)
crawler.signals.connect(reactor.stop,signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()

如您所见,我启用了JOBDIR选项,以便保存爬行状态.

我将DOWNLOAD_DELAY设置为10秒,以便我可以在处理请求之前停止蜘蛛.我原以为我下次运行蜘蛛时,会不会重新生成请求.事实并非如此.

我在scrapy_cache文件夹中看到一个名为requests.queue的文件夹.但是,这总是空的.

看起来request.seen文件正在保存已发出的请求(使用SHA1哈希),这很棒.但是,下次运行spider时,会重新生成请求,并将(重复的)SHA1哈希值添加到文件中.我在Scrapy代码中跟踪了这个问题,看起来RFPDupeFilter打开带有’a’标志的requests.seen文件.因此它总是会丢弃文件中的先前值(至少这是我的Mac OS X上的行为).

最后,关于蜘蛛状态,我可以从Scrapy代码中看到蜘蛛状态在蜘蛛关闭时被保存,并在打开时被回读.但是,如果发生异常(例如,机器关闭),这不是很有用.我必须定期保存吗?

我在这里遇到的主要问题是:使用Scrapy的常见做法是什么,同时期望抓取会多次停止/恢复(例如,抓取一个非常大的网站时)?

解决方法

为了能够暂停和恢复scrapy搜索,您可以运行此命令以开始搜索:
scrapy crawl somespider --set JOBDIR=crawl1

要停止搜索,你应该运行control-C,但是你必须只运行一次并等待scrapy停止,如果你运行control-C两次它将无法正常工作.

然后您可以通过再次运行此命令来恢复搜索:

scrapy crawl somespider --set JOBDIR=crawl1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读