簡體   English   中英

通過剪貼數據寫入和保存CSV文件

[英]Writing and Saving CSV File From Scraping Data

在下面的代碼中,我成功地抓取了每個MLB球隊的名單以及他們當日(4月18日)的相應獲勝概率。 我想將這些數據導出到CSV文件,但是在編寫代碼時,僅導出了一支獲勝的球隊。 有誰知道為什么會這樣嗎? 我在想需要用CSV編寫器編寫另一個for循環,但是我不確定如何使用兩個單獨的抓取數據源(團隊名稱和獲勝概率)來做到這一點!

import requests
import csv
from bs4 import BeautifulSoup

page=requests.get('https://www.fangraphs.com/livescoreboard.aspx?date=2018- 
04-18')
soup=BeautifulSoup(page.text, 'html.parser')


[link.decompose() for link in soup.find_all(class_='lineup')]

f=csv.writer(open('Win_Probability.csv','w'))
f.writerow(['Teams','Win_Prob'])

team_name_list=soup.find(class_='RadAjaxPanel')
team_name_list_items=team_name_list.find_all('a')


for team_name in team_name_list_items:
  teams=team_name.contents[0]
  print(teams)

winprob_list=soup.find(class_='RadAjaxPanel')
winprob_list_items=winprob_list.find_all('td',attrs={'style':'border:1px 
solid black;'})

for winprob in winprob_list_items:
  winprobperc=winprob.contents[0]
  print(winprobperc)


f.writerow([teams,winprobperc])
f.writerow([teams,winprobperc])

不在循環中。 因此,這段代碼只運行一次,只需要編寫一個團隊就可以贏。 您需要遍歷所有團隊並為每個團隊寫行。

我認為當您遍歷teamswinprobperc變量時,它們會覆蓋它們。

您可以嘗試像這樣使用列表理解:

teams = [team.contents[0] for team in team_name_list_items]
winprobperc = [prob.contents[0] for prob in winprob_list_items]

這將生成每個列表中所有項目的列表,從元素中正確獲取所需的確切字符串。

假設這些數組的長度相等,則可以將它們作為行寫入csv:

for i in xrange(len(teams)):
    f.writerow([teams[i], winprobperc[i]])

根據您的情況,在將它們添加為行之前先生成完整的數據表可能會有所幫助。 為此,您還可以基於一個數組的長度生成一個包含所有行的二維數組:

data = [[teams[i], winprobperc[i]] for i in xrange(len(teams))]
f.writerows(data)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM