我正在用漂亮的汤解析这个页面:
https://au.finance.yahoo.com/q/is?s=AAPL
我正在尝试获取 2014 年 9 月 27 日的总收入 (42,123,000),这是报表顶部附近的第一个值之一。
我检查了 chrome 工具中的元素,发现该值位于类名称为 yfnc_tabledata1
的表中。
我的python代码如下:
import requests
import bs4
#get webpage
page = requests.get("https://au.finance.yahoo.com/q/is?s=AAPL")
#put into beautiful soup
soup = bs4.BeautifulSoup(page.content)
#select tag
tag = soup.select("table.yfnc_tabledata1")
到目前为止一切顺利,它获取了包含所需数据的表,但这是我卡住的地方。
通向我想要的数据的链条如下:
tag > tbody > tr > td > table > tbody >(然后是第二个tr)
但是当我尝试使用它时,我得到一个空元素。
谁能帮我解决这个问题?
还有加分,谁能告诉我如何从更一般的意义上学习提取这样的数据?我经常需要提取深埋在 HTML 文档中的数据,但似乎永远无法找出正确的代码来获取我想要的数据。
非常感谢任何帮助。
最佳答案
没有<tbody>
HTML 中的标记。
如果您使用浏览器(例如使用 Chrome 开发人员工具)查看该页面,它看起来像是一个 <tbody>
。标签,但这是 Chrome 插入到 DOM 中的虚假标签。
尝试在您的搜索链中省略这两个标签。我确定第一个不存在(尽管 HTML 很难阅读)我很确定第二个也不存在。
更新:这是以您感兴趣的表格开头的 HTML:
<TABLE class="yfnc_tabledata1" width="100%" cellpadding="0" cellspacing="0" border="0">
<TR>
<TD>
<TABLE width="100%" cellpadding="2" ...>
<TR class="yfnc_modtitle1" style="border-top:none;">
<td colspan="2" style="border-top:2px solid #000;">
<small><span class="yfi-module-title">Period Ending</span></small>
</td>
<th scope="col" style="border-top:2px ...">27/09/2014</th>
<th scope="col" style="border-top:2px ...">28/06/2014</th>
...
所以没有<tbody>
标签。
关于python - 为什么用美汤解析这个标签是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27327998/