Я пытаюсь собрать данные с веб-сайта Jeopardy. В частности, я хочу собрать суммы в долларах из таблицы данных с этого сайта :
Отображается как поэтому в l xml:
Я могу сделать это с помощью следующей строки кода:
scores = [int(score.text.replace('$','').replace(',','')) for score in soupEpisode.find('h3', string='Scores at the first commercial break (after clue 15)').findNext('table').find_all('tr')[1].find_all('td')]
Однако бывают случаи, когда таблица отображается немного иначе (с «16» вместо «15»), например так:
В результате часть моего кода, которая делает
soupEpisode.find('h3', string='Scores at the first commercial break (after clue 15)')
, вернет «Нет». Есть ли способ сделать метод find только с подстрокой имени h3? Если бы я мог написать ту же строку кода, просто нуждаясь в подстроке «Scores at the first рекламный ролик», я думаю, что это сработало бы для всех случаев. Спасибо!
Редактировать:
Чтобы проверить, скачайте html версию этого сайта , и должен работать следующий фрагмент кода:
from bs4 import BeautifulSoup
def main():
#episode_file should be "8062.html"
episode = open(episode_file, encoding="utf-8")
soupEpisode = BeautifulSoup(episode, 'lxml')
episode.close()
first_commercial_break = [int(score.text.replace('$','').replace(',','')) for score in soupEpisode.find('h3', string=string='Scores at the first commercial break (after clue 15)').findNext('table').find_all('tr')[1].find_all('td')]
return first_commercial_break