#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 . Сканируя его, он, похоже, включает в себя такие вещи, как имена пользователей, места размещения и многое другое.