Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Парсинг на Python

Максим Корниенко Корниенко Ученик (97), закрыт 1 год назад
Всем привет. Я начинающий программист. И сегодня решил обучиться парсингу. Мишенью является сайт моего университета. Моя цель спарсить расписание. Вот ссылка https://lk2.stgau.ru/WebApp/#/Rasp/Group/20189 . Но появилась проблема. При загрузке странички появляется надпись "Загрузка приложения" и "Загрузка данных". Меньше секунды, но этого достаточно, чтобы питон спарсил html код только этой загрузки. По итогу я получаю html код этой штуки с загрузкой приложения. Сам вопрос заключается вот в чём. Как можно сделать. Чтобы может он не сразу считывал html код, или постоянно обновлял информацию не обновляя страницу, или ещё как-то, но чтобы по итогу он смог взять html код самого расписания. Пишу на Python 3.9. Библиотеки: bs4, fake_useragent, aiohttp, asincio. Буду очень благодарен, всем заранее спасибо.
Лучший ответ
Белый Иней Гуру (2604) 1 год назад
Тут всё просто, у сайта твоего университета есть api. DsD, тебе скинул ссылку на него. Тебе не нужно парсить html страницы твоего университета, тебе ведь нужно конкретно расписание, если ты зайдешь на страницу с расписанием, и глянешь в раздел сеть, то увидишь, что сайт подгружает расписание с помощью api

А если ты захочешь спарсить только html, то ты его не получишь, пока не прогрузишь весь JavaScript код (там даже пишут это):

Поэтому тебе стоит отправлять запрос на ссылку с api расписанием, его боятся не надо, это обычный словарь, которой облегчает нам жизнь раз так в 100, нежели мы парсили бы это всё с html. Как же получить этот словарь? (покажу на примере requests)
 import requests 
import fake_useragent


url = 'https://lk2.stgau.ru/api/Rasp?idGroup=20189&sdate=2023-10-20' # Ссылка на api расписания
headers = {
'User-Agent': fake_useragent.UserAgent().random
}
response = requests.get(url=url, headers=headers).json() # Получаем ответ и преобразуем его в словарь функцией json()

rasp = response['data']['rasp']

print(f"День: Понедельник")
print("Уроки")
for lesson in rasp:
if lesson['деньНедели'] == 1:
print(lesson['дисциплина'])
Белый ИнейГуру (2604) 1 год назад
Если ты не можешь разобраться в словаре от гугла, то используй мазилу, зайди на api ссылку с расписанием, мазила всё раскидает по полочкам:

Белый Иней Гуру (2604) Белый Иней, Если что, после rasp в мазиле идёт цифра "0" это не словарь, это означает что начался список, т.е. в ключе 'rasp' находится список
Остальные ответы
DsD Просветленный (26652) 1 год назад
html код? зачем?
кидаем запрос который отправляется при просмотре расписания в браузере - https://lk2.stgau.ru/api/Rasp?idGroup=20189&sdate=2023-10-20
забираем что надо.
profit.
Максим Корниенко КорниенкоУченик (97) 1 год назад
Нужен. Я не понимаю как мне извлекать из вашей ссылки то что надо. А как из html-я я уже понял. Поэтому вопрос остаётся как либо сканировать страницу не сразу, или как обновлять информацию о странице если она изменяется. Спасибо за ответ, может будь я умней, было бы отличным решением.
Похожие вопросы