Красивый суп несколько находокВсе классы - PullRequest
0 голосов
/ 09 апреля 2020

Я работаю над проектом, чтобы получить базу данных о том, сколько собак было отозвано до гонки. Мне нужно очистить данные, чтобы затем записать в CSV. Моя проблема в том, что данные, которые я собираю, содержат изображение вместо текста (между PL C и Greayhound на веб-странице). Это означает, что я запускаю 2 разных цикла, чтобы получить нужную мне информацию, а затем трудно объединить ее в правильном месте.

Вот код.

import requests
import csv
URL = "https://www.thedogs.com.au/Racing/MeetResults.aspx?meetId=255268"
page = requests.get(URL)
from bs4 import BeautifulSoup
soup = BeautifulSoup(page.text, 'html.parser')

#soup.findAll('td', class_='ResultsCenteredCellContents'):

odds=[]
dog = soup.findAll('img' )
for a in dog:

    odds.append(a['src'].strip())


odds1=[]
for b in soup.findAll('td'):
    odds1.append(b.text.strip())

Так что, если бы я мог запустить весь код, который мне нужен, в одном l oop, который можно написать в CSV, и это было бы здорово.

1 Ответ

0 голосов
/ 09 апреля 2020

Да, они отображаются на изображениях, но если вы заметили, что изображения названы в соответствии с номером, который он представляет src="../Images/BoxNumber4.gif, это изображение представляет 4

import requests , csv
from bs4 import BeautifulSoup

def SaveAsCsv(list_of_rows,file_name):
    try:
        print('\nSaving CSV Result')
        with open(file_name, 'a',  newline='', encoding='utf-8') as outfile:
            writer = csv.writer(outfile)
            writer.writerow(list_of_rows)
            print("rsults saved successully")
    except PermissionError:
        print(f"Please make sure {file_name} is closed \n")

URL = "https://www.thedogs.com.au/Racing/MeetResults.aspx?meetId=255268"
page = requests.get(URL, headers={'User-Agent': 'Mozilla/5.0'})

soup = BeautifulSoup(page.text, 'html.parser')
tables = soup.findAll('table',{'id':"gvRaceResults"}) # getting all 11 tabs
for  table_index , table in enumerate(tables,1): 
    print(f'Getting tab {table_index} out of {len(tables)} ')
    rows = table.findAll('tr')
    header_row = [row.text.strip() for row in rows[0].findAll('th')]
    SaveAsCsv(header_row , 'thedogs.csv')
    for index , row in enumerate(rows[1:],1):
            print(f'Getting row {index} out of {len(rows[1:])} ')
            row_list = []
            colms = row.findAll('td')
            for col in colms :
                    if  'ResultsContentsNumber' in col.attrs['class']:
                            image_src = col.find('img').get('src') #src="../Images/BoxNumber4.gif">
                            image_num = image_src.split('BoxNumber')[1].split('.')[0] # 4
                            row_list.append(image_num)
                            continue
                    row_list.append(col.text.strip())
            SaveAsCsv(row_list , 'thedogs.csv')

Вывод:

enter image description here

...