Python 刮擦-等待飞溅完成?
下面是我的代码的简化版本。运行时,文本“完成”在“运行”之前打印很长时间:Python 刮擦-等待飞溅完成?,python,scrapy,splash-screen,Python,Scrapy,Splash Screen,下面是我的代码的简化版本。运行时,文本“完成”在“运行”之前打印很长时间: import scrapy from scrapy_splash import SplashRequest class ExtractSpider(scrapy.Spider): name = 'extract' start_urls = ['SomeURL'] def parse(self, response): url_list = response.css('a.tit
import scrapy
from scrapy_splash import SplashRequest
class ExtractSpider(scrapy.Spider):
name = 'extract'
start_urls = ['SomeURL']
def parse(self, response):
url_list = response.css('a.title::attr(href)').extract()
for url in url_list:
splash_args = {
'html': 1,
'png': 1,
'render_all': True,
'wait': 0.5
}
yield SplashRequest(url, self.parse_result, endpoint='render.json', args=splash_args)
print('FINISHED')
def parse_result(self, response):
print('RUNNING')
我猜这与后台运行的线程有关,但我想知道在进入下一个代码之前是否有任何方法可以检查函数是否已完成?例如,打印前的某种if语句('FINISH')?Scrapy使用异步代码(即请求被独立处理),因此没有简单的方法来实现这一点。您只能判断一个请求是否已完成,并且该请求是否发生在
parse_result
方法中(当然,如果处理过程没有错误)
另外,作为一个补充说明,在您的示例中,仅考虑生成器的工作方式,您在运行之后永远不会完成打印。请看一个最简单的例子:
>>> def foo():
... for i in range(5):
... yield i
... print 'Finished'
>>>
>>> [x for x in foo()]
Finished
[0, 1, 2, 3, 4]