我必须从一个复杂的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
答案 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']
希望有所帮助。