python暂停和恢复_Scrapy如何暂停/恢复工作?

有人可以向我解释Scrapy中的暂停/恢复功能是如何工作的吗?

我正在使用的scrapy版本是0.24.5

我有以下简单的蜘蛛:

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的常见做法是什么,同时期望抓取会多次停止/恢复(例如,抓取一个非常大的网站时)?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值