我最近用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 回答
javascript rendering service
. 它是一个带有HTTP API的轻量级Web浏览器,使用Twisted和QT5在Python 3中实现 . 在Scrapy中使用它,您可以像使用Selenium一样使用_512530 . 通过 default Splash waits 来加载所有远程资源,但在大多数情况下最好不要永远等待它们 . 要在超时后中止资源加载并为整个页面提供渲染使用资源超时的机会,可以设置splash.resource_timeout
或request:set_timeout
.Asynchronously
,这使它比其他人更有优势 .