我正在使用美麗的湯做webscraping。我是新手。當表格列中有文字時,爲什麼我會得到None?
問題1: 這裏是表:
<table width="75%" align=center>
<tr>
<td><STRONG><font face="Arial" size=2>S.No:</font></STRONG></td>
<td><font face="Arial" size=2> 1635925</font></td>
</tr>
<tr>
<td><FONT size=2><STRONG><font face="Arial">Name:</font><br></STRONG></FONT></td>
<td><font face="Arial" size=2> <b>Alex</b></font></td>
</tr>
<tr>
<td><STRONG><font face="Arial" size=2>Dog's Name:</font></STRONG></td>
<td><font face="Arial" size=2> Tiger</font></td>
</tr>
<tr>
<td><STRONG><font face="Arial" size=2 >Cat's Name:</font></STRONG></td>
<td><font face="Arial" size=2>Pussy</font></td>
</tr>
</table>
在這裏被碼參照上述表中:
for row in soup('table')[4]('tr'):
tds = row('td')
print tds[0].string, tds[1].string
在這裏被輸出:
S.No: 1635925
None None
Dog's Name: Tiger
Cat's Name: Pussy
問題是第2行,爲什麼兩列都打印了None
?
問題2:類似的問題,如上
<tr bgcolor="#ffffff">
<td align="middle"><font face="Arial" size=2>503</font></td>
<td align="left"><font face="Arial" size=2>Text1</font></td>
<td align="left"><font face="Arial" size=2>---</font></td>
<td align="middle"><font face="Arial" size=2>2</font></td>
</tr>
<tr bgcolor="#e6e6fa">
<td colspan=4><font face="Arial" size=2> some random text</font></td>
</tr>
<tr >
<td align="middle"><font face="Arial" size=2>048</font> </td>
<td align="left"><font face="Arial" size=2>Text 2</font></td>
<td align="left"><font face="Arial" size=2>187 </font></td>
<td align="middle"><font face="Arial" size=2>2</font></td>
</tr>
我的代碼:
for row in soup('table')[5]('tr'):
tds = row('td');
if len(tds) == 4:
print tds[0].string, tds[1].string, tds[2].string, tds[3].string
輸出:
503 Text1 --- 2
None Text2 187 2
爲什麼是第一列的文本None
,而不是048
?
值得注意的是,您正在嘗試處理的HTML是一團糟,將HTML3中棄用HTML2的HTML2功能與3或4中添加的功能混合在一起。如果你正在學習'BeautifulSoup',那麼從解析一個有效的HTML4頁面開始,可能會容易得多,並且只有在你理解了更好的東西后才試圖學習如何處理可怕的HTML。 – abarnert