【问题标题】:Python Beautiful Soup - Yahoo Finance Data, Annual vs QuarterlyPython Beautiful Soup - 雅虎财经数据,年度与季度
【发布时间】:2018-05-21 00:40:22
【问题描述】:

我有一个关于使用漂亮汤解析雅虎财经页面的快速问题。

这是我要从中提取数据的页面示例。

https://finance.yahoo.com/quote/AAPL/cash-flow?p=AAPL

我能够成功地从使用 BeautifulSoup 中提取数据,但我无法弄清楚如何在年度数据和季度数据之间切换。因此,我只能提取年度数据。切换到季度时,网址似乎没有改变。从浏览器检查来看,它似乎切换了一个我不知道如何使用漂亮汤处理的表格。

我想知道是否有人有任何建议? 谢谢!

【问题讨论】:

  • 好像 javascript 改变了数据源,你必须从 json 中提取数据,但是查看源代码中 json 的数量并不容易。
  • 我在想我必须使用 selenium 实际单击季度按钮(也许?)然后我猜想在之后解析表格?我对硒没有任何经验,所以不确定这是否可行。
  • 这样会容易得多。我在 json 中挖掘了一下,但最终放弃了,有些 json 太大而无法理解。
  • 啊,好的,非常感谢您试一试!我会在这里向您更新我的进度!

标签: python beautifulsoup


【解决方案1】:

您可以在页面上隔离json,得到所有的年度和季度现金流量表。

url = 'https://finance.yahoo.com/quote/AAPL/financials?p=AAPL'
html = requests.get(url).text
soup = BeautifulSoup(html,'html.parser')

soup_script = soup.find("script",text=re.compile("root.App.main")).text
json_script = json.loads(re.search("root.App.main\s+=\s+(\{.*\})",soup_script)[1])
fin_data = json_script['context']['dispatcher']['stores']['QuoteSummaryStore']

cash_yr = fin_data['cashflowStatementHistory']['cashflowStatements']
cash_qtrs = fin_data['cashflowStatementHistoryQuarterly']['cashflowStatements']

资产负债表(balanceSheetHistory、balanceSheetHistoryQuarterly)和损益表(incomeStatementHistory、incomeStatementHistoryQuarterly)也在那里。

【讨论】:

  • 我在这里遇到错误:>>> json_script = json.loads(re.search("root.App.main\s+=\s+(\{.*\})",soup_script)[1]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: '_sre.SRE_Match' object has no attribute '__getitem__'
  • 如何将这些数据加载到 pandas 数据框?
【解决方案2】:

@用户 试试这个:

json.loads(re.search("root.App.main\s+=\s+(\{.*\})",soup_script).group(1))

@阿兰·弗里尔 试试这个:

cf_annual = {}
for yr in range(len(cash_yr)):
    cf_annual[yr] = pd.DataFrame(cash_yr[yr]).T

cf_annual

【讨论】:

    猜你喜欢
    • 2020-11-27
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多