从网站获取动态更新的HTML内容的最快方法?

时间:2019-10-10 03:48:12

标签: python selenium web-scraping dynamic-html

我想抓捕一个股票网站,并使用硒来获取价格。我不能使用普通的HTML请求,因为HTML是动态的。 我正在使用无头Selenium Web驱动程序来获取数据,但是每个请求大约需要30秒。 有没有更快的方法来获取动态HTML?

3 个答案:

答案 0 :(得分:3)

否,您对Selenium的渲染等待时间感到困惑

动态HTML需要完整的浏览器。没有太多的谈判。如果您的页面是分开且不同的,即您正在刮stocks.com/oilandgas以及stocks.com/agriculture,则有一种可能的方法来加快处理速度。

您可能拥有的一个选择是为每个Selenium Webdriver实例创建一个单独的线程,并使用两个不同的Selenium Webdrivers同时抓取两个网页。

需要注意的是,只有在瓶颈(导致缓慢的原因)是网站的呈现时,它才会加快速度。

如果是Internet速度,计算机的处理能力或网站的服务器速度,则此操作不会有所改善。

实际上,下面的Daniel Farrell建议这将提高网络速度。您可能需要试一下。

答案 1 :(得分:1)

该站点正在从XHR获取数据

network tab

所以您可以使用请求和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