Выводится проблема при парсинге "You need to enable JavaScript to run this app"
Всем привет! Пишу программу для парсинга сайта вуза, потом буду оборачивать в тг бота. Но почему-то информация с сайта не подтягивается. Я не могу понять почему так. Использую BeatifulSoup и requests. Я ещё новенький в этом, толком на разбираюсь в этом.
from bs4 import BeautifulSoup
import requests
def get_guide():
headers = {
'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
}
url = 'https://start.tpu.ru/guide/1'
r = requests.get(url=url, headers=headers)
soup = BeautifulSoup(r.text,'lxml')
guide_boxes = soup.findAll('div', class_='guide-box')
for guide in guide_boxes:
guide_title = guide.find('h5').text.strip()
guide_desc = guide.find('p').text.strip()
print(f'{guide_title}\n{guide_desc}')
get_guide()
Ответы (2 шт):
Посмотрите, всё ли правильно с полученными данными. Во-первых, вы можете проверить, что вы получили ответ с сервера (убедитесь, что ваш запрос не вернул код ошибки). Во-вторых, убедитесь, что вы получили правильный HTML код страницы. В третьих, проверьте, что вы используете правильный селектор для поиска элементов. Попробуйте распечатать результат вызова soup.prettify(), чтобы увидеть, что находится внутри soup, и проверьте, что элементы, которые вы хотите найти, действительно присутствуют в HTML-коде. Если у вас есть какие-то подозрения в этом плане, вы можете использовать инструменты разработчика в браузере, чтобы посмотреть на HTML-код страницы.
Если в soup нет элементов, которые вы ожидаете найти, это может означать, что ваш запрос не удался, вы получили неправильный HTML-код или вы используете неправильный селектор. Чтобы понять, что именно произошло, вы можете:
Проверить статус ответа с сервера (r.status_code). Если он равен 200, это означает, что всё в порядке, и проблема не связана с запросом. Если же статус отличен от 200, это может указывать на проблему с запросом.
Проверить содержимое ответа с сервера (r.text). Если вы видите в нём HTML-код, это означает, что запрос успешен, и проблема не связана с ним. Если же вы видите какие-то ошибки или сообщения об ошибках, это может быть причиной неудачи парсинга.
Проверить содержимое soup с помощью метода
prettify
Обычно в таких случаях помогает CloudScraper, но сайт довольно интересный, даже если в браузере посмотреть первый запрос, то там выдаёт то же самое, мол включите JS, чтобы смотреть сайт.
В браузере, Карл!
Также сайты, которые уповают на JS можно открывать через httpx:
import httpx
client = httpx.Client(http2=True)
r = client.get("https://start.tpu.ru/guide/1")
r.content
Но и тут выдаёт всё тот же robots… Т.е. то что должен обходить cloudscraper. Поэтому, как Сергей Ш ? написал в комментарии к вопросу, необходимо просто найти нужный запрос и повторить его. https://start.tpu.ru/guide.json содержит необходимые данные из которых и составляется страница.
Из чего делаем вывод: проблема не в js, и cloudscraper нормально отрабатывает, но GET запрос с ним выдаёт чушь, ту же самую чушь он выдаёт и в браузере. Поэтому берём необходимый запрос и получаем данные.
import json
r = s.get('https://start.tpu.ru/guide.json')
json.loads(r.content)
Вывод:
[{'content': '<div class="row">\n'
'\t<div class="col-md-6">\n'
'\t\t<div class="guide-box">\n'
'\t\t\t<div class="title back_gc1"></div>\n'
'\t\t\t<h5>126 лет истории</h5>\n'
'\t\t\t<p>Томский политех был учрежден в 1896 году как Томский '
'технологический институт практических инженеров имени императора '
'Николая II. Он стал первым учебным заведением, выпускающим '
'инженеров, на огромной территории от Волги до Тихого океана. И '
'все эти годы Томский политех готовит инженерную элиту для '
'развития страны. Кстати, в год рождения нашего университета '
'братья Люмьер представили первый синематограф, родился поэт '
'Сергей Есенин, а в Греции прошли первые современные Олимпийские '
'игры.\n'
'\t\t\t</p>\n'
'\t\t</div>\n'
'\n'
'\t\t<div class="guide-box">\n'
'\t\t\t<div class="title back_gc1"></div>\n'
'\t\t\t<h5>Forbes рекомендует ТПУ</h5>\n'
'\t\t\t<p>Седьмое место в ежегодном рейтинге лучших российских '
'вузов по мнению редакции журнала — это показательно! Самая '
'сильная позиция ТПУ — качество образования. Все остальное в '
'твоих руках.\n'
'\t\t\t</p>\n'
'\t\t</div>\n'
'\t</div>\n'
'\t<div class="col-md-6">\n'
'\t\t<div class="guide-box">\n'
'\t\t\t<div class="title back_gc1"></div>\n'
'\t\t\t<h5>170 000 выпускников!</h5>\n'
'\t\t\t<p>Только представь! Среди выпускников Томского политеха — '
'выдающиеся ученые, инженеры, руководители, специалисты в самых '
'разных областях. О братстве политехников ходят легенды. Где бы '
'ты ни оказался на работе или по работе, можешь рассчитывать на '
'помощь и поддержку «своих», потому что политехники есть '
'практически везде.\n'
'\t\t\t</p>\n'
'\t\t</div>\n'
'\t\t<div class="guide-box">\n'
'\t\t\t<div class="title back_gc1"></div>\n'
'\t\t\t<h5>Кампус — город в городе</h5>\n'
'\t\t\t<p>Все известные университеты мира имеют свои кампусы. '
'Томский политех не исключение. \n'
'\t\t\t<b class="b_gc">32</b> учебных и лабораторных корпуса, <b '
'class="b_gc">15</b> студенческих общежитий на \n'
'\t\t\tобщей площади <b class="b_gc">329 000</b> кв. м., \n'
'\t\t\t<b class="b_gc">7000</b> персональных компьютеров и \n'
'\t\t\t<b class="b_gc">200</b> зон Wi-Fi, скалодром, стадион, \n'
'\t\t\tбассейн, библиотека, культурный \n'
'\t\t\tцентр и так далее. Но главное — \n'
'\t\t\tлюди! Более <b class="b_gc">11 500</b> студентов, среди '
'которых почти <b class="b_gc">3000</b> иностранцев \n'
'\t\t\tиз более чем <b class="b_gc">50</b> стран мира. Со \n'
'\t\t\tвсеми ты вряд ли познакомишься, \n'
'\t\t\tно некоторые станут твоими друзьями на всю жизнь.\n'
'\t\t\t</p>\n'
'\t\t</div>\n'
'\t\t<div class="guide-box">\n'
'\t\t\t<div class="title back_gc1"></div>\n'
'\t\t\t<p class="mb-1">И запомни наш слоган:</p>\n'
'\t\t\t<h5>#политехлучшевсех</h5>\n'
'\t\t</div>\n'
'\t</div>\n'
'</div>',
'id': 1,
'name': 'Твой университет'},
{'content': '<div class="row"><h3 class="mb-4 b_gc">КУДА СЕГОДНЯ БЕЗ '
'ИНТЕРНЕТА?</h3><div class="col-md-6"><div class="guide-box '
'guide_beauty_box_1"><p><b>Тебе нужно пройти регистрацию в '
'качестве пользователя корпоративной сети TPU.</b> Первокурсникам '
'логин и пароль до конца августа высылается на e-mail, который '
'абитуриент указал при регистрации. После входа в систему у тебя '
'будет свой почтовый ящик в домене @tpu.ru и доступ к '
'информационным ресурсам корпоративной сети TPU. Сменить пароль '
'можно по ссылке: https://user.tpu.ru/.</p></div><div '
'class="guide-box guide_beauty_box_2"><h2>Важно!</h2><p>Wi-Fi '
'доступен в Научно-технической библиотеке (НТБ), в Международном '
'культурном tцентре (МКЦ), в Кибернетическом центре и в корпусах: '
'главный, 1, 2, 3, 5, 8, 10, 11, 15, 18, 19, 20, 21. Главное — '
'быть подключенным к домену TPU.</p></div></div><div '
'class="col-md-6"><div class="guide-box"><p>Карточку с '
'индивидуальной учетной записью необходимо сохранять в течение '
'всего периода обучения. При утере регистрационной карты '
'обращайся в бюро регистрации читателей НТБ (ул. Белинского, 53а, '
'каб. 123).</p></div><div class="guide-box '
'guide_beauty_box_3"><div>✖</div><div>Подробная информация '
'и инструкции по подключению Wi-Fi: <a '
'href="https://staff.tpu.ru/html/wifi" '
'target="_blank">staff.tpu.ru/html/wifi</a></div></div></div></div> '
'<div class="row"><div class="col-12">В случае проблем с '
'настройками Wifi обращайся по <b>e-mail: <a '
'href="mailto:[email protected]">[email protected]</a></b></div></div> <div '
'class="row"><div class="col-12"> <h4 class="mt-4">Еще несколько '
'полезных ссылок:</h4> <ul> <li><a href="http://rasp.tpu.ru/" '
'target="_blank">Расписание занятий</a></li> <li><a '
'href="https://mail.tpu.ru" target="_blank">Корпоративная '
'электронная почта</a></li> <li><a '
'href="https://staff.tpu.ru/personal" target="_blank">Телефонный '
'справочник</a></li> <li><a href="https://opac.lib.tpu.ru" '
'target="_blank">Электронный каталог</a></li> <li><a '
'href="https://staff.tpu.ru/html/myq" target="_blank">Печать '
'MyQ</a></li> <li><a href="https://stud.lms.tpu.ru/" '
'target="_blank">Онлайн-обучение</a></li> <li><a '
'href="https://staff.tpu.ru/html/it" target="_blank">Другие '
'цифровые сервисы ТПУ</a></li> </ul> </div></div>',
…