Тёмный

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

PythonToday
Подписаться 228 тыс.
Просмотров 36 тыс.
50% 1

Обучение (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

Опубликовано:

 

24 июл 2021

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 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 5 месяцев назад
Ребят, всем привет! Смотрю этот курс по парсингу с огромным удовольствием и параллельно практикуюсь. Только вот есть вопрос, наверное, его можно отнести к фундаментальному. Подскажите, пожалуйста, почему иногда используются такие вещи, как 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 месяцев назад
На канале есть подробное видео об этой инструкции ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-houlvw937fg.html
@sonicpark8099
@sonicpark8099 2 года назад
Я ни как понять не могу почему все юзают bs4 а не scrapy ...
Далее
МЯСНОЙ ЦЕХ - Страшилки Minecraft
37:24
МЯСНОЙ ЦЕХ - Страшилки Minecraft
37:24