获得晨星/ BeautifulSoup股价

问题描述 投票:0回答:2

所以它的发生。最后,我要问我的#2的第一个问题。

我试图从晨星(https://www.morningstar.com/stocks/xnas/tsla/quote.html)获得股票的当前价格,我使用Beautifulsoup这一点。

在HTML代码中有一个唯一的ID(“消息箱价格”)。我想用它后,拿到的价格,但遗憾的是我没能找到一个解决方案。这将是很好,如果有人能帮助我。

我的代码来获得该网站是:

import bs4
import requests

res = requests.get('https://www.morningstar.com/stocks/xnas/tsla/quote.html')
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, 'lxml')

我已经尝试了许多不同的方法,但我认为这是最有前途的:

1号:

price = soup.find(id='message-box-price')
price2 = price.find_next()
print(price2)

2号:

price = soup.select("#message-box-price")
price2 = price.find_all_next()
print(price2)

3号:

price = soup.find_all(id="message-box-price")
print(price)

此外,我已经试过它的一些变化和使用的.text获得例如值。

错误已:

  • AttributeError的:“NoneType”对象有没有属性“find_previous”
  • AttributeError的:“名单”对象有没有属性“文本”
  • 类型错误:选择()得到了一个意想不到的关键字参数“ATTRS”
  • 或者,我只是得到了一个空表背 - > []
python beautifulsoup stock price morningstar
2个回答
1
投票

该页面是动态的。你可以用Selenium打开页面,让它渲染,然后抓住信息:

import pandas as pd
import bs4 
from selenium import webdriver 

url = 'https://www.morningstar.com/stocks/xnas/tsla/quote.html'

browser = webdriver.Chrome()
browser.get(url)

html = browser.page_source

soup = bs4.BeautifulSoup(html,'html.parser')

price = soup.find('div', {'id':'message-box-price'})
price2 = price.text.strip()
print(price2)

browser.close()

输出:

print(price2)
$312.21

0
投票

像@ chitown88和@沙鲁克-TA在他们的答案中提到,要获得这个价格,我必须使用硒。在这种情况下,我最好使用pyautogui下载股票的整体价格历史CSV。

我的代码要做到这一点是这样的:

from selenium import webdriver
import time
import pyautogui

url = 'https://www.morningstar.com/stocks/xnas/tsla/quote.html'

browser = webdriver.Firefox()
browser.get(url)
time.sleep(7)

pyautogui.click(139, 833, button='left')
time.sleep(10)
pyautogui.click(973, 289, button='left')
time.sleep(2)
pyautogui.click(1649, 236, button='left')
time.sleep(1)

pyautogui.typewrite(['down'])
time.sleep(1)
pyautogui.typewrite(['enter'])

browser.close()

如果有人有一个更容易和/或更快的方式,请随时提。

(另外,如果你想知道为什么我没有使用任何其他证券交易所API。关键是,我正在做一个项目,我使用的是晨星宇宙的股票行情。出于这个原因,得到的价格也从晨星是更有效的原因代号时常改变,并且在自动化的过程有很多的请求都失败。)

© www.soinside.com 2019 - 2024. All rights reserved.