2016-10-03 170 views
0

我正在用刮的beautifulsoup ESPN NHL統計,試圖像美麗的湯VS ESPN

PLAYER,TEAM,GP,G,A,PTS,創造的東​​西+/-,PIM,PTS/G,SOG,PCT,GWG,G,A,G,A,

Patrick Kane,RW,CHI,82,46,60,106,17,30,1.29,287,16.0,9,17, 20,0,0

傑米鴨舌,LW,DAL,82,41,48,89,7,64,1.09,247,16.6,5,17,13 2 3

悉尼克羅斯比,C, PIT,80 ,36,49,85,19,42,1.06,248,14.5,9,10,14,0,0

到目前爲止我已經得到的東西,遍歷,並在所有的數據拉動,但它沒有逗號和頭

import urllib2 
from bs4 import BeautifulSoup 
url = "http://www.espn.com/nhl/statistics/player/_/stat/points" 
page = urllib2.urlopen(url) 

f = open('nhlstarter.txt', 'w') 

soup=BeautifulSoup(page, "html.parser") 

for tr in soup.select("#my-players-table tr[class*=player]"): 
    for ob in range(1,15): 
     player_info = tr('td')[ob].get_text(strip=True) 
     print(player_info) 
     f.write(player_info + '\n') 

f.close() 

所有一列這得到

Patrick Kane, RW 
CHI 
82 
46 
60 
106 
17 
30 
1.29 
287 
16.0 
9 
17 
20 

我怎麼柱狀數據轉換成有用的行?我想我也許可以做一些類似如下:

for tr in soup.select("#my-players-table tr[class*=player]"): 
    for ob in range(1,15): 
     player_info + str(ob) = tr('td')[ob].get_text(strip=True) 
     print(player_info + str(ob)) 
     f.write(player_info + str(ob) "," + player_info + str(ob) '\n') 

但慘遭失敗,因爲它沒有正確的循環增加變量

關於如何可以抓住的所有列的任何建議表一次或循環通過獲得一個可用的csv將不勝感激。

感謝您的幫助

+2

但什麼是你的問題嗎? – drum

+0

對不起,這不是很明確,問題和最新的嘗試追加 – ike

+0

呃...... [ESPN服務條款](https://disneytermsofuse.com/english/) - *您同意不訪問,監控或複製,或允許他人或實體使用機器人,蜘蛛,刮板或其他自動化手段或手動程序訪問,監控或複製迪士尼服務的任何元素,未經我們的明確書面許可* –

回答

0

你可以在玩家信息添加到列表最初代表行,然後加入列表成一個字符串,你把它寫在文件:

for tr in soup.select("#my-players-table tr[class*=player]"): 

    row = [] 

    for ob in range(1,15): 

     ## -- Assuming player_info has the column data 
     player_info = tr('td')[ob].get_text(strip=True) 

     row.append(player_info) 

    f.write(",".join(row) + "\n") 
+0

這是完美的!我知道有一個比我想要將每一列解析爲一個單獨項目更爲pythonic的答案。我做的唯一編輯就是改變一個段來包含年份f.write(str(yr)+「,」+「,」。join(row)+「\ n」),但這真的很棒。謝謝。 – ike