Python CSV Writer или добавить в цикл? - PullRequest
0 голосов
/ 03 июля 2018

Я делаю веб-скребок, чтобы собрать оценки для игр MLB с определенного сайта. Я в основном пытаюсь создать строку заголовка в моем выходном CSV-файле, который состоит из «Команды», а затем класса div с веб-сайта, который имеет каждый иннинг-номер из игры, за которым следуют R, H, E. Обычно один Могут просто .writerow ['Команды', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'R', ' H ',' E '], чтобы сделать эту строку, однако иногда игры идут на дополнительные возможности, так что класс div с числами / RHE изменяется динамически, поэтому я хочу, чтобы скребок распознал это и соответствующим образом скорректировал ряд.

Мой код выглядит так:

from bs4 import BeautifulSoup
import requests
import csv

with open('BoxScoreURLS.csv', newline='') as f_urls, open('IndividualBoxScoresOutput.csv', 'w', newline='') as f_output:
    csv_urls = csv.reader(f_urls)
    csv_output = csv.writer(f_output)
    #csv_output.writerow(['Teams', 'Box Scores'])


    for line in csv_urls:
        page = requests.get(line[0]).text
        soup = BeautifulSoup(page, 'html.parser')
        topline = soup.findAll('div', {'class' :'LineScoreCard__lineScoreColumnElement--1byQk LineScoreCard__header--3ZO_N'})

        for t in range(len(topline)):
            csv_output.writerow(['Teams', topline[t].text])

Это URL, который я пытаюсь очистить: (Мой код будет считываться из списка URL-адресов в отдельном файле CSV)

https://www.thescore.com/mlb/events/63853

Вот что он выводит в CSV:

Teams   1
Teams   2
Teams   3
Teams   4
Teams   5
Teams   6
Teams   7
Teams   8
Teams   9
Teams   R
Teams   H
Teams   E

А когда есть игра, которая получает дополнительные возможности, она выглядит следующим образом:

Teams   1
Teams   2
Teams   3
Teams   4
Teams   5
Teams   6
Teams   7
Teams   8
Teams   9
Teams   10
Teams   11
Teams   R
Teams   H
Teams   E

И вот что я хотел бы увидеть:

Teams   1   2   3   4   5   6   7   8   9   R   H   E

Таким образом, 'Finding All' этого класса div будет правильно собирать информацию, но сейчас это создает два столбца в CSV. Я пробовал несколько разных комбинаций row.append, но безуспешно. Как только я смогу найти решение для добавления класса div в ту же строку, где отображается «Команды», у меня будет строка заголовка, чтобы затем поставить результаты под ним.

Можно ли каким-то образом выполнить цикл, чтобы найти весь класс div, а затем добавить его, чтобы он отображался горизонтально в том же ряду, что и "Команды"? Дайте мне знать, если я смогу ответить на дополнительные вопросы.

Спасибо!

1 Ответ

0 голосов
/ 04 июля 2018

@ SergeBallesta предоставила мне идеальное решение.

writerow (['Teams'] + [topline [t] .text для t в диапазоне (len (topline))])

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...