Как получить li без класса под тегом div - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь вытянуть линию и снова по данным для игр из ESPN.Для этого мне нужно вытащить элемент списка под тегом div. Я могу успешно получить данные over / under, потому что мне ясно, что это за тег, но элемент списка для строки, кажется, не имеет четкого тега,По сути, я хотел бы извлечь "Line: IOWA -3.5" из этого конкретного URL.

from bs4 import BeautifulSoup    
page = requests.get('https://www.espn.com/college- football/game/_/gameId/401012863')
soup = BeautifulSoup(page.text, 'html.parser')
#Get over/under
game_ou = soup.find('li',class_='ou')
game_ou2 = game_ou.contents[0]
game_ou3=game_ou2.strip()

#Get Line
game_line = soup.find('div',class_='odds-details')
print(game_line)

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Используйте find('li') после нахождения элемента div.

from bs4 import BeautifulSoup
page = requests.get('https://www.espn.com/college-football/game/_/gameId/401012863')
soup = BeautifulSoup(page.text, 'html.parser')
print(soup.find("div",class_="odds-details").find('li').text)
print(soup.find("div",class_="odds-details").find('li',class_='ou').text.strip())

Выход:

Line: IOWA -3.5
Over/Under: 47
0 голосов
/ 25 сентября 2019

Добавьте в родительский класс (с комбинатором потомков и дочерним li селектором типа ), тогда вы можете получить оба li в списке и индексировать или просто использовать select_one для извлеченияпервый

from bs4 import BeautifulSoup as bs
import requests

r = requests.get('https://www.espn.com/college-football/game/_/gameId/401012863')
soup = bs(r.content, 'lxml')
lis = [i.text.strip() for i in soup.select('.odds-details li')]
print(lis[0])
print(lis[1])
print(soup.select_one('.odds-details li').text)

enter image description here

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