Программа очистки веб-страниц не может найти элемент, который я вижу в браузере - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь получить заголовки потоков на https://www.twitch.tv/directory/game/Dota%202, используя Requests и BeautifulSoup. Я знаю, что мои критерии поиска верны, но моя программа не находит нужные мне элементы.

Вот снимок экрана, показывающий соответствующую часть исходного кода в браузере:

Screenshot of the browser showing part of the webpage, as well as the source using the developer tools/web inspector.

Источник HTML в виде текста:

<div class="tw-media-card-meta__title">
  <div class="tw-c-text-alt">
    <a class="tw-full-width tw-interactive tw-link tw-link--button tw-link--hover-underline-none tw-link--inherit" data-a-target="preview-card-title-link" href="/weplayesport_en">
      <div class="tw-align-items-start tw-flex">
        <h3 class="tw-ellipsis tw-font-size-5" title="NAVI vs HellRaisers | BO5 | ODPixel &amp; S4 | WeSave! Charity Play">NAVI vs HellRaisers | BO5 | ODPixel &amp; S4 | WeSave! Charity Play</h3>
      </div>
    </a>
  </div>
</div>

Вот мой код:

import requests
from bs4 import BeautifulSoup

req = requests.get("https://www.twitch.tv/directory/game/Dota%202")

soup = BeautifulSoup(req.content, "lxml")

title_elems = soup.find_all("h3", attrs={"title": True})

print(title_elems)

Когда я его запускаю, title_elems - это просто пустой список ([]).

Почему моя программа не находит элементы?

1 Ответ

4 голосов
/ 28 марта 2020

Интересующий вас элемент генерируется динамически после начальной загрузки страницы, что означает, что ваш браузер выполнил JavaScript, сделал другие сетевые запросы и т. Д. c. для того, чтобы построить страницу. Requests - это всего лишь библиотека HTTP, и поэтому такие вещи не будут выполняться.

Вы можете использовать такой инструмент, как Selenium, или, возможно, даже проанализировать сетевой трафик c для нужных вам данных и выполнить запросы напрямую. .

...