python-3.x - 如何在 html 表中抓取?
问题描述
我想从雅虎财经中获取文本数据。对于任何代码,我希望能够抓取总收入:
有关前面的示例,请参见欧莱雅页面。相关的目标代码是:
<div class="rw-expnded" data-reactid="44" data-test="fin-row">
<div class="D(tbr) fi-row Bgc($hoverBgColor):h" data-reactid="45">
<div class="D(tbc) Ta(start) Pend(15px)--mv2 Pend(10px) Bxz(bb) Py(8px) Bdends(s) Bdbs(s) Bdstarts(s) Bdstartw(1px) Bdbw(1px) Bdendw(1px) Bdc($seperatorColor) Pos(st) Start(0) Bgc($lv2BgColor) fi-row:h_Bgc($hoverBgColor) Pstart(15px)--mv2 Pstart(10px)" data-reactid="46">
<div class="D(ib) Va(m) Ell Mt(-3px) W(215px)--mv2 W(200px)" data-reactid="47" title="Total Revenue"><span class="Va(m)" data-reactid="48">Total Revenue</span></div>
<div class="W(3px) Pos(a) Start(100%) T(0) H(100%) Bg($pfColumnFakeShadowGradient) Pe(n) Pend(5px)" data-reactid="49"></div>
</div>
<div class="D(tbc) Ta(c) Pstart(6px) Pend(4px) Bxz(bb) Py(8px) BdB Bdc($seperatorColor) Miw(100px) Miw(156px)--pnclg Bgc($lv1BgColor) fi-row:h_Bgc($hoverBgColor)" data-reactid="50" data-test="fin-col"><span data-reactid="51">29,873,600</span></div>
<div class="D(tbc) Ta(c) Pstart(6px) Pend(4px) Bxz(bb) Py(8px) BdB Bdc($seperatorColor) Miw(100px) Miw(156px)--pnclg" data-reactid="52" data-test="fin-col"><span data-reactid="53">29,873,600</span></div>
<div class="D(tbc) Ta(c) Pstart(6px) Pend(4px) Bxz(bb) Py(8px) BdB Bdc($seperatorColor) Miw(100px) Miw(156px)--pnclg Bgc($lv1BgColor) fi-row:h_Bgc($hoverBgColor)" data-reactid="54" data-test="fin-col"><span data-reactid="55">26,937,400</span></div>
<div class="D(tbc) Ta(c) Pstart(6px) Pend(4px) Bxz(bb) Py(8px) BdB Bdc($seperatorColor) Miw(100px) Miw(156px)--pnclg" data-reactid="56" data-test="fin-col"><span data-reactid="57">26,023,700</span></div>
<div class="D(tbc) Ta(c) Pstart(6px) Pend(4px) Bxz(bb) Py(8px) BdB Bdc($seperatorColor) Miw(100px) Miw(156px)--pnclg Pend(10px) Bgc($lv1BgColor) fi-row:h_Bgc($hoverBgColor)" data-reactid="58" data-test="fin-col"><span data-reactid="59">25,837,100</span></div>
</div>
<div class="D(b)" data-reactid="60"></div>
</div>
为了尝试获得总收入,我这样做了:
#This will not run on online IDE
import requests
from bs4 import BeautifulSoup
ticker = 'OR.SA'
URL = "https://finance.yahoo.com/quote/OR.PA/financials?p={ticker}"
r = requests.get(URL)
soup = BeautifulSoup(r.content, 'html5lib')
然后我尝试在总收入之后获取该项目:
soup.find('span', string='Total Revenue').find_next().text
但它返回''
如果有更简单的方法,例如是否存在 API,请随时告诉我。我尝试了 yfinance,但它不适用于非美国股票的财务报表。
解决方案
你只是得到下一个div
。你必须得到下一个span
。find_next
将标签的名称作为参数。
用这个:
soup.find('span', string='Total Revenue').find_next('span').text
代码
import requests
from bs4 import BeautifulSoup
ticker = 'OR.SA'
URL = "https://finance.yahoo.com/quote/OR.PA/financials?p={ticker}"
r = requests.get(URL)
soup = BeautifulSoup(r.content, 'html5lib')
# soup.find('span', string='Total Revenue').find_next()
# <div class="W(3px) ...data-reactid="49"></div>
print(soup.find('span', string='Total Revenue').find_next('span').text)
输出
29,873,600
推荐阅读
- tensorflow - “您的 CPU 支持未编译此 TensorFlow 二进制文件以使用的指令:AVX2”错误
- ag-grid-ng2 - 单击按钮时突出显示 ag 网格中的行
- oracle - Oracle ORA-2291 未找到父键
- java - 获取.xls工作表中单元格的文本和背景颜色为java中的十六进制
- asp.net-mvc - ASP.NET MVC 分页在 ViewModel 上不起作用
- bash - 具有多个条件的 sed 或 awk
- java - 如何使用 poi 根据数据值有条件地设置条形图的颜色
- angular - 在“ng2-smart-table”中编辑或输入数据时验证
- blockchain - Plasma MVP 参数失败/错误
- c# - 带有实体框架错误的 C# Windows 窗体应用程序:System.Data.Entity.Core.ProviderIncompatibleException