我正在不同的网站上试验html-requests,我在这个特定网站上提取股票价格时遇到了麻烦:
https://www.morningstar.com/stocks/xnys/BABA/quote
我正在使用html-requests,并使用html.render来呈现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)预期的结果是以下数据:
262.20
4.26 | 1.65%然而,要么我只是得到符号:-或%,而没有实际价格。
有什么建议吗?谢谢。
发布于 2020-08-05 20:21:43
数据是由JSON API生成的,然后通过JavaScript动态插入到网站中,因此python requests看不到它。您可以自己验证它,方法是执行一个curl https://www.morningstar.com/stocks/xnys/baba/quote并尝试在上面找到1.65% --它不在那里,因为它不在HTML源文件中。
我建议改用selenium,并按如下方式解析数据:
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')https://stackoverflow.com/questions/63257454
复制相似问题