Python 为什么这个标签在用beautiful soup解析时是空的?

Python 为什么这个标签在用beautiful soup解析时是空的?,python,html,beautifulsoup,html-parsing,Python,Html,Beautifulsoup,Html Parsing,我正在用beautiful soup解析此页面: 我正在尝试获取2014年9月27日的总收入(42123000),这是报表顶部附近的第一个值之一 我检查了chrome工具中的元素,发现该值位于一个类名为yfnc\u tabledata1的表中 我的python代码如下所示: import requests import bs4 #get webpage page = requests.get("https://au.finance.yahoo.com/q/is?s=AAPL") #put

我正在用beautiful soup解析此页面:

我正在尝试获取2014年9月27日的总收入(42123000),这是报表顶部附近的第一个值之一

我检查了chrome工具中的元素,发现该值位于一个类名为
yfnc\u 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")
到目前为止还不错,这抓住了表中所需的数据,但这就是我被卡住的地方

指向我想要的数据的链如下所示:

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文档深处的数据,而且似乎永远无法编写出正确的代码来获取我想要的数据

非常感谢您的帮助。

HTML中没有
标记

如果您使用浏览器(例如使用Chrome developer工具)查看页面,它看起来像是有一个
标记,但这是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>
          ...

期末
27/09/2014
28/06/2014
...
因此没有
标记。

HTML中没有
标记

如果您使用浏览器(例如使用Chrome developer工具)查看页面,它看起来像是有一个
标记,但这是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>
          ...

期末
27/09/2014
28/06/2014
...

因此,没有标签。

要回答您的一般问题:

我建议出版《挖掘社交网络》第二版。特别是第5章“挖掘网页”


本书的源代码可用。

要回答您的一般问题:

我建议出版《挖掘社交网络》第二版。特别是第5章“挖掘网页”

这本书的源代码已经提供。

我认为可能有更好的方法来获取您想要的数据? 许多机构多年来一直免费提供这些信息,例如,您想要的信息是否在这里的某个地方

我认为可能有更好的方法获取您想要的数据? 许多机构多年来一直免费提供这些信息,例如,您想要的信息是否在这里的某个地方

让我们具体一点,切实一点

这样做的目的是找到
总收入
标签,并使用以下方法获取下一个单元格的文本:

演示:

让我们具体一点,切实一点

这样做的目的是找到
总收入
标签,并使用以下方法获取下一个单元格的文本:

演示:


哦,你怎么发现它是假的标签?该死,为什么chrome开发工具会这么做?这真的把我搞砸了。为了统一起见,Chrome在DOM中创建了一个tbody元素,尽管HTML中没有指定。您在Chrome开发工具中看到的是在内存中创建的。这只是你从经验中学到的东西。这就是为什么我总是先在shell上使用
curl
获取,以便查看服务器返回的真正内容…哦,你怎么发现它是一个伪标记?该死,chrome开发工具为什么要这么做?这真的把我搞砸了。为了统一起见,Chrome在DOM中创建了一个tbody元素,尽管HTML中没有指定。您在Chrome开发工具中看到的是在内存中创建的。这正是你从经验中学到的东西。这就是为什么我总是先在shell上使用
curl
进行获取,以便查看服务器返回的真正内容…谢谢我将其添加到书签中。不幸的是,它似乎只涵盖了在澳大利亚证券交易所上市的股票。我相信其他证券交易所也有类似的数据来源。(我不知道新西兰等)。等等。。(我不知道它们是免费的还是不免费的或者有什么好处)。ymmv。有很多。谢谢你,我已经把它放进书签了。不幸的是,它似乎只涵盖了在澳大利亚证券交易所上市的股票。我相信其他证券交易所也有类似的数据来源。(我不知道新西兰等)。等等。。(我不知道它们是免费的还是不免费的或者有什么好处)。ymmv。有很多。有没有一种简单的方法可以将这个数字跳到下一个,也就是说,我可以通过
打印rev.parent.parent.next\u sibling.next\u sibling.get\u text(strip=True)
来做到这一点,但这似乎很荒谬。要获取上一季度数据(37432000)@Kane-yup,请使用method.@Kane换句话说,
result=[item.get\u text(strip=True)作为total\u-revenue\u-label.parent.find\u next\u-sides()]
。是否有一种简单的方法可以将该数字跳到下一个数字,即我可以通过打印rev.parent.parent.next\u sibling.next\u sibling.get\u text(strip=True)来实现这一点,但这似乎很荒谬。若要获取上一季度数据(37432000)@Kane-yup,请使用method.@Kane换句话说,
result=[item.get\u text(strip=True)for item in total\u revenue\u label.parent.parent.find\u next\u sibbins()]