Python и Web Scraping - проблемы с выходом CSV - PullRequest
0 голосов
/ 21 декабря 2018

В настоящее время я пытаюсь запустить скрипт 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-файле

screen shot

Спасибо

1 Ответ

0 голосов
/ 21 декабря 2018
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):
        row = []
        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('a',{'class':'Nowrap name F-link'})
        player_points=soup.find_all('a',{'class':'pps Fw-b has-stat-note '})

        for pn, pp in zip(player_name, player_points):
                player_name = pn.contents[0]
                player_points = pp.contents[0]
                f.writerow([player_name, player_points])

    Team_Stats.flush()
    Team_Stats.close()
    print("Process Complete")

1) Неправильные классы для очистки

...