我想抓捕一个股票网站,并使用硒来获取价格。我不能使用普通的HTML请求,因为HTML是动态的。 我正在使用无头Selenium Web驱动程序来获取数据,但是每个请求大约需要30秒。 有没有更快的方法来获取动态HTML?
答案 0 :(得分:3)
否,您对Selenium的渲染等待时间感到困惑
动态HTML需要完整的浏览器。没有太多的谈判。如果您的页面是分开且不同的,即您正在刮stocks.com/oilandgas以及stocks.com/agriculture,则有一种可能的方法来加快处理速度。
您可能拥有的一个选择是为每个Selenium Webdriver实例创建一个单独的线程,并使用两个不同的Selenium Webdrivers同时抓取两个网页。
需要注意的是,只有在瓶颈(导致缓慢的原因)是网站的呈现时,它才会加快速度。
如果是Internet速度,计算机的处理能力或网站的服务器速度,则此操作不会有所改善。
实际上,下面的Daniel Farrell建议这将提高网络速度。您可能需要试一下。
答案 1 :(得分:1)
该站点正在从XHR获取数据
所以您可以使用请求和json.loads加载它,这已经更快了。
就获取更新HTML而言,比以轮询更快的速度而言,有一些框架(操纵up)可以将更新事件从浏览器发送到主脚本,但AFAIK无法在Python中做到这一点。
答案 2 :(得分:1)
您可以使用两种API来获取摘要信息和基于代码的公司简介。您可以使用更快的请求和会话来提高效率,以请求此信息。
import requests
tickers = ['FB']
results = {}
with requests.Session() as s:
for ticker in tickers:
results[ticker] = {}
r = s.get(f'https://api.nasdaq.com/api/quote/{ticker}/summary?assetclass=stocks').json()
results[ticker]['summary'] = r
r = s.get(f'https://api.nasdaq.com/api/company/{ticker}/company-profile').json()
results[ticker]['profile'] = r