Python 当表格列中有文本时,为什么没有?
我在用漂亮的汤拉屎。我是新手 问题1: 这是表格:Python 当表格列中有文本时,为什么没有?,python,html,web-scraping,html-parsing,beautifulsoup,Python,Html,Web Scraping,Html Parsing,Beautifulsoup,我在用漂亮的汤拉屎。我是新手 问题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<
<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>
以下是输出:
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>
输出:
503 Text1 --- 2
None Text2 187 2
为什么第一列的文本是
None
而不是048
?尝试text
而不是string
。例如:
for row in soup('table')[4]('tr'):
tds = row('td')
print tds[0].text, tds[1].text
印刷品:
S.No: 1635925
Name: Alex
Dog's Name: Tiger
Cat's Name: Pussy
根据,如果元素有多个子元素,string
变为None
:
为方便起见,如果标记只有一个子节点,且该子节点
节点是字符串,子节点作为tag.string可用,如下所示
以及tag.contents[0]
问题是第二行的
td
元素不包含包含字符串内容的单个元素;它们包含其中两个。因此,string
没有明确的值,因此返回None
如果将其分解为多个部分,则可以看到:
>>> table = s('table')[4]
>>> row = table('tr')[1]
>>> col = row('td')[0]
>>> font = col('font')[0]
>>> strong = font('strong')[0]
>>> font2 = strong('font')[0]
>>> strong
<strong><font face="Arial">Name:</font><br/></strong>
>>> strong.string
>>> font2
<font face="Arial">Name:</font>
>>> font2.string
u'Name:'
值得注意的是,您试图处理的HTML非常混乱,混合了HTML3中不推荐、HTML4中删除的HTML2特性,以及在3或4中添加的特性。如果你想学习
BeautifulSoup
,那么从解析一个有效的HTML4页面开始可能会容易得多,只有在你更好地理解事物之后才能尝试学习如何处理糟糕的HTML。令人惊讶的是,.text
似乎比.string
@claws]快得多。这有点令人惊讶。我有点好奇为什么,但是…还不足以深入到源头。
S.No: 1635925
Name: Alex
Dog's Name: Tiger
Cat's Name: Pussy
>>> table = s('table')[4]
>>> row = table('tr')[1]
>>> col = row('td')[0]
>>> font = col('font')[0]
>>> strong = font('strong')[0]
>>> font2 = strong('font')[0]
>>> strong
<strong><font face="Arial">Name:</font><br/></strong>
>>> strong.string
>>> font2
<font face="Arial">Name:</font>
>>> font2.string
u'Name:'
>>> strong.text
u'Name:'
>>> font.text
u'Name:'
>>> col.text
u'Name:'