Очистка Youtube - иногда программа не может найти html, но я знаю, что это там - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь создать программу, которая берет ссылку на видео YouTube и число n в качестве входных данных и сканирует n-ое «следующее видео» из начального видео и возвращает список посещенных ссылок.

Моя функция, которая находит следующее видео, иногда сталкивается с этой ошибкой:

... "in find_next_video 
    next_video_href = next_video_html['href']
    TypeError: 'NoneType' object is not subscriptable".

Я бы сказал, каждый 1 из 10 раз. Чаще всего он успешно запускается и возвращает ссылку следующего видео. Шаг перед этим назначает next_video_ html первому тегу с классом "content-link". Таким образом, эта ошибка, насколько я понимаю, означает, что назначение / поиск не выполняется.

Вот функция:

def find_next_video(start_video):
    # Get web page
    page = requests.get(start_video)

    # Parse HTML
    soup = BeautifulSoup(page.content, 'html.parser')

    #set html class that we will search by
    html_class = 'content-link'

    # Find first video with matching class
    next_video_html = soup.find('a', attrs={'class' : html_class})

    #Get href of next video and make link
    next_video_href = next_video_html['href']
    next_video_link = 'https://www.youtube.com' + next_video_href

Я изменил функцию для целей отладки, чтобы она печатала суп. prettify () (html) для файла, когда hasattr (next_video_ html, 'href') оценивается как false (когда ошибка произойдет, насколько я могу судить). Это показало мне две вещи: функция запроса и синтаксический анализ работают, потому что она печатает в файл. Кроме того, я всегда нахожу класс «content-link» в теге, где я ожидаю его, поэтому я не понимаю, почему он не может его найти.

Я также пробовал time.sleep () (up до 5 секунд), прежде чем делать запросы, но это не оказало влияния. Я предполагаю, что это как-то связано с добавлениями или javascript или чем-то еще, что я не вижу, что происходит.

Вот вставка кода с отладкой. Обратите внимание, что код ошибки, генерируемый этим, потому что функция, вызывающая find_next_video () ничего не возвращает, когда hasattr (next_video_ html, 'href) ') имеет значение true.

Здесь html сохранено на странице, где произошла ошибка. Обратите внимание, что присутствует первый тег с классом "content-link".

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