使用Python评估html表中的图像

时间:2015-03-11 01:04:27

标签: python html beautifulsoup html-parsing

我正在尝试解析表并将其保存到csv文件中。但是,有些单元格是复选标记的图像(* .gif),我不确定如何在导出到csv时进行评估。

这里有一些HTML代码:

<BODY>
<TABLE>
<TH>
<H3>    <BR>TABLE 1    </H3> 
</TH>
<TR>
<TD>Data 1    </TD>
<TD>Data 2    </TD>
</TR>
<TR>
<TD>example.gif    </TD>
<TD>example.gif   </TD>
</TR>
</TABLE>
</BODY>

在实际表中,包含.gif的表行的html是

<td align="center" width="55px">
<!--
-->
<img align="top" height="13" hspace="2" src="http://explorer.natureserve.org/images/checkmark.gif" vspace="2" width="14"/>
<!--
-->
</td>

我到目前为止的代码是:

table = soup.find('table')
rows = []

for row in table.find_all('tr'):
    rows.append([val.text.encode('utf8') for val in row.find_all('td')])

在示例提供中,我已经将代码评估为:

[
    'Spartina patens', 
    'G5', 
    'Graminoid',
    'Herb (field)', 
    '\n\r\n                        \xc2\xa0\r\n\n', 
    '\n\n\n\n', 
    '\n\r\n                       \xc2\xa0\r\n\n', 
    '\xc2\xa0', 
    '\xc2\xa0'
 ]

我猜测如果单元格不包含&#39; \ xc2 \ x&#39;那么我可以评估为1,但不知道如何做到这一点。任何帮助将不胜感激。

我想做的是,如果图像存在,则在适当的行和列中放置1,否则为0。

1 个答案:

答案 0 :(得分:1)

检查循环中每个img是否td

for row in table.find_all('tr'):
    rows.append([1 if val.img else 0 for val in row.find_all('td')])

或者有点棘手:

[int(val.img is not None) for val in row.find_all('td')]

其中val.imgval.find('img')的快捷方式。