打印最后在美丽的汤

时间:2014-03-28 02:05:22

标签: python beautifulsoup html-table html-parsing

我必须从一个复杂的HTML文档中读取,其中一个表没有ID,并且每个表都有未定义的tr标签数。我想在最后<tr>标签的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

2 个答案:

答案 0 :(得分:2)

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

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

然后,查找该<td>元素中的所有<tr>个标记:

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

答案 1 :(得分:1)

查找表格最后td元素内的所有tr元素:

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']

希望有所帮助。