2014-01-11 154 views
4

我使用BeautifulSoup来分析html。到目前为止,我有以下代码:BeautifulSoup获取特定列的所有值

url = "http://routerpasswords.com" 
data = {"findpass":"1", "router":"Belkin", "findpassword":"Find Password"} 
post_data = urllib.urlencode(data) 
req = urllib2.urlopen(url, post_data) 
html_str = req.read() 
parser = new BeautifulSoup(html_str) 
table = parser.find("table") 

有没有办法让column下的所有CEL的名单? 下面是一个例子: 如果我有这个表:

<table cellpadding="0" cellspacing="0" width="100%"> 
<thead> 
<tr> 
<th>Manufacturer</th> 
<th>Model</th> 
<th width="80">Protocol</th> 
<th width="80">Username</th> 
<th width="80">Password</th> 
</tr> 
</thead> 
<tbody> 
<tr> 
<td><b>BELKIN</b></td> 
<td>F5D6130</td> 
<td>SNMP</td> 
<td>(none)</td> 
<td>MiniAP</td> 
</tr> 
<tr> 
<td><b>BELKIN</b></td> 
<td>F5D7150<i> Rev. FB</i></td> 
<td>MULTI</td> 
<td>n/a</td> 
<td>admin</td> 
</tr> 
<tr> 
<td><b>BELKIN</b></td> 
<td>F5D8233-4</td> 
<td>HTTP</td> 
<td>(blank)</td> 
<td>(blank)</td> 
</tr> 
<tr> 
<td><b>BELKIN</b></td> 
<td>F5D7231</td> 
<td>HTTP</td> 
<td>admin</td> 
<td>(blank)</td> 
</tr> 
</tbody> 
</table> 

我怎么能得到所有在Username列中的项目的列表?我宁愿他们也是字符串。

+0

请问你的HTML看起来像? – alvas

+0

一秒钟我会发布它。 – 735Tesla

+0

对不起,我以前可能不太清楚。我编辑了我的问题。 – 735Tesla

回答

2
from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(open("file.html",'r').read()) 
cols = [header.string for header in soup.find('thead').findAll('th')] 
col_idx = cols.index('Username') 
col_values = [td[col_idx].string 
       for td in [tr.findAll('td') 
         for tr in soup.find('tbody').findAll('tr')]] 
print(col_values) 

结果:

[U '(无)',u'n/A”,U '(空)',u'admin']

相关问题