Я делаю веб-скребок, чтобы собрать оценки для игр 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, а затем добавить его, чтобы он отображался горизонтально в том же ряду, что и "Команды"? Дайте мне знать, если я смогу ответить на дополнительные вопросы.
Спасибо!