我目前正在努力浏览雅虎财经页面: https://sg.finance.yahoo.com/quote/1B0.SI/history?period1=1426780800&period2=1489939200&interval=div%7Csplit&filter=split&frequency=1mo
我需要获得股票拆分的日期和比率,但我潜入了一个json文件,其中我没有看到任何这些信息!
我正在使用此处提到的脚本How to understand this raw HTML of Yahoo! Finance when retrieving data using Python?
from bs4 import BeautifulSoup
from pprint import pprint as pp
import re
import json
import requests
url='https://sg.finance.yahoo.com/quote/1B0.SI/history?period1=1426780800&period2=1489939200&interval=div%7Csplit&filter=split&frequency=1mo'
soup = BeautifulSoup(requests.get(url).content)
script = soup.find("script",text=re.compile("root.App.main")).text
data = json.loads(re.search("root.App.main\s+=\s+(\{.*\})", script).group(1))
stores = data["context"]["dispatcher"]["stores"]
pp(stores)
如果您知道我在哪里可以找到它,请告诉我。
谢谢!
答案 0 :(得分:0)
我猜测你可以用 selenium 来做到这一点。
>>> from selenium import webdriver
>>> driver = webdriver.Chrome()
>>> driver.get('https://sg.finance.yahoo.com/quote/1B0.SI/history?period1=1426780800&period2=1489939200&interval=div%7Csplit&filter=split&frequency=1mo')
>>> driver.get('https://sg.finance.yahoo.com/quote/1B0.SI/history?period1=1426780800&period2=1489939200&interval=div%7Csplit&filter=split&frequency=1mo')
>>> tableRows = driver.find_elements_by_xpath('//tr')
>>> len(tableRows)
5
>>> tableRows[1].text
'Date Open High Low Close Adj close* Volume'
>>> tableRows[2].text
'Oct 11, 2016 2/1 Stock split'
>>> tableRows[3].text
'Feb 25, 2016 2/1 Stock split'
特别注意我必须加载页面两次。第一次加载失败。您可以在selenium文档中学习如何处理这种意外事件。 (使用try-except
而不是asssert
。)在抓取此页面时面临的主要困难是无法看到HTML。我假设所需内容将在表中,并且该假设被证明是正确的。