чистка паутины с красивым супом 4. удалить элемент tr на основе класса. питон - PullRequest
0 голосов
/ 31 октября 2018

Я соскребаю с этой страницы: 'https://kenpom.com/index.php?y=2018'

У меня есть следующий код:

import requests
from bs4 import BeautifulSoup

url ='https://kenpom.com/index.php?y=2018'
r = requests.get(url).text
soup = BeautifulSoup(r, 'lxml')

table = soup.find('table',{'id':'ratings-table'}).tbody
teams = table.findAll('tr')4

Переменная teams содержит 367 tr элементов. У большинства из них нет класса, но у некоторых есть класс 'thead1', а у некоторых есть класс 'thead2'. Как удалить все элементы tr в teams, в которых в качестве класса используется либо thead1, либо thead2?

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Попробуйте это:

[x for x in teams if 'class' not in x.attrs or ('thead1' not in x.attrs['class'] and 'thead2' not in x.attrs['class'])]

0 голосов
/ 31 октября 2018

Если вы выберете .extract () , это поможет вам выкинуть те tr, которые вы не хотите оставлять. Проверьте следующую реализацию.

import requests
from bs4 import BeautifulSoup

url ='https://kenpom.com/index.php?y=2018'

r = requests.get(url).text
soup = BeautifulSoup(r, 'lxml')

table = soup.find('table',{'id':'ratings-table'}).tbody
[tr.extract() for tr in table.find_all('tr',class_=["thead1","thead2"])]
teams = table.find_all('tr')
print(len(teams))

Результат:

351
0 голосов
/ 31 октября 2018

Этот лайнер должен работать:

newTeams = [x for x in teams if (type(x) != thead1) and (type(x) != thead2) ]
...