对同一个解析函数产生多个请求。函数 运行 的顺序是什么?废料
yield multiple request to a same parse function. what is the order of function running? Scrapy
基本上我的程序具有以下结构。
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。对于每个页面,程序都需要一些时间来加载页面并完成工作。但由于某些原因,我总是想念 link 中的一些 link。
所以我怀疑 yield 操作何时将请求发送到 second_parse,但 second_parse 仍在处理先前的请求。这样请求就错过了。我说得对吗?
如果不是,当 yield 发送请求时发生了什么?
例如,如果有 20 个 link,则 first_parse 将向 second_parse 函数发送 20 个请求。 second_parse 每个请求需要 10 秒,所以当第一个请求 运行 在 second_parse 上时,其他人会在队列中等待吗?还是刚刚离开?
您正在 second_parse()
方法中重复使用同一个 webdriver
实例。我怀疑这是导致问题的原因,因为已经实例化的 webdriver 在未完成当前页面时导航到不同的页面。您应该在 second_parse()
方法中实例化然后关闭一个 webdriver
:
def second_parse(self, response):
webDriver = webdriver.Firefox()
webDriver.get(url)
# scrape
webDriver.close()
这可能会导致多达 20 个浏览器同时处于活动状态。
基本上我的程序具有以下结构。
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。对于每个页面,程序都需要一些时间来加载页面并完成工作。但由于某些原因,我总是想念 link 中的一些 link。
所以我怀疑 yield 操作何时将请求发送到 second_parse,但 second_parse 仍在处理先前的请求。这样请求就错过了。我说得对吗?
如果不是,当 yield 发送请求时发生了什么?
例如,如果有 20 个 link,则 first_parse 将向 second_parse 函数发送 20 个请求。 second_parse 每个请求需要 10 秒,所以当第一个请求 运行 在 second_parse 上时,其他人会在队列中等待吗?还是刚刚离开?
您正在 second_parse()
方法中重复使用同一个 webdriver
实例。我怀疑这是导致问题的原因,因为已经实例化的 webdriver 在未完成当前页面时导航到不同的页面。您应该在 second_parse()
方法中实例化然后关闭一个 webdriver
:
def second_parse(self, response):
webDriver = webdriver.Firefox()
webDriver.get(url)
# scrape
webDriver.close()
这可能会导致多达 20 个浏览器同时处于活动状态。