gpt4 book ai didi

python - Scrapy - 动态等待页面加载 - selenium + scrapy

转载 作者:行者123 更新时间:2023-11-28 18:19:17 30 4
gpt4 key购买 nike

我最近用 python 和 Selenium 做了一个网络爬虫,我发现它做起来非常简单。该页面使用 ajax 调用来加载数据,最初我等待固定的 time_out 来加载页面。这工作了一段时间。之后,我发现 selenium 有一个内置函数 WebDriverWait,它可以使用 wait.until() 等待特定元素加载。这使我的网络爬虫运行得更快。

问题是,我对结果还是不满意。下载内容平均每页花费 1.35 秒。

我尝试对此进行并行化,但时间并没有变好,因为驱动程序实例(使用 Chrome 或 PhantomJS)的创建占用了大部分抓取时间。

所以我把自己变成了scrapy。完成教程并编写解析器后,我的两个问题是:

1) scrapy 会自动并行运行多个 url 请求吗?

2) 我如何使用 scrapy 设置动态超时,例如 Selenium 的 WebDriverWait wait.until()

3)如果scrapy没有动态设置时间,解决方案是用scrapy+selenium,让selenium等到内容加载完毕,用scrapy真的有优势吗?我可以使用 selenium 选择器简单地检索数据,就像我在使用 scrapy 之前所做的那样

谢谢你的帮助。

最佳答案

  1. 是的,Scrapy 可以同时处理多个请求,这些请求是异步调度和处理的。这意味着 Scrapy 不需要等待请求完成和处理,它可以发送另一个请求或同时做其他事情。简而言之,它速度极快,并且可以配置为完全按照您的要求运行。

  1. Splash是一个 javascript 呈现服务。它是一个带有 HTTP API 的轻量级 Web 浏览器,使用 Twisted 和 QT5 在 Python 3 中实现。在 Scrapy 中使用它,您可以像使用 Selenium 一样处理动态内容默认 Splash 等待加载所有远程资源,但在大多数情况下最好不要永远等待它们。要在超时后中止资源加载并让整个页面有机会呈现使用资源超时,可以设置 splash.resource_timeoutrequest:set_timeout

  1. 同样,我觉得最大的不同在于不同实现的抓取过程的速度。由于 Scrapy 以异步方式处理事情,这使它比其他人有很大的优势。

关于python - Scrapy - 动态等待页面加载 - selenium + scrapy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46278673/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com