Обучение парсингу на Python #3 | Парсинг динамического сайта | Выполняем заказ на фрилансе

  Рет қаралды 145,608

PythonToday

PythonToday

Күн бұрын

Пікірлер: 327
@PythonToday
@PythonToday 4 жыл бұрын
Таймкоды для вас: 00:00 - Интро 00:15 - Описание проекта 01:00 - Изучаем структуру страницы 01:47 - Установка нужных для работы библиотек 02:05 - Создаём функцию, и получаем главную страницу 03:40 - Получаем ссылки на стартапы с первой страницы 05:21 - Получаем страницу стартапа 08:16 - Собираем данные стартапа 13:15 - Сохраняем данные в JSON файл 13:54 - Собираем данные всех стартапов с первой страницы 14:40 - Сбор динамических данных 19:16 - Запуск парсера
@helloworld-el5bi
@helloworld-el5bi 4 жыл бұрын
Опять годнота)
@matrixxd6842
@matrixxd6842 Жыл бұрын
я не понимаю как сделать терминал как у тебя у меня там PS C:\Users\User\Desktop> вот так выходит я пишу как у тебя но все ровно не получается
@ОлександрБуланов-ы2е
@ОлександрБуланов-ы2е 2 жыл бұрын
Я понимаю что код написан быстро, но для новичков нужно будет учесть несколько не критичных, но ошибок в коде: 1. Довольно странно постоянно сохранять html файл, потом открывать его и парсить данные из него (по сути просто лишние движения). Правильно будет просто использовать responce.text и доставать информацию оттуда (но возможно у заказчика было требования сохранить html файлы) 2. Хардкод пагинации может привести к тому что в будущем не все стартапы будут пасриться (на сайт банально добавят новые стартапы и пагинаций станет больше). Правильно будет проверять ответ на каждой итерации цикла, и если responce.status_code == 404 то выходим из цикла 3. Это уже ошибка в стиле написания кода. Абсолютно весь код находится в одной функции. Получения запроса с основного сайта и распарсивание карточек стартапов должно быть отдельно (для сумасшедших можно даже на 2 функции разбить). Парсинг данных со страницы стартапа так же должно производится отдельной функцией. Сохранения json, так же должно быть отдельной функцией. 4. Это скорее совет чем ошибка. На сайте не так много карточек, но если учесть что в будующем их вероятно станет больше (запросов станет больше), то код может выполняться несколько десятков минут. Если вы пишите парсер и либо он уже делает много запросов, либо есть вероятность что в будующем он будет делать много запросов, то просто необходимо использовать aiohttp (или любую другую асинхронную библиотеку). Если парсер одноразовый, это можно упустить. 5.Было бы правильно вывести базовый URL в отдельную переменную, а не копировать его к каждой относительной ссылке. 6. Считается неправильным отлавливать все исключения в блоке try except, так как если пользователь нажмёт CTRL+C, то это не прекратит работу программы, а выкинет исключение. Если вам нужно поймать конкретное исключение, укажите его в блоке except, если нужно отловить все (за исключением нажатия CTRL+C), то просто внутри блока except выполняйте проверку. 7. Заголовки лучше прописывать вне функции как константу (в ином случаи вы либо используете одну функцию на всю программу (что неправильно) либо копипастите headers в тело каждой функции) 8. Что бы не заниматься лишними телодвижениями, можно использовать XPATH для указания необходимого блока. Думаю это всё к чему смог придраться. Отличный урок особенно для новичков. На парсерах можно заработать первый деньги питон разработчику, так как офферов достаточно много. Дам совет для тех кто парсит какой то сложный сайт. Изучите траффик, который идёт от сайта. Иногда можно найти запрос в котором все данные поступают в одном json ответе и вам не нужно долбить сайт сотнями запросов. Если вам удалось найти такой запрос, считайте что вы выполнили заказ на фрилансе за 5 минут, так как вам остаётся лишь достать данные из json и сохранить туда, куда укажет заказчик.
@Vladimir_F609
@Vladimir_F609 Жыл бұрын
Вроде всё верно, кроме имени переменной responSe😊
@СергейПоляков-м5х
@СергейПоляков-м5х Жыл бұрын
Спасибо, друг
@SAVSAV1212
@SAVSAV1212 Жыл бұрын
А как называется ошибка, связанная с прерыванием программы Ctrl + C?
@ОлександрБуланов-ы2е
@ОлександрБуланов-ы2е Жыл бұрын
@@SAVSAV1212 KeyboardInterrupt
@Jon_Britva
@Jon_Britva 8 ай бұрын
09:40 - Try except: отдельное спасибо за огромную подсказку
@pythonx8732
@pythonx8732 4 жыл бұрын
Уроки очень классные, только одна просьба можете ТЗ показывать, было бы очень интересно
@РусланСабитов-и2ь
@РусланСабитов-и2ь 3 жыл бұрын
Круто подметили
@DrZlad
@DrZlad 2 жыл бұрын
А вот тут то и начинается настоящее искусство - транслировать- тз.
@begula_chan
@begula_chan 2 жыл бұрын
Искренне благодарю за видео. Было очень полезно узнать про динамический сбор данных со страницы. Постараюсь сделать что-то похожее на вашу программу, уж очень мне нравится делать парсеры. Когда начну работать на фрилансе, первым делом поддержу вас и ваш канал копеечкой за неоценимый труд.
@aeca4284
@aeca4284 4 жыл бұрын
Без слов, это было четко, ясно, понятно, КРАСИВО!
@tenebris8800
@tenebris8800 4 жыл бұрын
шикарные видосы продолжай пожалуйста)))
@takiekakmi7532
@takiekakmi7532 3 жыл бұрын
Это было круто! Сначала - все казалось огромным драконищем, а оказалось - дело разбора на 2-3 дня. Пасяб - теперь можно топать выполнять заказы👍)
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк!
@squidwardtentacles7724
@squidwardtentacles7724 2 жыл бұрын
как вы разбирали видео? гуглили что делает каждая строчка?
@takiekakmi7532
@takiekakmi7532 2 жыл бұрын
@@squidwardtentacles7724 нет конечно) код же весьма логичен. А вообще - самый простой способ - повторить, разбить на функции и написать тесты. И, разумеется, смотреть в документацию периодически
@squidwardtentacles7724
@squidwardtentacles7724 2 жыл бұрын
@@takiekakmi7532 как успехи сегодня в парсинге? Вы еще учитесь? я ищу себе единомышленников, я подросток с хромой базой Python(нужно повторить темы ООП, методов и функций), хочу научиться парсингу и ищу единомышленников
@kostya2222
@kostya2222 2 жыл бұрын
@@squidwardtentacles7724 Тоже подросток, и желаю научиться парсингу) мыслим мы одинаково
@NickKirieiev
@NickKirieiev 2 жыл бұрын
Для домашнего задания кто занимается доработайте код так что бы он обрабатывал не 23 страницы а все с учётом того что могут быть добавлены страницы. Очень интересное видео. Автору спасибо.
@ЕгорСауткин-щ6г
@ЕгорСауткин-щ6г 3 жыл бұрын
Ты чёртов гений, я с этой пагинацией мучаюсь 2-ой день, всякие видео смотрю, stackoverflow чекаю, нихрена не помогало, ну не работало и всё, зашёл к тебе, а тут, просто тупо через request запрос делаешь и всё, никакие параметры не нужны, отличные гайды, просто идеальные.
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк 💪
@ЕгорСауткин-щ6г
@ЕгорСауткин-щ6г 3 жыл бұрын
@@Александр_1-й, там вроде все продукты на flex блоках, кстати не знаете как парятся подобные вещи?
@ruservices
@ruservices 4 жыл бұрын
Супер!!! Смотреть одно наслождение. Видна рука проффесионала. Спасибо за видео!
@PythonToday
@PythonToday 4 жыл бұрын
Благодарю 😀 Но я только учусь, и делюсь опытом. Далеко не профессионал
@МаковыйРулет-э2щ
@МаковыйРулет-э2щ 4 жыл бұрын
Ты большой молодец! Спасибо тебе
@PythonToday
@PythonToday 4 жыл бұрын
Спасибо за фидбэк
@Koshsky-f7y
@Koshsky-f7y 4 жыл бұрын
@@PythonToday реально красавца!!
@crussaider
@crussaider 3 жыл бұрын
Все по классике: сначала написал код, потом решил посмотреть гайд. Хорошо, что мой код пока что никто не видел))
@PythonToday
@PythonToday 3 жыл бұрын
Да всё ок, это самая лучшая практика!
@ПавелСтодумов
@ПавелСтодумов 3 жыл бұрын
допарсились. нет больше этого сайта))
@DiMoNy4
@DiMoNy4 Жыл бұрын
Этот сайтик был из тех, кто просто любил жизнь...
@SherinYuri
@SherinYuri 8 ай бұрын
Сайт есть, но он изменился. Ну тем интереснее. Будем его изучать. Не все же время готовое списывать. ))))
@makedatauseful1015
@makedatauseful1015 3 жыл бұрын
с помощью вашего канала зашел в программирование, большое спасибо
@PythonToday
@PythonToday 3 жыл бұрын
Уууу, поздравляю. Главное практика, успехов 👍
@DenisE25100
@DenisE25100 2 жыл бұрын
Вы молодец. Не надо бояться делиться знаниями. Правда молодец. 😊
@set1qs
@set1qs Жыл бұрын
Как же ты меня мотивируешь ) я кажется знаю чем буду заниматься) именно парить, очень красиво получается!
@PythonToday
@PythonToday Жыл бұрын
"Парить" - это что-то другое) Спасибо за фидбэк! Рад что видео интересны.
@set1qs
@set1qs Жыл бұрын
@@PythonToday опечатка :))) именно парсить 🤗
@3310-s4u
@3310-s4u 4 жыл бұрын
Очень круто и понятно объясняешь Я давно такой канал искал Желаю успехов
@PythonToday
@PythonToday 4 жыл бұрын
Спасибо 💪 Главная награда, мотивирует продолжать
@HeyArtem
@HeyArtem 3 жыл бұрын
Как всегда, только самое нужное и интересное, без воды!!!
@PythonToday
@PythonToday 3 жыл бұрын
Спасибо большое за фидбэк!
@alinaveter7371
@alinaveter7371 3 жыл бұрын
@@PythonToday, огромное спасибо за ролики, очень полезная информация при обучении! Подскажите пожалуйста, нет ли у вас на примете аналогичного сайта? Просто текущий уже не работает...( Я взяла изначально на пробу другой динамический сайт, но при парсинге первой странице нет ни единого элемента, т.е. пусто на странице до первого движения колесиком
@ЮрийБлинов-л5м
@ЮрийБлинов-л5м 3 жыл бұрын
Нормальный, детальный обзор, с боевым проектом, где есть сложности и нюансы, такие как несколько страниц, запросы вложенные. Кстати хорошая тема просто сохранять как HTML страницы, тогда будут обычные HTML без json запросов и грязи) отличные урок продолжай, надо денежкой тебя отблагодарить !
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю!
@ЮрийБлинов-л5м
@ЮрийБлинов-л5м 3 жыл бұрын
@@Александр_1-й Коммент был для благодарности, за разъяснение логики парсинга, нежели самой технологии и еще как первый учебный проект на python, так как в основном пишу на js, php. Лично для меня по удобству конечно js лучше, я с него могу парсить все что мне надо используя puppeteer и тор браузер для обхода блокировок, а на счет кода выше, да думаю вы скорее всего правы, так как этот код не везде применим, но это скорее пособие для новичков)
@ЮрийБлинов-л5м
@ЮрийБлинов-л5м 3 жыл бұрын
@@Александр_1-й все же еще и от самого тз зависит, есть парсинги вообще которые обрабатывают тучу страниц и преобразуют их в отдельные файлы
@road2zion2
@road2zion2 4 жыл бұрын
Отличное видео! Спасибо! Продолжай обязательно!
@PythonToday
@PythonToday 4 жыл бұрын
Благодарю за фидбэк
@ZinFuku
@ZinFuku 2 жыл бұрын
Благодарю! Очень интересно и понятно объясняешь!
@Zizya1486
@Zizya1486 4 жыл бұрын
- удалит все теги в тексте.
@МихаилПаскин-ю5о
@МихаилПаскин-ю5о 2 жыл бұрын
Отличные уроки !!!! Если будете работаете на фрилансе не могли бы сделать новые уроки , на новых сайтах будет понятнее.
@amurlamur3125
@amurlamur3125 3 жыл бұрын
Я вообще дизайнер, но приятно порабить под твои видосы
@BorisenkoV89
@BorisenkoV89 3 жыл бұрын
Отличная подача материала. Спасибо большое
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк 👍
@akovemil9528
@akovemil9528 2 жыл бұрын
Спасибо!)Вдохновляешь! Мб...вопросы такие: 1)был ли опыт работы с прокси-серверами для парсинга? 2) имеется ли опыт обхода блокировок сайта для парсинга (блокировка по IP)? Будет ли видос по данным темам?
@denys5951
@denys5951 2 жыл бұрын
Спасибо за очень качественный контент
@radmirsharifullin5770
@radmirsharifullin5770 2 жыл бұрын
Отличный урок! Спасибо!
@PythonToday
@PythonToday 2 жыл бұрын
Благодарю!
@Ruslantuber
@Ruslantuber 3 жыл бұрын
легкий сайт без защит, капчи и прочего. Удобная задача, но в реальности в основном замудренные задачи с тестами тьюринга... где реквест рассыпается и помогает только селениум и то, через костыли.
@leonidasspartasson9759
@leonidasspartasson9759 4 жыл бұрын
Хотелось бы видеть побольше объектов, дабы переиспользовать их по нужде . А так всё супер.
@alexanderchemeza1772
@alexanderchemeza1772 Жыл бұрын
Если известна ссылка и необходимо менять число, лучше использовать while, выход по получению кода 404. Да и толка от записи html нет. Но для понимания основ сойдет
@iuriibuga5383
@iuriibuga5383 2 жыл бұрын
Огромное спасибо автору!!!!
@pishy_kommentu
@pishy_kommentu 3 жыл бұрын
Пожалуйста, кто-нибудь может написать под этим комментарии ссылку на сайт? Я не могу его найти.
@ЕвгенийПетров-и4в2р
@ЕвгенийПетров-и4в2р 4 жыл бұрын
Годно!
@plushfly900
@plushfly900 3 жыл бұрын
with open("projects.html", "w", encoding="utf-8") as file: file.write(req.text) - оставлю тут. Думаю не у меня одного будет ругаться на кодировку файла.
@PythonToday
@PythonToday 3 жыл бұрын
У всех, кто на windows)
@plushfly900
@plushfly900 3 жыл бұрын
@@PythonToday ну так ведь общее количество переглядывающих это обычные пользователи...а не владельцы маков)) Было бы круто если бы нашлось время про гугл драйв API так как в реальности разбираю и понимаю что все западные за него на базовом уровне чисто для пиара..а на деле сидишь сам ботанишь методом проб и ошибок..)
@Dan-er9vf
@Dan-er9vf 3 жыл бұрын
Ты лучший
@dodo-ip2hd
@dodo-ip2hd 3 жыл бұрын
Здравствуйте, не могли бы вы подсказать сайты подобные на представленному в уроке (он сейчас не доступен)
@affinozt2319
@affinozt2319 2 жыл бұрын
12:14 - *Cоздание список*
@selviont8443
@selviont8443 4 жыл бұрын
Автоматизация рутинных задач с помощью Python. Там хорошо объяснена тема регулярных выражений
@PythonToday
@PythonToday 4 жыл бұрын
Благодарю 💪
@deniskononov2708
@deniskononov2708 4 жыл бұрын
Плюсую! Если кому надо в электронном виде: yadi.sk/i/QmwgS3erpfADjw Если ссылки не желательны, удалю
@bigmek4051
@bigmek4051 Жыл бұрын
То чувство, когда видео длится 20 минут, а на его понимание, повторение о осознание всех процессов в коде тратишь часа по 3 ) Не так давно начал заниматься Python, освоил базу на каком-то бесплатном курсе, решил что будет интересно попробовать себя именно в этой сфере. Как практика Ваши уроки крайне полезны, хоть и не просты, этого не отнять 😅
@PythonToday
@PythonToday Жыл бұрын
Большое спасибо за фидбэк! За каждым видео стоят десятки часов работы. В том и смысл, дать максимум полезной информации, без воды за короткий промежуток времени.
@ProgrammingBro-e9t
@ProgrammingBro-e9t Жыл бұрын
Как успехи ?
@artpro9191
@artpro9191 4 жыл бұрын
Молодец. Растешь)
@ЕрмолинНикита-у7м
@ЕрмолинНикита-у7м 2 жыл бұрын
Супер! Спасибо за инфу!)
@vitaliyhusti
@vitaliyhusti 3 жыл бұрын
Спасибо огромнейшее за видео!
@PythonToday
@PythonToday 3 жыл бұрын
Спасибо за фидбэк!
@ИванЛюбаев-й5к
@ИванЛюбаев-й5к 3 жыл бұрын
Привет, как сделать такой же перенос длинных ссылок как на 16:24. При Hard wrap 120 и Wrap on tayping при вставке не делает перенос, только если пробелы поставить вручную
@GreekkAlex
@GreekkAlex 3 жыл бұрын
отличный урок! спасибо за гайд!👍🤘
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк 💪
@alexlotion5055
@alexlotion5055 Жыл бұрын
Решил попробовать собрать информацию с сайта Animego. Почему-то html страниц собираемый парсером отличается от того что пишется в браузере и фактически отображается на страницах.
@dimamalyk8608
@dimamalyk8608 4 жыл бұрын
Ролик оказался полезным, хотелось бы новую вершину, например парсинг Ютуба. К примеру, выгрузка комментов с видео.
@PythonToday
@PythonToday 4 жыл бұрын
Благодарю. У ютуба есть своё api, которое позволяет доставать много данных. Можно попробовать использовать его. По парсингу ютуба точно видео не будет. Чревато
@Gast1_GAME-gg5ro
@Gast1_GAME-gg5ro 8 ай бұрын
Почему у нас выходит ошибка "name error url"?
@squidwardtentacles7724
@squidwardtentacles7724 2 жыл бұрын
а как быть если это уже совершенно другой сайт, не тот что в ролике?
@jackmetropolitan7845
@jackmetropolitan7845 3 жыл бұрын
ТОП Контент!!! Спасибо.
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю!
@ajira8273
@ajira8273 3 жыл бұрын
Спасибо за очень познавательный урок! Но вот возник вопрос, я правильно понимаю, что парсер захардкожен на 23 страницы? У заказчика в будущем не возникнут проблемы, когда сайт перевалит за 23 страницы?
@АлександрВыскребцев
@АлександрВыскребцев 3 жыл бұрын
Это круто!!
@PythonToday
@PythonToday 3 жыл бұрын
Спасибо!
@MrSunchezz
@MrSunchezz 4 жыл бұрын
Использовать 'Requests' в век асинхронного Python, под музыкальный фон уроков от ХоудиХо... Да, это работает, но интересно уже что-то новое видеть, учитывая исключительно I/O-bound задачу.
@ПавелСеребренников-п5н
@ПавелСеребренников-п5н 3 жыл бұрын
ничего плохого в том, что автор вдохновился, уже всем известным ХаудиХо
@r1-yzf216
@r1-yzf216 Жыл бұрын
благодарю Вас за труд!
@PythonToday
@PythonToday Жыл бұрын
Благодарю за фидбэк!
@r1-yzf216
@r1-yzf216 Жыл бұрын
@@PythonToday как с Вами связаться, у меня есть предложение к Вам
@ivanzozulia8857
@ivanzozulia8857 Жыл бұрын
Ребят, видео супер. Подскажите пожалуйста на моменте 14:09 при сохранении файлов (html) в папку, сохраняет в папку только один файл (последний) на странице, в чем может быть ошибка?
@Fiz_kent23
@Fiz_kent23 9 ай бұрын
А на какой платформе вы принимаете задания от клиентов и актуально ли это сейчас?
@АлександрБельтипетеров
@АлександрБельтипетеров 3 жыл бұрын
Может здесь это сообщение увидят. Не получается собрать данные с сайта криптовалют coinmarketcap (это пример из старого курса по парсингу, тогда сайт работал иначе). На этом сайте есть 100 позиций на каждой странице, там вся информация по валютам, так вот удаётся собрать информацию только с первых 10 позиций, а дальше программа возвращает пустые значения, потому что остальные позиции подгружаются в процессе скроллинга страницы, но во вкладке Сеть ничего подобного как в этом видео нет, соответственно непонятно куда лезть и что делать, чтобы собирать данные с подобных сайтов. Прошу помощи у знающих людей, что это за явление и как с ним работать? Благодарю за внимание!
@pavelsaichkin7742
@pavelsaichkin7742 3 жыл бұрын
Спасибо за контент!
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк!
@MrPavel1207
@MrPavel1207 4 ай бұрын
большое спасибо за видео. маленький вопрос - при формировании json флаг 'a' не обязателен (мы вроде один раз весь словарь записываем) или я ошибаюсь?
@Koshsky-f7y
@Koshsky-f7y 4 жыл бұрын
Заменить группу символов в слове. Довольно удобно New_word = "".join([i if i not in ("b", "a", "n", "l", "e", "t", "r" ) else "_" for i in old_word])
@sinoikromov7322
@sinoikromov7322 3 жыл бұрын
Сайт обновили что нету страница стартапа
@pythonx8732
@pythonx8732 3 жыл бұрын
Здравствуйте еще раз, помогите пожалуйста. Есть сайт госреестр.рф там при поиске урл не меняется. а мне нужно парсить его. Как это реализовать? Заранее спасибо
@ДенисСюсин-р1е
@ДенисСюсин-р1е 3 жыл бұрын
На 3:20 вы говорите -"воспользуемся поиском..." вы какие-то горячие клавиши используете для открытия поисковой строчки? Я тоже пользуюсь пайчармом.
@PythonToday
@PythonToday 3 жыл бұрын
ctrl + f ?
@agrxlol
@agrxlol 2 жыл бұрын
Вопрос по дальнейшей публикации данных через wordpress: есть ли какой-то разбор, как это напарсенное (для статей например с использованием advanced custom fields) разместить на сайте с помощью питона?
@sjotik
@sjotik 2 жыл бұрын
Круто, спасибо. Но вопрос: сайт динамический и данные в нем добавляются. Как только пагинаций станет более 23-х результат будет неполный. Возможно ли кодом написать проверку на поиск последнего индекса пагинации? Было бы интересно посмотреть реализацию такой логики, чтобы парсеру было "пофиг" на изменение количества позиций-записей и он работал долго и счастливо)). А в целом ОГРОМНОЕ спасибо!!! Тема парсинга очень широка и дает много возможностей для воплощения идей в реальность.
@jackdaniel127
@jackdaniel127 2 жыл бұрын
цикл while true / break и внутри try/except и проверку на ответ сервера или наличие данных
@imfiwile8995
@imfiwile8995 Жыл бұрын
Можешь попробовать через проверку status_code сделать, если на сайте 404 код отправляется, когда за пагинацию выходишь Или через try/except отлавливать, когда нет контента на странице и прекращать парсинг
@6blctpo_cnatb464
@6blctpo_cnatb464 Жыл бұрын
Сайт, который вы выбрали для примера раскрытия темы имеет сильно другую конфигурацию. Посоветуйте подобный для практического разбора
@Simple-r4l
@Simple-r4l 4 жыл бұрын
Просто лучший!
@PythonToday
@PythonToday 4 жыл бұрын
Благодарю 💪
@Simple-r4l
@Simple-r4l 4 жыл бұрын
@@PythonToday скажи пожалуйста, мне нужно спарсить елемент, но он доступен только после нажатия кнопки, можешь снять ролик или подсказать здесь как решить эту проблему? Спасибо за труды
@PythonToday
@PythonToday 4 жыл бұрын
@@Simple-r4l Воспользуйся библиотекой Selenium(активно использовали в плейлисте по instagram боту), нажми на кнопку и забирай все, что нужно.
@Simple-r4l
@Simple-r4l 4 жыл бұрын
@@PythonToday Ахах, спасибо, даже не думал)
@СакенБоранкулов-е8л
@СакенБоранкулов-е8л 3 жыл бұрын
Ай красавчик
@PythonToday
@PythonToday 3 жыл бұрын
Большое спасибо!
@ve2376
@ve2376 3 жыл бұрын
Итак, мы вместе выполнили заказ на фрилансе, где получать свою долю? :) *Спасибо за полезную информацию.
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк!
@AtomNuclearChannel
@AtomNuclearChannel 4 жыл бұрын
Спасибо за поучительный видеоролик! Как всегда все понятно и подробно рассказано и показано!
@PythonToday
@PythonToday 4 жыл бұрын
Спасибо 👍
@НиколайБардаков-б5щ
@НиколайБардаков-б5щ 7 ай бұрын
Бро, учился парсингу по твоим роликам. Хотел устроиться в одну конторку для написания парсеров. В качестве тестового задания писал парсер с яндекс-карт. В итоге получил отказ по причине того, что код слишком базовый. Как выглядит НЕбазовый код - загадка.
@serpol4ik
@serpol4ik Жыл бұрын
Это очень кртуо!
@gowaw834
@gowaw834 4 жыл бұрын
спасибо все ясно, понятно.
@PythonToday
@PythonToday 4 жыл бұрын
Благодарю 💪
@Михаил-з1ь3д
@Михаил-з1ь3д Жыл бұрын
Пробую парсить другой сайт по этому уроку. По get запросу получаю 404 в голове и центре, боди просто пустая. Пробую менять заголовки, пока не нашел решения, если кто знает подскажите куда капнуть)
@СергейНауменко-ь6н
@СергейНауменко-ь6н 2 жыл бұрын
подскажите пожалуйста столкнулся с такой ошибкой при попытке распарсить сайт: return codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 1583: character maps to проблема в кодировке страницы, посоветуйте что-нибудь?
@inosensey6893
@inosensey6893 3 жыл бұрын
Классный видос, только зачем тут selenium? Он не использовался в коде
@AmbassadorOfLogic
@AmbassadorOfLogic 3 жыл бұрын
блин, а че делать, если после операции на 2:54, у меня выдает javascript вместо html??
@Vladimir-re8xl
@Vladimir-re8xl 3 жыл бұрын
расширение html указываете?
@ivankirshchin1228
@ivankirshchin1228 2 жыл бұрын
хотел повторять за автором написание кода, но не смог, т.к. сегодня, 30 ноября 2022 сайт, который препарирует автор уже не такой :(
@alex-shitov
@alex-shitov 2 жыл бұрын
Как я понял, сайт теперь не работает
@musicforyou1380
@musicforyou1380 Жыл бұрын
4:05...всё идет по плану. Знал бы автор, что это за выражение будет вскоре...
@takiekakmi7532
@takiekakmi7532 3 жыл бұрын
У меня возможно тупой вопрос, но все-же: есть ли какой-то вариант прикрутить декоратор не к результату функции, а к итерации цикла for в ней (чтобы не писать в теле функции переменные со счётчиком итерации, а вынести это все в декоратор)????
@evgeniiwjay6177
@evgeniiwjay6177 2 жыл бұрын
Всем добрый день. не могу разобраться почему при данном коде images = soup.find_all('div', class_='carousel__item custom-carousel__item').find('a').get('href') выдает ошибку AttributeError: ResultSet object has no attribute 'find'? помогите плз
@zxcvvbnn
@zxcvvbnn 3 жыл бұрын
а сайта-то нету(
@alexhovsepyan5333
@alexhovsepyan5333 Жыл бұрын
А мы не можем просто с классом взять тот элемент который нам нужен, а не взять родителя а потом нужный элемент?
@mikhail6188
@mikhail6188 Жыл бұрын
не удается получить доступ к сайту :(
@user-tp2cq7yq9g
@user-tp2cq7yq9g Жыл бұрын
у меня тоже :( надо залайкать тебя, чтобы наверх пробились наши проблемы
@user-tp2cq7yq9g
@user-tp2cq7yq9g Жыл бұрын
ну точнее как... Сай то у меня открылся а вот страница со всеми стартапами и их страницами в частности нет... У тебя также?
@mikhail6188
@mikhail6188 Жыл бұрын
По всей видимости его не вернут, смотрим запоминаем, переходим к следующему уроку, я, например, парсил на свой выбор, и перешёл к следующему уроку
@user-tp2cq7yq9g
@user-tp2cq7yq9g Жыл бұрын
@@mikhail6188 Я тоже. Тем более следующий урок тоже с динамически подгружаемыми данными...
@ИванИванов-ш1ш1й
@ИванИванов-ш1ш1й 3 жыл бұрын
как взять с одного сайта какую та инфу и автоматом выложить её на другом? дайте кто ни бдуь ссылку на такое видео. или скажите кк оно называется, это явно ен парсинг.
@arhigeneral
@arhigeneral 3 жыл бұрын
Начал недавно смотреть эти ролики, у меня у одного сайт который в видео не работает?
@abdumannonmurodiy
@abdumannonmurodiy 3 жыл бұрын
Здраствуйте можете подсказать как получить свой --access token
@PythonToday
@PythonToday 3 жыл бұрын
Привет, о каком -access token идет речь?
@abdumannonmurodiy
@abdumannonmurodiy 3 жыл бұрын
@@PythonToday я имел ввиду как можно получит токен через cookie
@Alex-hh5oe
@Alex-hh5oe 4 жыл бұрын
У меня после после сохранения файла html кириллица отображается в виде вопросительных знаков. Как можно подкрутить кодировку, чтобы это исправить? Заранее спасибо!
@PythonToday
@PythonToday 4 жыл бұрын
Добавь при сохранении файла параметр encoding="utf-8"
@illuminate3151
@illuminate3151 2 жыл бұрын
а зачем передавать заголовки headers?
@ВладимирВермутов
@ВладимирВермутов Жыл бұрын
слушай друг подскажи где ты такие адекватные заказы находишь))
@bambimbambas
@bambimbambas 4 жыл бұрын
Очень прошу вас помочь. Я запутался. Я писал всё по вашему примеру, но более структурировал код и запутался, когда в игру вошла пагинация. Я разделил проект на два файла: файл, который проверяет страницу на 200ый респонс, и осовной файл. Проблема в том, что я не понимаю как и куда впихнуть ссылку с пагинами, взятую из вкладки "сеть" в консоли разраба - получается список, в котором 9 словарей по 23 одинаковых экземпляра. Вот файл, который проверяет респонсе: import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent def get_html_tree(url): headers = {'user-agent': UserAgent().Chrome} html = requests.get(url, headers) if html.status_code == 200: soup = BeautifulSoup(html.text, 'lxml') return {'html': html.text, 'soup': soup} raise Warning('HTML страница не отвечает.') Вот основной файл: from html_page import get_html_tree HOST = 'www.edutainme.ru/edindex' URL = 'www.edutainme.ru/edindex/ajax.php?params=%7B%22LETTER%22%3Anull%2C%22RESTART%22%3A%22N%22%2C%22CHECK_DATES%22%3Afalse%2C%22arrWHERE%22%3A%5B%22iblock_startaps%22%5D%2C%22arrFILTER%22%3A%5B%22iblock_startaps%22%5D%2C%22startups%22%3A%22Y%22%2C%22SHOW_WHERE%22%3Atrue%2C%22PAGE_RESULT_COUNT%22%3A9%2C%22CACHE_TYPE%22%3A%22A%22%2C%22CACHE_TIME%22%3A0%2C%22TAGS_SORT%22%3A%22NAME%22%2C%22TAGS_PAGE_ELEMENTS%22%3A%22999999999999999999%22%2C%22TAGS_PERIOD%22%3A%22%22%2C%22TAGS_URL_SEARCH%22%3A%22%22%2C%22TAGS_INHERIT%22%3A%22Y%22%2C%22SHOW_RATING%22%3A%22Y%22%2C%22FONT_MAX%22%3A%2214%22%2C%22FONT_MIN%22%3A%2214%22%2C%22COLOR_NEW%22%3A%22000000%22%2C%22COLOR_OLD%22%3A%22C8C8C8%22%2C%22PERIOD_NEW_TAGS%22%3A%22%22%2C%22DISPLAY_TOP_PAGER%22%3A%22N%22%2C%22DISPLAY_BOTTOM_PAGER%22%3A%22N%22%2C%22SHOW_CHAIN%22%3A%22Y%22%2C%22COLOR_TYPE%22%3A%22Y%22%2C%22WIDTH%22%3A%22100%25%22%2C%22USE_LANGUAGE_GUESS%22%3A%22N%22%2C%22PATH_TO_USER_PROFILE%22%3A%22%23SITE_DIR%23people%5C%2Fuser%5C%2F%23USER_ID%23%5C%2F%22%2C%22SHOW_WHEN%22%3Afalse%2C%22PAGER_TITLE%22%3A%22%5Cu0420%5Cu0435%5Cu0437%5Cu0443%5Cu043b%5Cu044c%5Cu0442%5Cu0430%5Cu0442%5Cu044b+%5Cu043f%5Cu043e%5Cu0438%5Cu0441%5Cu043a%5Cu0430%22%2C%22PAGER_SHOW_ALWAYS%22%3Atrue%2C%22USE_TITLE_RANK%22%3Afalse%2C%22PAGER_TEMPLATE%22%3A%22%22%2C%22DEFAULT_SORT%22%3A%22rank%22%2C%22noTitle%22%3A%22Y%22%7D&' def get_links_pages_projects(url): code = get_html_tree(url) articles = code['soup'].find('div', class_='threeColumn').find_all('article', class_='listItem') links_to_projects = [] for article in articles: link = url[:-8] + article.find('div', class_='txtBlock').find('a', class_='absolute').get('href') links_to_projects.append(link) print(links_to_projects) return links_to_projects def all_info_about_projects(host, url): projects_data_list = [] counter_pages = 1 while True: pagination = get_html_tree(url + f'&PAGEN_1={counter_pages}&PAGEN_2={counter_pages}')['soup'] if pagination.find('div') == None: break print(f'Parsing page number {counter_pages}') counter_projects = 1 for project in get_links_pages_projects(host): print(project) print(f'. . . . Parsing project number {counter_projects}') project_split = project.split('/')[:-1] html_and_soup = get_html_tree(project) with open(f'Info_Pages/{project_split[-1]}.html', 'w', encoding='utf-8') as file: file.write(html_and_soup['html']) try: project_logo = project[:-1] + html_and_soup['soup'].find('div', class_='Img logo').find('img').get('src') except AttributeError: project_logo = 'No Logo' try: project_name = html_and_soup['soup'].find('div', class_='txt').find('h1').get_text() except AttributeError: project_name = 'No title' try: project_header = html_and_soup['soup'].find('h4', class_='head').get_text() except AttributeError: project_header = 'No title 4' try: project_website = html_and_soup['soup'].find('div', class_='txt').find('p').find('a').get('href') except AttributeError: project_website = project try: project_description = html_and_soup['soup'].find('div', class_='textBlock').find('div', class_='rBlock').find('p').get_text() except AttributeError: project_description = 'No description' projects_data_list.append({ 'project_logo': project_logo, 'project_name': project_name, 'project_header': project_header, 'project_website': project_website, 'project_description': project_description }) counter_projects += 1 counter_pages += 1 print(projects_data_list) all_info_about_projects(HOST, URL) И да, у меня без записи в жсон файл, так как пока что данные не верны. Очень жду ваш ответ. Спасибо !!!
@Andrey_Grishin_primera7790
@Andrey_Grishin_primera7790 2 жыл бұрын
помогите, пожалуйста, понять!) второе видео к ряду задаюсь вопросом, зачем при записи сформированного списка в .json файл используется флаг "a"? ведь выглядит логичней "w".. что я упускаю?
@Andrey_Grishin_primera7790
@Andrey_Grishin_primera7790 2 жыл бұрын
@Ender Dragon так, судя по коду, в любом случае при каждом запуске происходит наполнение списка и дальнейшая запись в json, что при "a" варианте многое просто задублирует. да и автор перед каждым новым запуском удалял все файлы.. вопрос остался открытым) возможно я ищу проблему там, где её нет и это просто привычка автора и не более..
@Alexey1723
@Alexey1723 4 жыл бұрын
А как в projects_data_list = [] добавить еще и ссылки из project_urls = [] ?
@Alexey1723
@Alexey1723 4 жыл бұрын
Все, сам разобрался)
@PythonToday
@PythonToday 4 жыл бұрын
😀👍
@Vladimir-re8xl
@Vladimir-re8xl 3 жыл бұрын
Круто)
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю!
@Vladimir-re8xl
@Vladimir-re8xl 3 жыл бұрын
@@PythonTodayне используете опп в своей практике? Хотелось бы посмотреть на парсинг в ооп стиле.
@PythonToday
@PythonToday 3 жыл бұрын
@@Vladimir-re8xl Например? Не совсем понятно для чего при парсинге использовать ООП. Каждый сайт индивидуален. Можно всё обернуть в класс, но зачем, на основе этого класса нет смысла создавать объекты. Или не правильно понял?
@SeriesWOT
@SeriesWOT 4 жыл бұрын
Привет, скажите у кого была проблема с кодировкой UnicodeEncodeError: 'charmap' codec can't encode character '\ufeff' in position 5670: character maps to и как это можно исправить
@PythonToday
@PythonToday 4 жыл бұрын
Что же все на винде то сидят. Попробуй всегда когда работаешь с сохранением файла дописывать параметр encoding="utf-8"
@SeriesWOT
@SeriesWOT 4 жыл бұрын
@@PythonToday Спасибо за ответ, помогло )
@SeriesWOT
@SeriesWOT 4 жыл бұрын
@@PythonToday Попробовал линь не зашло)
@PythonToday
@PythonToday 4 жыл бұрын
Да я тоже даленько не специалист в нём. Всё заводится из коробки, а на винде часто бывают траблы.
@SeriesWOT
@SeriesWOT 4 жыл бұрын
@@PythonToday ;)Ок
@ffonlfoff5005
@ffonlfoff5005 2 жыл бұрын
Приветствую. А как вы клиенту данный код передавали? упаковывали в ехе? или это разовая работа и вы передали только файлы с результатом?
@k2d4e60
@k2d4e60 2 жыл бұрын
Честно говоря, я тоже ещё не понимаю как передавать готовые проекты заказчику, если как нибудь в конце видео это было бы озвучено, было бы вообще супер
@devZu9
@devZu9 4 жыл бұрын
Эх, когда же уже будет урок с авторизацией, куками и сессией?
@PythonToday
@PythonToday 4 жыл бұрын
Запишу как нибудь. Там же 10 строчек. В google полно примеров)
@ВикторЖидов
@ВикторЖидов 4 жыл бұрын
@@PythonToday Поддерживаю про авторизацию. Интересна не простая авторизация, а сторонняя. Например, парсинг ЛК Кинопоиска. Там авторизация происходит на стороне через yandex.passport. Тут нужны печеньки, сессия и т.п. Также сложность в том, что если открыть панель разработчика, можно увидеть огромное кол-во запросов, и без опыта сложно разобрать, что к чему относится и какая важная часть запроса нужна. Если созреете готов профинансировать такое разбор-видео)
@nyakakun3398
@nyakakun3398 3 жыл бұрын
Спасибо! ;3
@software9256
@software9256 4 жыл бұрын
все хорошо а как сприть такое нужны value это все есть в в обекте soup var handler = function() { doc.gethertId("godf").value = "gf234re12d"; doc.gethertId("godfh").value = "kbJJIgmP+YS3sslJ746XMWwXh+s="; var form = doc.gethertId("login_form"); if (form.addEventListener) { form.addEventListener("submit", handler, false); else if (form.attachEvent) { form.attachEvent("onsubmit", handler);
@PythonToday
@PythonToday 4 жыл бұрын
Это же js. Мне кажется тут проще в строку прочитать файл и забрать значения срезом например если мы о Python говорим.
黑天使被操控了#short #angel #clown
00:40
Super Beauty team
Рет қаралды 61 МЛН
ПАРСЕР AVITO на PYTHON | BeautifulSoup4 | Requests
5:16
Мелсик
Рет қаралды 38 М.
Парсинг динамических сайтов | selenium python
43:00
Алексей Куличевский
Рет қаралды 17 М.
Docker Для Начинающих за 1 Час | Docker с Нуля
52:43