首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >站点数据未作为浏览器填充,尽管使用html请求进行呈现

站点数据未作为浏览器填充,尽管使用html请求进行呈现
EN

Stack Overflow用户
提问于 2020-08-05 10:12:03
回答 1查看 114关注 0票数 0

我正在不同的网站上试验html-requests,我在这个特定网站上提取股票价格时遇到了麻烦:

https://www.morningstar.com/stocks/xnys/BABA/quote

我正在使用html-requests,并使用html.render来呈现javascript。尽管如此,数据似乎并没有像在浏览器中那样被填充。

代码语言:javascript
复制
from requests_html import HTMLSession
import requests_html
from bs4 import BeautifulSoup as bs


user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
requests_html.DEFAULT_USER_AGENT = user_agent



def get_request(ticker):
    
    session = HTMLSession()
    print(url)
    res = session.get(url)
    try:
        res.raise_for_status()
    except ValueError as e:
        raise('Dead link')

    return res


def mstar():
    
    url = 'https://www.morningstar.com/stocks/xnys/BABA/quote'
    
    res = get_requesturl)
    res.html.render()
    
    price = res.html.find('div#message-box-price.message-partial.fill.up')[0].text
    print(price)

    price = res.html.find('div.message-partial.fill.up')[0].text
    print(price)
    
    change = res.html.find('div#message-box-percentage')[0].text
    print(change)

预期的结果是以下数据:

代码语言:javascript
复制
262.20
4.26 | 1.65%

然而,要么我只是得到符号:-%,而没有实际价格。

有什么建议吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-08-05 20:21:43

数据是由JSON API生成的,然后通过JavaScript动态插入到网站中,因此python requests看不到它。您可以自己验证它,方法是执行一个curl https://www.morningstar.com/stocks/xnys/baba/quote并尝试在上面找到1.65% --它不在那里,因为它不在HTML源文件中。

我建议改用selenium,并按如下方式解析数据:

代码语言:javascript
复制
elements = driver.find_element(By.ID, "div")
for element in elements:
    print element.text
    print element.get_attribute('message-box-price.message-partial.fill.up')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63257454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档