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

preview_player
Показать описание
Обучение (Web-Scraping) веб парсингу на Python. Пишем функцию для обработки популярных ошибок при парсинге сайтов. ConnectionError, HTTPError, TooManyRedirects, Timeout exception.

💰 Поддержать проект:

🔥 Стать спонсором канала:

*****Ссылки*****
Дешевый/надежный сервер в Европе:
promo_code:
zomro_246874

Хороший proxy сервис:

Парсинг криптобиржи | Торговый бот | API криптобиржи:

Крутой заказ на фрилансе | Подбираем забытый пароль к Excel файлу с помощью Python:

Пишем Telegram бота на Python + Загружаем Telegram бота на сервер(хостинг):

Плейлист по распознаванию лиц на Python:

Плейлист по парсингу сайтов на Python:

Плейлист по Instagram боту:

Код проекта на github:

И в telegram канале:

*****Соц.сети*****
Рекомендации по теме
Комментарии
Автор

Братан, дай Бог тебе здоровья.
Кот вообще решает.
Твоя манера подачи, форматирования видосов, да вообще вся подготовка и поставленная речь делает тебя лучшим на ютубе.
Круто!

ДаниилШестаков-щк
Автор

О благодарю Вас добрый человек!
Желаю Вам улучшения кармы!
Очень помогают Ваши труды.

aleksejborovinskij
Автор

Спасибо за такой контент!
Очень помогает в развитии меня как программиста!!!

БогданОнофрий
Автор

Предлагаю записывать url с ошибкой в отдельный файл чтобы в последующем обрабатывать отдельно список из этого файла, либо использовать в дальнейшем как исключение.

Openopenkam
Автор

О, вот и практика по страшным рекурсивным функциям)))

orthodox-chanel
Автор

дружище, ты настоящий герой!!!
хочу стать твоим падаваном, готов каждый день стирать твои носки вручную

АлександрИтяксов-лр
Автор

Дружище, огромное тебе человеческое спасибо!

romchik
Автор

крутая функция. недавно как раз думал, как продолжить с того же места в случае возникновения ошибки и тут этот урок прям в тему

zakirovio
Автор

И удобнее будет в отдельный декоратор вынести, а в случае возникновения ошибки до добавлять в отдельный список, а в конце скрипта в файл записать их.

alanominatorkiborg
Автор

Круть! Как обычно (для меня): пока слушаешь/смотришь, как делает знающий человек - всё понятно. Как самому делать? Да хрен его знает...

dryuni
Автор

5:57 🤔 Делал что-то похожее но вариант здесь кажется лучше)

blackcatdevelper
Автор

Как всегда очень интересно и познавательно, можно следующий урок про работу с PDF(то есть залив ответов в PDF, как залив данные в json)?

Тимофей-вхн
Автор

Интересная задумка.
Насколько она применима на постоянной основе, это вопрос. Скорее для нагруженных запросов.
Для себя дополнил код записью url с ошибками в отдельный файл.
Т.к. по логике, без них данные будут не полные, а их можно будет попытаться повторно проверить по сохраненному файлу.

Bazilit
Автор

Очень крутая и качественная подача! Будут ли уроки по Scrapy в будущем?

Саня-хмв
Автор

Ошибки при парсинге как blood in the bath

Daniil_init_
Автор

Пайтон и котики! Невозможно не лайкнуть )))

ИгорьЛатуха
Автор

Ребят, всем привет!
Смотрю этот курс по парсингу с огромным удовольствием и параллельно практикуюсь. Только вот есть вопрос, наверное, его можно отнести к фундаментальному. Подскажите, пожалуйста, почему иногда используются такие вещи, как headers, user-agent, а иногда - нет. Буду рад ответу с коротким пояснением. Спасибо!

IgorYakimov-xp
Автор

буквально на днях наткнулся на библиотеку 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} не отвечает\n{"-" * 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,

for book in response:

try:
soup = BeautifulSoup(book.text, 'lxml')
* 20}')

except Exception as ex:
print(f'некорректый адрес или страница не отвечает\n{"-" * 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} не отвечает\n{"-" * 50}')

# вот тут хз нужен ли этот блок для возврата ответа или он пройдет автоматом или вообще все по другому должно быть и сам ретерн например нужно было возвращать в блоке трай
else:
return response

silvertruenoobs
Автор

Я бы вместо создания списка через splitLines проходился бы по каждой строке отдельно. Т.е.
for link in file:
...

Потому что тогда код будет быстрее работать, т.к. создание списка и его итерирование дольше, чем просто итерирование.

НейтральныйМаппер-зм
Автор

Зачем изобретать колесо когда оно уже существует?
Для работы вряд ли будут использоваться отдельные запросы, скорее всего сессия, там же можно будет использовать HTTPAdapter с кол-во попыток и таймером их срабатывания, и не важно какая будет сетевая ошибка, она сразу обработается и будет повторно пробовать повторить действие.

shpex.