Обучение парсингу на Python #10 | Ошибки при парсинге | Парсинг сайта

  Рет қаралды 35,632

PythonToday

PythonToday

2 жыл бұрын

Обучение (Web-Scraping) веб парсингу на Python. Пишем функцию для обработки популярных ошибок при парсинге сайтов. ConnectionError, HTTPError, TooManyRedirects, Timeout exception.
💰 Поддержать проект:
/ pythontoday
yoomoney.ru/to/410019570956160
🔥 Стать спонсором канала:
/ @pythontoday
****Ссылки****
Дешевый/надежный сервер в Европе:
zomro.com/?from=246874
promo_code:
zomro_246874
Хороший proxy сервис:
proxy6.net/a/149995
Парсинг криптобиржи | Торговый бот | API криптобиржи:
• Парсинг криптобиржи | ...
Крутой заказ на фрилансе | Подбираем забытый пароль к Excel файлу с помощью Python:
• Крутой заказ на фрилан...
Пишем Telegram бота на Python + Загружаем Telegram бота на сервер(хостинг):
• Пишем Telegram бота на...
Плейлист по распознаванию лиц на Python:
• Распознавание лиц | Fa...
Плейлист по парсингу сайтов на Python:
• Парсинг/Scraping
Плейлист по Instagram боту:
• Instagram Bot на Pytho...
Код проекта на github:
github.com/pythontoday/scrap_...
И в telegram канале:
t.me/python2day
****Соц.сети****
Telegram: t.me/python2day

Пікірлер: 88
@Openopenkam
@Openopenkam Жыл бұрын
Предлагаю записывать url с ошибкой в отдельный файл чтобы в последующем обрабатывать отдельно список из этого файла, либо использовать в дальнейшем как исключение.
@user-rg6gi5ve1g
@user-rg6gi5ve1g 2 жыл бұрын
Братан, дай Бог тебе здоровья. Кот вообще решает. Твоя манера подачи, форматирования видосов, да вообще вся подготовка и поставленная речь делает тебя лучшим на ютубе. Круто!
@PythonToday
@PythonToday 2 жыл бұрын
Большое спасибо за поддержку!
@user-kh5cl7sg2r
@user-kh5cl7sg2r 2 жыл бұрын
Спасибо за такой контент! Очень помогает в развитии меня как программиста!!!
@PythonToday
@PythonToday 2 жыл бұрын
Спасибо за поддержку! Рад что полезно
@aleksejborovinskij1155
@aleksejborovinskij1155 2 жыл бұрын
О благодарю Вас добрый человек! Желаю Вам улучшения кармы! Очень помогают Ваши труды.
@PythonToday
@PythonToday 2 жыл бұрын
Спасибо за фидбэк! Рад что полезно.
@orthodox-chanel
@orthodox-chanel Жыл бұрын
О, вот и практика по страшным рекурсивным функциям)))
@user-romchik777
@user-romchik777 2 жыл бұрын
Дружище, огромное тебе человеческое спасибо!
@PythonToday
@PythonToday 2 жыл бұрын
Благодарю!
@alanominatorkiborg5860
@alanominatorkiborg5860 17 күн бұрын
И удобнее будет в отдельный декоратор вынести, а в случае возникновения ошибки до добавлять в отдельный список, а в конце скрипта в файл записать их.
@user-lc9bn4no7i
@user-lc9bn4no7i 2 жыл бұрын
дружище, ты настоящий герой!!! хочу стать твоим падаваном, готов каждый день стирать твои носки вручную
@short_aliexpress
@short_aliexpress Жыл бұрын
Благодарю. Очень полезная штука
@user-xz4mj8fd9j
@user-xz4mj8fd9j Жыл бұрын
Ооо, это полезная тема, спасибо!
@zakirovio
@zakirovio Жыл бұрын
крутая функция. недавно как раз думал, как продолжить с того же места в случае возникновения ошибки и тут этот урок прям в тему
@zakirovio
@zakirovio Жыл бұрын
может в будущих уроках вы это уже применили, но у меня возникла мысль дополнить ветку if путем добавления прокси. например 3 повторных запроса отправляются с задержкой, если это не помогло, значит возможна блокировка хоста, в следствии чего последние две попытки меняют прокси браузера и работают с ним
@rand_name6734
@rand_name6734 2 жыл бұрын
отличный урок, и анимация к месту 👍
@PythonToday
@PythonToday 2 жыл бұрын
Спасибо!
@IvanTarazevich
@IvanTarazevich 2 жыл бұрын
Актуально, спасибо!
@PythonToday
@PythonToday 2 жыл бұрын
Благодарою за фидбэк!
@vigauss1889
@vigauss1889 2 жыл бұрын
Спасибо👍
@PythonToday
@PythonToday 2 жыл бұрын
Благодарю за фидбэк!
@jennysavvage9094
@jennysavvage9094 2 жыл бұрын
Молодец, парень! Удачи тебе!
@PythonToday
@PythonToday 2 жыл бұрын
Благодарю! Взаимно 💪
@vovast8211
@vovast8211 2 жыл бұрын
Какими дополнениями в vscode пользуешся? *Типо для терминала*
@blackcatdevel0per
@blackcatdevel0per Жыл бұрын
5:57 🤔 Делал что-то похожее но вариант здесь кажется лучше)
@oleksandr6750
@oleksandr6750 2 жыл бұрын
полезное видео, но когда хотел применить к своему коду, оказалось, что с прокси не работает. Возвращает код ошибки , но не срабатывает except, цикл с запросами идет дальше. Есть предположения почему?
@user-vx3ko1fo9h
@user-vx3ko1fo9h 2 жыл бұрын
Как всегда очень интересно и познавательно, можно следующий урок про работу с PDF(то есть залив ответов в PDF, как залив данные в json)?
@PythonToday
@PythonToday 2 жыл бұрын
Благодарю за фидбэк. Пока не сталкивался с такой задачей. На канале есть видео по сохранению данных в PDF, посмотри.
@Bazilit
@Bazilit Жыл бұрын
Интересная задумка. Насколько она применима на постоянной основе, это вопрос. Скорее для нагруженных запросов. Для себя дополнил код записью url с ошибками в отдельный файл. Т.к. по логике, без них данные будут не полные, а их можно будет попытаться повторно проверить по сохраненному файлу.
@vasbkamarxil1260
@vasbkamarxil1260 Жыл бұрын
функция Exception поменялась? что т не так у меня не попадаю в счетчик . . . .
@jeyhunzeynalov777
@jeyhunzeynalov777 3 ай бұрын
@Andriyklm9
@Andriyklm9 2 жыл бұрын
Полезная инфа
@PythonToday
@PythonToday 2 жыл бұрын
Благодарю, рад что полезно
@user-vt3bf2fh1t
@user-vt3bf2fh1t 2 жыл бұрын
Очень крутая и качественная подача! Будут ли уроки по Scrapy в будущем?
@PythonToday
@PythonToday 2 жыл бұрын
Спасибо за фидбэк. Возможно когда нормально изучу
@dryuni
@dryuni 2 жыл бұрын
Круть! Как обычно (для меня): пока слушаешь/смотришь, как делает знающий человек - всё понятно. Как самому делать? Да хрен его знает...
@FGFDST
@FGFDST 2 жыл бұрын
Ну я когда спорт начал парсить, в частности флешскор и получил облом. Я начал парсить контору с еденичкой в названии тамприходят json ответы. И получилось написать уведомлятор о матчах и событиях в играх. Так и получается пока решаешь задачу, ищешь ответ и учишься по ходу развития своего проекта.
@Alex.T.H.
@Alex.T.H. 2 жыл бұрын
Садиться и писать. Без постоянной практики ничего не получится
@PythonToday
@PythonToday 2 жыл бұрын
Благодарю! Да брать и делать. Это в видео 10 минут. На деле бывает 3-5 часов только библиотеку ставишь, ибо нихрена не работает.
@blackjack2558
@blackjack2558 2 жыл бұрын
@@PythonToday соглашусь с тобой, лайк однозначно !
@Naberegn
@Naberegn 11 ай бұрын
Где брать accept?
@user-oh8oq4oz7d
@user-oh8oq4oz7d 2 жыл бұрын
А зачем были куплены пару впс?
@silvertruenoobs340
@silvertruenoobs340 2 жыл бұрын
буквально на днях наткнулся на библиотеку grequests, которая в целом как requests (ибо с нее сделана), но работает намного шустрее, прям в разы, ну и попробовал переписать этот обработчик под нее, в итоге получилось прям намного быстрее и если не трогать попытки, а просто обрабатывать ошибки и продолжать работу то прям огонь (список из почти 900 ссылок, обработался за 4 минуты), а вот если трогать исключения, то там я уже прям запутался, так как изначально библиотека grequests пробегается по ссылкам в нашем списке и формирует свой список ответов, а на обработку улетает конкретно один запрос из этого списка, и как его обработать и вернуть обратно, пока загадака... пока что засунул его в обработку через простой реквест и вроде обработка проходит, только вот как полученный ответ вернуть обратно, что бы записать его в список пока не совсем понятно (если кто вкурсе подскажите пожалуйста буду благодарен) пока получается так: - если не обрабатывать попытки код будет: from datetime import datetime import grequests import requests from bs4 import BeautifulSoup import lxml start_time = datetime.now() # функция обработки ошибок def exception_handler(request, exception): print(f'страница {request.url} не отвечает {"-" * 50}') def main(): with open('lesson10/list_url.txt') as file: books_urls = file.read().splitlines() # пробегаемся по ссылкам в списке response = (grequests.get(url) for url in books_urls) # собираем в список полученные ответы, для ошибок вызываем функцию обработки response = grequests.map(response, exception_handler=exception_handler) for book in response: try: soup = BeautifulSoup(book.text, 'lxml') print(f'{soup.title.text} {"-" * 20}') except Exception as ex: print(f'некорректый адрес или страница не отвечает {"-" * 20}') continue finish_time = datetime.now() - start_time print(finish_time) if __name__ == '__main__': main() - если обрабатывать то функция обработки, будет выглядеть приблизительно, так (но по факту хз, так как не совсем понятно отрабатывает ли вообще блок трай - опять же если кто знает как надо расскажите буду очень рад def exception_handler(request, exception, retry=5): try: response = requests.get(url=request.url) except Exception as ex: time.sleep(1) # импортируем библиотеку тайм if retry: print(f'[Info] retry={retry} => {request.url}') return exception_handler(request, exception, retry=(retry - 1)) else: print(f'страница {request.url} не отвечает {"-" * 50}') # вот тут хз нужен ли этот блок для возврата ответа или он пройдет автоматом или вообще все по другому должно быть и сам ретерн например нужно было возвращать в блоке трай else: return response
@user-jb9gf1lf8l
@user-jb9gf1lf8l 4 ай бұрын
Ребят, всем привет! Смотрю этот курс по парсингу с огромным удовольствием и параллельно практикуюсь. Только вот есть вопрос, наверное, его можно отнести к фундаментальному. Подскажите, пожалуйста, почему иногда используются такие вещи, как headers, user-agent, а иногда - нет. Буду рад ответу с коротким пояснением. Спасибо!
@user-oc1rq2me4y
@user-oc1rq2me4y 3 ай бұрын
http заголовки в первых видео упоминалось, что они нужны для идентификации пользователя сервера при запросах (если я ниче не перепутал)
@toxic_not9447
@toxic_not9447 2 жыл бұрын
Добрый день ! пытаюсь сделать парсер, для данного сайта , и возникает провал , в моменте запроса изза первоначальной капчи , как обойти? примерно такой же момент видел у вас в видео, но все таки другое , или нужно перекапашить все запросы , которые делает сайт ? p.s. сайт вот : www.postavshhiki.ru/katalog-postavshchikov/75-oborudovanie
@blackfang5285
@blackfang5285 2 жыл бұрын
Сделай через selenium
@user-de7vk7gm7b
@user-de7vk7gm7b 2 жыл бұрын
Погнал парсить 18 лямов компаний! вот только долго( а можно разделить свою задачу например на несколько ВиртуальныхМ?, пакеты та будут приходить с моего основного роутера, получается сайт будет в любом случае видеть все мои ВМ как одно IP ? и будет ошибку кидать?
@user-xx6yb2cr2h
@user-xx6yb2cr2h 2 жыл бұрын
3:02 😄👍
@PythonToday
@PythonToday 2 жыл бұрын
😀
@intellegetup6941
@intellegetup6941 Жыл бұрын
9:29
@user-si9jy3zs1j
@user-si9jy3zs1j 2 жыл бұрын
Я бы вместо создания списка через splitLines проходился бы по каждой строке отдельно. Т.е. for link in file: ... Потому что тогда код будет быстрее работать, т.к. создание списка и его итерирование дольше, чем просто итерирование.
@user-re1ri9jp3e
@user-re1ri9jp3e 2 жыл бұрын
Пайтон и котики! Невозможно не лайкнуть )))
@PythonToday
@PythonToday 2 жыл бұрын
💪
@FGFDST
@FGFDST 2 жыл бұрын
except KeyErrore, except IntegerErrore, и т д. можно было добавить в данный урок
@PythonToday
@PythonToday 2 жыл бұрын
Для чего? Идет обработка всех ошибок ведь
@FGFDST
@FGFDST 2 жыл бұрын
@@PythonToday допустим ловим json ответ а там ключ без значения, а на рендере это отображается как ноль. А ошибка при парсинге integererror.
@shpex.2077
@shpex.2077 2 жыл бұрын
Зачем изобретать колесо когда оно уже существует? Для работы вряд ли будут использоваться отдельные запросы, скорее всего сессия, там же можно будет использовать HTTPAdapter с кол-во попыток и таймером их срабатывания, и не важно какая будет сетевая ошибка, она сразу обработается и будет повторно пробовать повторить действие.
@PythonToday
@PythonToday 2 жыл бұрын
Не знал об этой библиотеке, есть пример кода? Если да, то кинь ссылку на github пожалуйста
@user-vf3zv8st1q
@user-vf3zv8st1q 10 ай бұрын
зачем писать if __name__ == "__main__": main()?
@PythonToday
@PythonToday 9 ай бұрын
На канале есть подробное видео об этой инструкции kzfaq.info/get/bejne/ntWln9monpmblps.html
@sonicpark8099
@sonicpark8099 2 жыл бұрын
Я ни как понять не могу почему все юзают bs4 а не scrapy ...
어른의 힘으로만 할 수 있는 버블티 마시는법
00:15
진영민yeongmin
Рет қаралды 8 МЛН
Be kind🤝
00:22
ISSEI / いっせい
Рет қаралды 19 МЛН
когда достали одноклассники!
00:49
БРУНО
Рет қаралды 2,7 МЛН
КАРМАНЧИК 2 СЕЗОН 5 СЕРИЯ
27:21
Inter Production
Рет қаралды 578 М.
어른의 힘으로만 할 수 있는 버블티 마시는법
00:15
진영민yeongmin
Рет қаралды 8 МЛН