为什么当美丽的汤解析是这个标签是空的?(Why is this tag empty when par

2019-10-21 08:41发布

我解析与美丽的汤本页面:

https://au.finance.yahoo.com/q/is?s=AAPL

我试图得到27/09/2014(42123000)的总收入是在靠近顶部的语句中的第一个值。

我检查的元件在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 > (then the second tr)

但是,当我尝试使用此我得到一个空元素。

任何人可以帮助我吗?

还奖励积分谁能告诉我怎样才能学习更一般意义上提取这样的数据? 我经常需要提取的HTML文档中深埋数据,并可以似乎从来没有制定出正确的代码来获得我想要的数据。

非常感谢任何帮助表示赞赏。

Answer 1:

让我们具体而实际

我们的想法是找到Total Revenue的标签和使用得到下一个单元格的文本.next_sibling

table = soup.find("table", class_="yfnc_tabledata1")
total_revenue_label = table.find(text=re.compile(r'Total Revenue'))
print total_revenue_label.parent.parent.next_sibling.get_text(strip=True)

演示:

>>> import re
>>> import requests
>>> import bs4
>>> 
>>> page = requests.get("https://au.finance.yahoo.com/q/is?s=AAPL")
>>> soup = bs4.BeautifulSoup(page.content)
>>> 
>>> table = soup.find("table", class_="yfnc_tabledata1")
>>> total_revenue_label = table.find(text=re.compile(r'Total Revenue'))
>>> total_revenue_label.parent.parent.next_sibling.get_text(strip=True)
42,123,000


Answer 2:

没有<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>标记。



Answer 3:

要回答你一般的问题:

我建议书“挖掘社交网络”第二版。 特别是第5章 - “采矿网页”。

这本书的源代码可以在这里GitHub上 。



Answer 4:

认为有可能得到你想要的数据的更好的方法? 它已经被一些机构免费提供了数年,例如,是你想在这里的某个地方的信息?

http://www.afr.com/share_tables/



文章来源: Why is this tag empty when parsed with beautiful soup?