繁体   English   中英

使用Python网页抓取JS内容(Yahoo Finance)

[英]Web scraping JS content with Python (Yahoo Finance)

我目前正在Yahoo Finance的此页面上苦苦挣扎: https : //sg.finance.yahoo.com/quote/1B0.SI/history?period1=1426780800&period2=1489939200&interval= div%7Csplit &filter=split&frequency=1mo

我需要获取股票分割的日期和比率,但是我进入了一个json文件,其中没有任何这些信息!

我正在使用此处提到的脚本如何理解Yahoo!的原始HTML! 使用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)

如果您有想法可以在哪里找到,请告诉我。

谢谢!

我的猜测是,您可以使用来做到这一点。

>>> 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'

请特别注意,我必须两次加载页面。 第一次加载失败。 您可以在硒文档中了解如何处理这种情况。 (使用try-except而不是asssert 。)刮取此页面时面临的主要困难是无法看到HTML。 我假设期望的内容将在表中,并且该假设被证明是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM