当前位置: 首页 > 面试题库 >

从脚本进行抓取抓取始终会在抓取后阻止脚本执行

徐鑫鹏
2023-03-14
问题内容

我正在遵循本指南http://doc.scrapy.org/en/0.16/topics/practices.html#run-scrapy-from-
a-script
从我的脚本中运行scrapy。这是我脚本的一部分:

    crawler = Crawler(Settings(settings))
    crawler.configure()
    spider = crawler.spiders.create(spider_name)
    crawler.crawl(spider)
    crawler.start()
    log.start()
    reactor.run()
    print "It can't be printed out!"

它的工作原理应该是:访问页面,抓取所需信息,并将输出json存储在我告诉它的位置(通过FEED_URI)。但是,当蜘蛛完成他的工作(我可以在输出json中通过数字看到它)时,我的脚本将无法恢复执行。也许这不是一个棘手的问题。答案应该在扭曲反应堆的某个地方。如何释放线程执行?


问题答案:

蜘蛛完成后,您将需要停止反应器。您可以通过侦听spider_closed信号来完成此操作:

from twisted.internet import reactor

from scrapy import log, signals
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy.xlib.pydispatch import dispatcher

from testspiders.spiders.followall import FollowAllSpider

def stop_reactor():
    reactor.stop()

dispatcher.connect(stop_reactor, signal=signals.spider_closed)
spider = FollowAllSpider(domain='scrapinghub.com')
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
log.msg('Running reactor...')
reactor.run()  # the script will block here until the spider is closed
log.msg('Reactor stopped.')

命令行日志输出可能类似于:

stav@maia:/srv/scrapy/testspiders$ ./api
2013-02-10 14:49:38-0600 [scrapy] INFO: Running reactor...
2013-02-10 14:49:47-0600 [followall] INFO: Closing spider (finished)
2013-02-10 14:49:47-0600 [followall] INFO: Dumping Scrapy stats:
    {'downloader/request_bytes': 23934,...}
2013-02-10 14:49:47-0600 [followall] INFO: Spider closed (finished)
2013-02-10 14:49:47-0600 [scrapy] INFO: Reactor stopped.
stav@maia:/srv/scrapy/testspiders$


 类似资料:
  • 问题内容: 我在python脚本中运行 它成功运行并停止,但结果在哪里?我想要json格式的结果,该怎么办? 就像我们使用命令一样 问题答案: 您需要手动设置和设置: 如果要将结果放入变量中,可以定义一个将项目收集到列表中的类。使用信号处理程序查看结果: 仅供参考,看看Scrapy如何解析命令行参数。

  • 问题内容: 所以,我的问题相对简单。我有一只蜘蛛在多个站点上爬行,我需要它按照我在代码中写入的顺序返回数据。它发布在下面。 结果以随机顺序返回,例如,返回29,然后28,然后30。我已经尝试将调度程序的顺序从DFO更改为BFO,以防万一这是问题所在,但这并没有改变。 问题答案: 定义在方法中使用的URL 。下载页面时,将为你的方法调用每个起始URL的响应。但是你无法控制加载时间-第一个起始URL可

  • 我需要从一个网站上收集一些细节,问题是这个特定的网站在印度被禁止了,没有VPN我无法打开这个网站,但是VPN使废弃速度慢了很多,程序崩溃了很多,因为网站的响应时间增加了。还有其他方法可以访问网站吗?

  • 网页爬取 编写网页需要使用 HTML 语言,如果你有 HTML 学习经历就能知道所谓 HTML 语言就是一种规格化文档。有时我们能很方便的从中获取一些需要的数据,并且保持数据原有格式,如 csv 、json 等格式。但有时网站并不会提供一目了然的数据格式。 所以我们就需要爬取网页。网页爬取就是通过电脑程序编写,从不同的网页中去删选、挖掘你需要的数据,并且保存数据相应的格式。 网页请求( Reque

  • 问题内容: 我已经通过Scrapy文档今天一直在进行,并试图获得一个工作版本- https://docs.scrapy.org/en/latest/intro/tutorial.html#our-first- spider -在现实世界的例子。我的示例稍有不同,它有2个下一页,即 start_url>城市页面>单位页面 这是我要从中获取数据的单位页面。 我的代码: 但是当我运行它时,我得到: 因此

  • 本接口需要客户根据需要上传的视频的各个属性信息来请求该接口,并获取系统分配的视频id(videoid),以便后续接收系统处理视频完成后的回调信息. 本接⼝需要使⽤THQS⽅式进行请求参数校验 (关于THQS算法的细节请参⻅Spark API附录I), 本接口为GET请求,为保护用户APIKey以及其他信息本接口不⽀持跨域访问。 地址为: https://spark.bokecc.com/api/v