beautiful soup 在 table 中捕获空值

beautiful soup captures null values in a table

对于下面的一段HTML代码,我使用beautifulsoup来捕获table信息:

<table>
<tr>
<td><b>Code</b></td>
<td><b>Display</b></td>
</tr>
<tr>
<td>min</td>
<td>Minute</td><td/>
</tr>
<tr>
<td>happy </td>
<td>Hour</td><td/>
</tr>
<tr>
<td>daily </td>
<td>Day</td><td/>
</tr>

这是我的代码:

comments = [td.get_text()  for td in table.findAll("td")]
Comments=[data.encode('utf-8')  for data in comments] 

如您所见,此 table 有两个 headers: "code and display" 和一些行中的值。我的代码的预期输出应该是 [code, display, min, minutes, happy, Hour, daily, day]

但这是输出:

['Code', 'Display', 'min', 'Minute', '', 'happy ', 
'Hour', '', 'daily ', 'Day', '']

输出在评论中的第 5、8 和 11 个索引中有 '',但未在此 table 中定义。我想可能是因为</td><td/>。 如何更改代码以不在输出中捕获 u'' ?

抱歉,我没有仔细阅读您的问题。你是对的,问题是空的 <td/> 标签。只需将您的生成器调整为仅包含带有文本的单元格:

comments = [td.get_text() for td in table.findAll('td') if td.text]


编辑:我怀疑这是最有效的方法,但这只会包括第一行有文本或相应 td 的 tds。

ths = table.tr.find_all('td')
tds_in_row = len(table.tr.next_sibling.find_all('td'))

tds = [
    td.get_text()
    for i, td in enumerate(table.find_all('td'))
    if len(ths) > (i + 1) % tds_in_row or td.text
]