【问题标题】:How to parse data between <td colspan="2"> and </td>如何解析 <td colspan="2"> 和 </td> 之间的数据
【发布时间】:2017-12-06 06:17:01
【问题描述】:

我想解析&lt;th&gt;Number of samples&lt;/th&gt;&lt;td colspan="2"&gt;...&lt;/td&gt;之间的信息。例如解析下面的html后会返回64。

...
<tr class="border"> 
    <th>Average FPKM</th>
    <td colspan="2">0.8</td>
</tr>
<tr class="border">
    <th>Number of samples</th>
    <td colspan="2">64</td>
</tr>   
...

这里如何只返回64?

谢谢

【问题讨论】:

  • 你好,我想他想用一个python库beautifulsoup来获取这个值。这是美汤的文档:crummy.com/software/BeautifulSoup/bs4/doc
  • 请把代码贴出来,比如div和table,这样我们就可以在上面使用javascript了。
  • 请发布您自己的解决方案并将其标记为答案,以便对其他人有用。
  • 请注意,所有答案都返回 64 作为字符串而不是整数。使用parseInt 函数将字符串转换为整数。
  • 我只是使用 'Number = soup.find('th',text = "Number of samples").find_next_sibling("td").text' 找出字符串 64 然后转换为稍后解释

标签: javascript html beautifulsoup


【解决方案1】:

首先给表格单元格一个id,在这个例子中我选择tableCell

使用纯 JavaScript 而不使用 jQuery,这段代码完全符合您的要求

var value = document.getElementById("tableCell").innerHTML

使用 jQuery 你可以做到这一点:

var value = $("#tableCell").html()

【讨论】:

  • 太棒了!如果你能把我的帖子标记为答案就好了
【解决方案2】:

获取 th,然后是 parent,然后找到 td。

$(document).ready(function() {
  var thGet=$('table').find('th');
  $.each(thGet, function (i, obj) {
    var text = $(obj).text();
    if(text == 'Number of samples' && $(obj).parent().find('td').attr('colspan') == '2')
    {
        alert($(obj).parent().find('td').html());
    }
  });
});

非 jQuery,需要 Javascript 支持

var x = document.querySelectorAll('th');
for (var i = 0; i < x.length; i++) {
    if(x[i].innerHTML == 'Number of samples')
    {
        var c = x[i].parentNode.childNodes;
      var j;
      for (j = 0; j < c.length; j++) {
          if(c[j].tagName == 'TD' && c[j].colSpan == '2')
          {
            console.log(c[j].innerHTML);
          }
      }
    }
};

【讨论】:

  • 注意:此解决方案需要 jQuery
【解决方案3】:

您可以使用纯 Javascript 遵循此方法。我假设表 tr 的结构不会改变。

  1. 全选tr.border

  2. 迭代它们并非常简单地找到哪个具有Number of samples。然后得到你想要的。

window.onload = () => {
    let tr = document.querySelectorAll('tr.border')
    tr.forEach((elm) => {
        if(elm.innerText.indexOf('Number of samples') == 0)
            console.log(elm.querySelector('td').innerText)
    })
};
<table>
<tr class="border"> 
    <th>Average FPKM</th>
    <td colspan="2">0.8</td>
</tr>
<tr class="border">
    <th>Number of samples</th>
    <td colspan="2">64</td>
</tr>   
</table>

希望对你有帮助

【讨论】:

    【解决方案4】:

    假设您需要表格最后一行的最后一个单元格并且您正在使用 jQuery。

    let result = $('table tr:last-child td:last-child').text();
    

    Here is example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-30
      • 2020-11-13
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      相关资源
      最近更新 更多