对同一个解析函数产生多个请求。函数运行的顺序是什么? Scrapy

时间:2016-01-25 02:01:52

标签: python selenium selenium-webdriver scrapy scrapy-spider

基本上我的程序具有以下结构。

def first_parse:
  for link in links: 
    yield Request(url = link, callback = second_parse)

def second_parse:
   # webDriver.get(url) and crawl data.

我使用selenium Webdriver从first_parse加载url。对于每个页面,程序需要一些时间来加载页面并完成工作。但由于某些原因,我总是想念链接中的一些链接。
所以我怀疑yield操作何时将Request发送到second_parse,但second_parse仍在处理前一个请求。这样请求错过了。我是对的吗? 如果没有,发送请求的收益率会发生什么?例如,如果有20个链接,first_parse将向second_parse函数发送20个请求。对于每个请求,second_parse将花费10秒,所以当第一个请求在second_parse上运行时,其他请求将在队列中等待?还是刚刚离开?

1 个答案:

答案 0 :(得分:2)

您正在webdriver方法中重复使用相同的second_parse()实例。我怀疑这是导致问题的原因,因为当没有完成当前操作时,已经实例化的webdriver导航到不同的页面。您应该在webdriver方法中实例化然后关闭second_parse()

def second_parse(self, response):
   webDriver = webdriver.Firefox()
   webDriver.get(url)

   # scrape

   webDriver.close()

这可能导致最多20个浏览器同时处于活动状态。