beautifulsoup python не находит то, что я ищу

#python #web-scraping #beautifulsoup

#python #очистка веб-страниц #beautifulsoup

Вопрос:

Итак, я пытаюсь извлечь текст в разделе гранд-финала (название команды-победителя) https://i.stack.imgur.com/4QPqI.png

моя проблема в том, что текст, который я хочу извлечь, не найден soup, он находит только до (class =»sgg2h1cC DEPRECATED_bootstrap_container undefined native-scroll dragscroll»), но, как вы можете видеть здесь: https://i.imgur.com/Brmv6ba.png это еще не все.

вот мой код, может кто-нибудь объяснить, как я мог бы получить информацию, которую я ищу? также я довольно новичок в веб-обработке

 from bs4 import BeautifulSoup

URL = 'https://smash.gg/tournament/revolve-oceania-2v2-finale/event/revolve-oceania-2v2-finale-event/brackets/841267/1343704'
page = requests.get(URL)

soup = BeautifulSoup(page.content, 'html.parser')
results = soup.find(id="app_feature_canvas")
a = results.find_all('div', class_="regionWrapper-APP_TOURNAMENT_PAGE-FeatureCanvas")
print()
for b in a:
    c = b.find('div', class_="page-section page-section-grey")
    print(c)
  

Ответ №1:

То, что вы видите в своем инспекторе, не совпадает с тем, что вы получаете при использовании requests . Вместо того, чтобы использовать консоль разработчика, просмотрите источник страницы.

Эти части страницы генерируются JavaScript, поэтому они не будут отображаться при запросе страницы через requests .

 URL = 'https://smash.gg/tournament/revolve-oceania-2v2-finale/event/revolve-oceania-2v2-finale-event/brackets/841267/1343704'
page = requests.get(URL)
print(page.text)  # notice this is nothing like what you see in the inspector
  

Чтобы получить выполнение javascript, рассмотрите возможность использования selenium вместо запросов.

 from selenium import webdriver
driver = webdriver.Chrome()
driver.get(URL)
html = driver.page_source  # DOM with JavaScript execution complete
soup = BeautifulSoup(html)
# ... go from here
  

В качестве альтернативы, в источнике страницы может быть достаточно информации, чтобы получить то, что вы ищете. Обратите внимание, что в источнике страницы много JSON с различной информацией, которая, предположительно, может использоваться JS для заполнения этих элементов.

В качестве альтернативы вы также можете скопировать / вставить из браузера DOM в свой инспектор. (щелкните правой кнопкой мыши элемент html и нажмите «копировать внешний html»)

 html = pyperclip.paste()  # put contents of the clipboard into a variable
soup = BeautifulSoup(html)
results = soup.find(id="app_feature_canvas")
a = results.find_all('div', class_="regionWrapper-APP_TOURNAMENT_PAGE-FeatureCanvas")
print()
for b in a:
    c = b.find('div', class_="page-section page-section-grey")
    print(c)
  

И это работает 🙂

Комментарии:

1. но я хочу, чтобы это было автоматически, а не копировать и вставлять

2. В этом случае используйте selenium или один из других упомянутых методов.

3. когда вы говорите «Обратите внимание, что там много JSON», я не вижу никакого JSON

4. я действительно не понимаю

5. вокруг строки 4700 я вижу тонну JSON . Сканируя его, он, похоже, включает в себя такие вещи, как имена пользователей, места размещения и многое другое.