Я скачиваю по этой ссылке: https: //www.pro-football- reference.com/boxscores/201809060phi.htm

Мой код:

import requests
from bs4 import BeautifulSoup

# assign url
url = 'https://www.pro-football-reference.com/boxscores/201809060phi.htm'

#parse and format url
r = requests.get(url).text
res = r.replace("<!--","").replace("-->","")
soup = BeautifulSoup(res, 'lxml')


#get tables
tables = soup.findAll("div",{"class":"table_outer_container"})

#get offense_stats table
offense_table = tables[5]
rows = offense_table.tbody.findAll("tr")

#here i want to iterate through the player rows and pull their stats

player = test_row.find("th",{"data-stat":"player"}).text
carries = test_row.find("td",{"data-stat":"rush_att"}).text
rush_yds = test_row.find("td",{"data-stat":"rush_yds"}).text
rush_tds = test_row.find("td",{"data-stat":"rush_td"}).text
targets = test_row.find("td",{"data-stat":"targets"}).text
recs = test_row.find("td",{"data-stat":"rec"}).text
rec_yds= test_row.find("td",{"data-stat":"rec_yds"}).text
rec_tds= test_row.find("td",{"data-stat":"rec_td"}).text

Таблица на странице, которая мне нужна (оскорбительная статистика), содержит статистику всех игроков в игре. Я хочу перебирать ряды, извлекая статистику для каждого игрока. Проблема в том, что в середине есть две строки, которые являются заголовками, а не статистикой игрока. Моя переменная "rows" вытянула все элементы "tr" в "tbody" моей переменной "offense_table". Это включает в себя две строки заголовка, которые я не хочу. В данном конкретном случае это будут строки [8] и строки [9], но это может отличаться от игры к игре.

#this is how the data rows begin (the ones I want)
<tr data-row="0">

#and this is how the header rows begin (the ones I want to skip over)
<tr class="over_header thead" data-row="8">

Кто-нибудь знает способ для меня игнорировать эти строки при переборе?

0
jbenfleming 15 Сен 2018 в 10:12

2 ответа

Лучший ответ

Чтобы выбрать только tr без класса, попробуйте заменить

rows = offense_table.tbody.findAll("tr")

По

rows = offense_table.findAll("tr", attrs={'class': None})
0
Daniil Mashkin 15 Сен 2018 в 07:26

Если строки, которые вы хотите пропустить, всегда имеют класс over_header, а строки, которые вы хотите сохранить, никогда не делают, вы можете отфильтровать результаты findAll("tr") для строк, которые не имеют {{X2} } учебный класс:

rows = offense_table.tbody.findAll("tr")
rows = filter(lambda row: not row.find(class_='over_header'), rows)
0
Ruzihm 15 Сен 2018 в 07:24