【问题标题】:yield multiple request to a same parse function. what is the order of function running? Scrapy对同一个解析函数产生多个请求。函数运行的顺序是什么?刮擦
【发布时间】:2016-01-25 02:01:51
【问题描述】:

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

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 操作将请求发送到 second_parse 时,但 second_parse 仍在处理上一个请求。所以请求错过了。我说的对吗?
如果没有,当产量发送请求时发生了什么?
例如,如果有 20 个链接,first_parse 将向 second_parse 函数发送 20 个请求。 second_parse 每个请求需要 10 秒,所以当第一个请求在 second_parse 上运行时,其他请求将在队列中等待?还是刚走了?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 它可以工作,但它似乎没有并行运行?你能给我一些想法吗?
    • @HuazheYin 好的,你的意思是你一次只能看到一个浏览器?您能否分享您目前拥有的完整代码?谢谢。
    • @HuazheYin 能否请您在这里创建一个要点:gist.github.com。我需要一个完整的蜘蛛,我可以运行它来重现您的问题。谢谢!
    • 你会看到那里发生了什么。很奇怪..@alecxe
    • @HuazheYin 我稍后会看。看看您是否可以从中提出一个单独的问题,以便其他人也可以帮助您。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    相关资源
    最近更新 更多