python - 为什么用美汤解析这个标签是空的?

标签 python html beautifulsoup html-parsing

我正在用漂亮的汤解析这个页面:

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/

相关文章:

python - Dialogflow 天气 webhook 连接错误

python - 如何在 python 中生成 RGB 立方体矩阵?

html - Angular 有效地使用 trackBy 和 ngFor

python - 如何抓取来自下拉列表的数据?

Python,遍历 url 列表来解析 html 内容

python - 根据 pandas 数据框中的条件为组创建列

Python 初学者 - 如何将回归线与点击等同并以图形方式显示?

javascript - 在 Jquery $().append(); 中插入 javascript 代码;

javascript - 了解 HTML 中文本行的宽度以用于自动换行和其他应用程序

python - 用美汤写xml