【发布时间】:2019-05-22 00:41:41
【问题描述】:
我目前正在尝试运行 Python 脚本以从 Yahoo Fantasy Football 网站提取一些数据。我已经能够成功地抓取数据,但是遇到了 CSV 输出的问题。所有数据都被放入一列而不是多个不同的列。以下是我正在使用的代码:
import re, time, csv
import requests
from bs4 import BeautifulSoup
#Variables
League_ID = 1459285
Week_Number = 1
Start_Week = 1
End_Week = 13
Team_Name = "Test"
Outfile = 'Team_Stats.csv'
Fields = ['Player Name', 'Player Points', 'Player Team', 'Week']
with open('Team_Stats.csv','w') as Team_Stats:
f = csv.writer(Team_Stats, Fields, delimiter=',', lineterminator='\n')
f.writerow(Fields)
for Week_Number in range(Start_Week, End_Week + 1):
url = requests.get("https://football.fantasysports.yahoo.com/f1/" + str(League_ID) + "/2/team?&week=" + str(Week_Number))
soup = BeautifulSoup(url.text, "html.parser")
#print("Player Stats for " + Team_Name + " for Week " + str(Week_Number))
player_name=soup.find_all('div',{'class':'ysf-player-name'})
player_points=soup.find_all('a',{'class':'pps Fw-b has-stat-note '})
for player_name in player_name:
player_name = player_name.contents[0]
#print(div.text)
f.writerow(player_name)
for player_points in player_points:
#print(div.text)
Week_Number += 1
f.writerow(player_points)
Team_Stats.flush()
Team_Stats.close()
print("Process Complete")
我还想在代码中留出一些空间来添加更多“For 循环”,因为我还有其他要收集的数据。
如果有人可以提出更好的方法来构建我的代码,请随时提供帮助!
这是我在 csv 文件中得到的示例输出
谢谢
【问题讨论】:
-
您似乎已经知道
writerow将列表作为参数。您有 2 个for循环串行写入文件。在嵌套列表中收集结果并然后写入一行。
标签: python web web-scraping screen-scraping