繁体   English   中英

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

[英]Scrapy - dynamic wait for page to load - selenium + scrapy

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

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

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

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

1)scrapy是否会在paralel中自动运行多个url请求?

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

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

谢谢你的帮助。

  1. 是的,Scrapy可以同时处理多个请求 ,这些请求异步调度和处理的。 这意味着Scrapy不需要等待请求完成和处理,它可以在此期间发送另一个请求或执行其他操作。 简而言之,它的速度非常快,并且可以配置为完全符合您的要求。

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

  1. 同样,我感觉到的最大区别在于不同实现的抓取过程的速度 而且由于Scrapy Asynchronously处理事物,这使它比其他人更有优势。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM