【问题标题】:Print last <td> in beautiful soup在美丽的汤中打印最后一个 <td>
【发布时间】:2014-05-07 07:49:39
【问题描述】:

我必须从一个复杂的 HTML 文档中读取,其中一个表没有 ID,并且每个表都有未定义数量的 tr 标签。我想在最后一个 &lt;tr&gt; 标签的 td 中打印文本。在解析树时,我找不到任何打印最后一个孩子的东西。

我要打印 4,4.1,4.2

<table border=0 bgcolor=#000000 cellspacing=1 width="100%"
<tr bgcolor="#FFFFFF">
    <td>1</td>
    <td>1.1</td>
    <td>1.2</td>
</tr>
<tr bgcolor="#FFFFFF">
    <td>2</td>
    <td>2.1</td>
    <td>2.2</td>
</tr>
<tr bgcolor="#FFFFFF">
    <td>3</td>
    <td>3.1</td>
    <td>3.2</td>
</tr>
<tr bgcolor="#FFFFFF">
    <td>4</td>
    <td>4.1</td>
    <td>4.2</td>
</tr>

这是我目前所拥有的:

from bs4 import BeautifulSoup
import urllib
sock = urllib.urlopen("someurl")

htmlread = sock.read()
soup = BeautifulSoup(htmlread)


tabledata = soup.find("table", {"border":"0", "bgcolor":"#000000", "cellspacing":"1", "width":"100%"})
other = tabledata.findAll("tr", {"bgcolor":"#FFFFFF"})

print other

【问题讨论】:

    标签: python beautifulsoup html-table html-parsing


    【解决方案1】:

    听起来您正试图找到最后一个 tr 元素并在其中打印所有 td 文本值。首先,要找到最后一个tr,可以选择所有tr元素,然后使用-1找到最后一个:

    >>> last_tr = soup('tr')[-1]
    

    然后,在该&lt;tr&gt; 元素中查找所有&lt;td&gt; 标签:

    >>> [td.text for td in last_tr('td')]
    [u'4', u'4.1', u'4.2']
    

    【讨论】:

    • 嗨。这是解决提问者问题的方法吗?如果是这样-您能否添加更多关于如何解决他们的问题的信息?不要忘记总 n00bs 会用谷歌搜索并可能找到这个问题/答案......如果它不是一个解决方案 - 它可能应该是一个评论:)
    • 我通常先发布代码,然后再充实。我被拉走了 :) 更新了。
    • :) 它进入了“低质量帖子”审核队列;)
    【解决方案2】:

    在表格的最后一个tr 元素中查找所有td 元素:

    table = soup.find("table", {"border":"0", "bgcolor":"#000000", "cellspacing":"1", "width":"100%"})
    print [td.text for td in table.find_all('tr')[-1].find_all('td')]
    

    演示:

    >>> from bs4 import BeautifulSoup
    >>> data = """
    ... <table border=0 bgcolor=#000000 cellspacing=1 width="100%"
    ... <tr bgcolor="#FFFFFF">
    ...     <td>1</td>
    ...     <td>1.1</td>
    ...     <td>1.2</td>
    ... </tr>
    ... <tr bgcolor="#FFFFFF">
    ...     <td>2</td>
    ...     <td>2.1</td>
    ...     <td>2.2</td>
    ... </tr>
    ... <tr bgcolor="#FFFFFF">
    ...     <td>3</td>
    ...     <td>3.1</td>
    ...     <td>3.2</td>
    ... </tr>
    ... <tr bgcolor="#FFFFFF">
    ...     <td>4</td>
    ...     <td>4.1</td>
    ...     <td>4.2</td>
    ... </tr>
    ... """
    >>> soup = BeautifulSoup(data)
    >>> table = soup.find("table", {"border":"0", "bgcolor":"#000000", "cellspacing":"1", "width":"100%"})
    >>> print [td.text for td in table.find_all('tr')[-1].find_all('td')]
    [u'4', u'4.1', u'4.2']
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      相关资源
      最近更新 更多