2015-11-30 63 views
1

我想抓住桌子上的每個特定統計。我已經把它縮小到了一個團隊的每一列,只需要抓住實際的數字!我的代碼是:試圖抓住使用BeautifulSoup NFL統計表的某些部分

import requests 
from bs4 import BeautifulSoup 
url = 'http://espn.go.com/nfl/statistics/team/_/stat/defense/position/defense' 
response = requests.get(url) 
html = response.content 
soup = BeautifulSoup(html) 
HoustonDefense = soup.find('tr', class_="oddrow team-28-34") 
print (HoustonDefense.prettify()) 

這將具有打印成本的HoustonDefense柱:

<tr align="right" class="oddrow team-28-34"> 
    <td align="left"> 
    1 
    </td> 
    <td align="left"> 
    <a href="http://espn.go.com/nfl/team/_/name/hou/houston-texans"> 
    Houston 
    </a> 
    </td> 
    <td> 
    539 
    </td> 
    <td> 
    272 
    </td> 
    <td class="sortcell"> 
    811 
    </td> 
    <td> 
    22.0 
    </td> 
    <td> 
    136 
    </td> 
    <td> 
    65 
    </td> 
    <td> 
    9 
    </td> 
    <td> 
    102 
    </td> 
    <td> 
    38 
    </td> 
    <td> 
    1 
    </td> 
    <td> 
    17 
    </td> 
    <td> 
    5 
    </td> 
    <td> 
    2 
    </td> 
</tr> 

我想要抓住每個<td></td>之間的那些號碼,並將其分配給一個變量。任何幫助將是驚人的!謝謝!

回答

1

使用find_all()找到tr內的所有td元素,讓每一個td發現除了前兩個單元格(排名和球隊名稱本身)的文本:

[td.text for td in HoustonDefense.find_all("td")[2:]] 

打印:

[u'539', u'272', u'811', u'22.0', u'136', u'65', u'9', u'102', u'38', u'1', u'17', u'5', u'2']