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

  Рет қаралды 139,734

PythonToday

PythonToday

Күн бұрын

Обучение (Web-Scraping) веб парсингу на Python. В данном видео выполним заказ на фрилансе и разберем на практике работу с библиотеками requests и Beautifulsoup4. Научимся делать запросы к динамическому веб сайту, сохранять страницы, парсить из них нужную нам информацию и рассмотрим сохранение данных в json файл.
🔥 Доступ в приват | Поддержать проект:
boosty.to/pythontoday
/ pythontoday
yoomoney.ru/to/410019570956160
🔥 Стать спонсором канала:
/ @pythontoday
Таймкоды:
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 - Запуск парсера
****Ссылки****
Обучение парсингу на Python #1 | Парсинг сайтов | Разбираем методы библиотеки Beautifulsoup
• Обучение парсингу на P...
Обучение парсингу на Python #2 | Парсинг сайтов | Выполняем заказ на фрилансе
• Обучение парсингу на P...
Документация Beautifulsoup:
EN: www.crummy.com/software/Beaut...
RU: www.crummy.com/software/Beaut...
Код проекта на github:
github.com/pythontoday/scrap_...
И в telegram канале:
t.me/python2day
****Соц.сети****
Telegram: t.me/python2day

Пікірлер: 329
@PythonToday
@PythonToday 3 жыл бұрын
Таймкоды для вас: 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 3 жыл бұрын
Опять годнота)
@matrixxd6842
@matrixxd6842 Жыл бұрын
я не понимаю как сделать терминал как у тебя у меня там PS C:\Users\User\Desktop> вот так выходит я пишу как у тебя но все ровно не получается
@user-ch1pi8ce3d
@user-ch1pi8ce3d Жыл бұрын
Я понимаю что код написан быстро, но для новичков нужно будет учесть несколько не критичных, но ошибок в коде: 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😊
@user-vt6zb4pl9m
@user-vt6zb4pl9m 9 ай бұрын
Спасибо, друг
@SAVSAV1212
@SAVSAV1212 7 ай бұрын
А как называется ошибка, связанная с прерыванием программы Ctrl + C?
@user-ch1pi8ce3d
@user-ch1pi8ce3d 7 ай бұрын
@@SAVSAV1212 KeyboardInterrupt
@Jon_Britva
@Jon_Britva 2 ай бұрын
09:40 - Try except: отдельное спасибо за огромную подсказку
@aeca4284
@aeca4284 3 жыл бұрын
Без слов, это было четко, ясно, понятно, КРАСИВО!
@tenebris8800
@tenebris8800 3 жыл бұрын
шикарные видосы продолжай пожалуйста)))
@ruservices
@ruservices 3 жыл бұрын
Супер!!! Смотреть одно наслождение. Видна рука проффесионала. Спасибо за видео!
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю 😀 Но я только учусь, и делюсь опытом. Далеко не профессионал
@DenisE25100
@DenisE25100 Жыл бұрын
Вы молодец. Не надо бояться делиться знаниями. Правда молодец. 😊
@pythonx8732
@pythonx8732 3 жыл бұрын
Уроки очень классные, только одна просьба можете ТЗ показывать, было бы очень интересно
@user-dp1ke7bx7c
@user-dp1ke7bx7c 2 жыл бұрын
Круто подметили
@DrZlad
@DrZlad 2 жыл бұрын
А вот тут то и начинается настоящее искусство - транслировать- тз.
@begula_chan
@begula_chan Жыл бұрын
Искренне благодарю за видео. Было очень полезно узнать про динамический сбор данных со страницы. Постараюсь сделать что-то похожее на вашу программу, уж очень мне нравится делать парсеры. Когда начну работать на фрилансе, первым делом поддержу вас и ваш канал копеечкой за неоценимый труд.
@road2zion2
@road2zion2 3 жыл бұрын
Отличное видео! Спасибо! Продолжай обязательно!
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк
@ZinFuku
@ZinFuku 2 жыл бұрын
Благодарю! Очень интересно и понятно объясняешь!
@HeyArtem
@HeyArtem 2 жыл бұрын
Как всегда, только самое нужное и интересное, без воды!!!
@PythonToday
@PythonToday 2 жыл бұрын
Спасибо большое за фидбэк!
@alinaveter7371
@alinaveter7371 2 жыл бұрын
@@PythonToday, огромное спасибо за ролики, очень полезная информация при обучении! Подскажите пожалуйста, нет ли у вас на примете аналогичного сайта? Просто текущий уже не работает...( Я взяла изначально на пробу другой динамический сайт, но при парсинге первой странице нет ни единого элемента, т.е. пусто на странице до первого движения колесиком
@user-gz7yc4vi1y
@user-gz7yc4vi1y 3 жыл бұрын
допарсились. нет больше этого сайта))
@DiMoNy4
@DiMoNy4 Жыл бұрын
Этот сайтик был из тех, кто просто любил жизнь...
@SherinYuri
@SherinYuri Ай бұрын
Сайт есть, но он изменился. Ну тем интереснее. Будем его изучать. Не все же время готовое списывать. ))))
@BorisenkoV89
@BorisenkoV89 3 жыл бұрын
Отличная подача материала. Спасибо большое
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк 👍
@user-wg6fe7gg6p
@user-wg6fe7gg6p 2 жыл бұрын
Для домашнего задания кто занимается доработайте код так что бы он обрабатывал не 23 страницы а все с учётом того что могут быть добавлены страницы. Очень интересное видео. Автору спасибо.
@denys5951
@denys5951 2 жыл бұрын
Спасибо за очень качественный контент
@GreekkAlex
@GreekkAlex 3 жыл бұрын
отличный урок! спасибо за гайд!👍🤘
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк 💪
@user-on2wn6pq8d
@user-on2wn6pq8d 3 жыл бұрын
Очень круто и понятно объясняешь Я давно такой канал искал Желаю успехов
@PythonToday
@PythonToday 3 жыл бұрын
Спасибо 💪 Главная награда, мотивирует продолжать
@user-ig1hf8fb7r
@user-ig1hf8fb7r 3 жыл бұрын
Ты большой молодец! Спасибо тебе
@PythonToday
@PythonToday 3 жыл бұрын
Спасибо за фидбэк
@user-iy6vk4pn1j
@user-iy6vk4pn1j 3 жыл бұрын
@@PythonToday реально красавца!!
@radmirsharifullin5770
@radmirsharifullin5770 2 жыл бұрын
Отличный урок! Спасибо!
@PythonToday
@PythonToday 2 жыл бұрын
Благодарю!
@evgeniyvojtik64
@evgeniyvojtik64 3 жыл бұрын
Большое спасибо за прекрасный материал
@PythonToday
@PythonToday 3 жыл бұрын
Спасибо за фидбэк!
@iuriibuga5383
@iuriibuga5383 Жыл бұрын
Огромное спасибо автору!!!!
@makedatauseful1015
@makedatauseful1015 2 жыл бұрын
с помощью вашего канала зашел в программирование, большое спасибо
@PythonToday
@PythonToday 2 жыл бұрын
Уууу, поздравляю. Главное практика, успехов 👍
@user-po3sg7vn4y
@user-po3sg7vn4y Жыл бұрын
Супер! Спасибо за инфу!)
@leonidasspartasson9759
@leonidasspartasson9759 3 жыл бұрын
Хотелось бы видеть побольше объектов, дабы переиспользовать их по нужде . А так всё супер.
@vitaliyhusti
@vitaliyhusti 3 жыл бұрын
Спасибо огромнейшее за видео!
@PythonToday
@PythonToday 3 жыл бұрын
Спасибо за фидбэк!
@artpro9191
@artpro9191 3 жыл бұрын
Молодец. Растешь)
@user-cj7if7us8u
@user-cj7if7us8u 3 жыл бұрын
Годно!
@set1qs
@set1qs Жыл бұрын
Как же ты меня мотивируешь ) я кажется знаю чем буду заниматься) именно парить, очень красиво получается!
@PythonToday
@PythonToday Жыл бұрын
"Парить" - это что-то другое) Спасибо за фидбэк! Рад что видео интересны.
@set1qs
@set1qs Жыл бұрын
@@PythonToday опечатка :))) именно парсить 🤗
@jackmetropolitan7845
@jackmetropolitan7845 3 жыл бұрын
ТОП Контент!!! Спасибо.
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю!
@user-if3qe4oj2n
@user-if3qe4oj2n 3 жыл бұрын
Ты чёртов гений, я с этой пагинацией мучаюсь 2-ой день, всякие видео смотрю, stackoverflow чекаю, нихрена не помогало, ну не работало и всё, зашёл к тебе, а тут, просто тупо через request запрос делаешь и всё, никакие параметры не нужны, отличные гайды, просто идеальные.
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк 💪
@user-if3qe4oj2n
@user-if3qe4oj2n 2 жыл бұрын
@@user-hv4or2mz9q, там вроде все продукты на flex блоках, кстати не знаете как парятся подобные вещи?
@takiekakmi7532
@takiekakmi7532 3 жыл бұрын
Это было круто! Сначала - все казалось огромным драконищем, а оказалось - дело разбора на 2-3 дня. Пасяб - теперь можно топать выполнять заказы👍)
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк!
@squidwardtentacles7724
@squidwardtentacles7724 Жыл бұрын
как вы разбирали видео? гуглили что делает каждая строчка?
@takiekakmi7532
@takiekakmi7532 Жыл бұрын
@@squidwardtentacles7724 нет конечно) код же весьма логичен. А вообще - самый простой способ - повторить, разбить на функции и написать тесты. И, разумеется, смотреть в документацию периодически
@squidwardtentacles7724
@squidwardtentacles7724 Жыл бұрын
@@takiekakmi7532 как успехи сегодня в парсинге? Вы еще учитесь? я ищу себе единомышленников, я подросток с хромой базой Python(нужно повторить темы ООП, методов и функций), хочу научиться парсингу и ищу единомышленников
@kostya2222
@kostya2222 Жыл бұрын
@@squidwardtentacles7724 Тоже подросток, и желаю научиться парсингу) мыслим мы одинаково
@user-de7vk7gm7b
@user-de7vk7gm7b 3 жыл бұрын
Это круто!!
@PythonToday
@PythonToday 3 жыл бұрын
Спасибо!
@amurlamur3125
@amurlamur3125 3 жыл бұрын
Я вообще дизайнер, но приятно порабить под твои видосы
@AtomNuclearChannel
@AtomNuclearChannel 3 жыл бұрын
Спасибо за поучительный видеоролик! Как всегда все понятно и подробно рассказано и показано!
@PythonToday
@PythonToday 3 жыл бұрын
Спасибо 👍
@r1-yzf216
@r1-yzf216 Жыл бұрын
благодарю Вас за труд!
@PythonToday
@PythonToday Жыл бұрын
Благодарю за фидбэк!
@r1-yzf216
@r1-yzf216 Жыл бұрын
@@PythonToday как с Вами связаться, у меня есть предложение к Вам
@user-cx7iz8pw4c
@user-cx7iz8pw4c Жыл бұрын
Отличные уроки !!!! Если будете работаете на фрилансе не могли бы сделать новые уроки , на новых сайтах будет понятнее.
@gowaw834
@gowaw834 3 жыл бұрын
спасибо все ясно, понятно.
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю 💪
@akovemil9528
@akovemil9528 2 жыл бұрын
Спасибо!)Вдохновляешь! Мб...вопросы такие: 1)был ли опыт работы с прокси-серверами для парсинга? 2) имеется ли опыт обхода блокировок сайта для парсинга (блокировка по IP)? Будет ли видос по данным темам?
@nyakakun3398
@nyakakun3398 3 жыл бұрын
Спасибо! ;3
@serpol4ik
@serpol4ik 6 ай бұрын
Это очень кртуо!
@crussaider
@crussaider 2 жыл бұрын
Все по классике: сначала написал код, потом решил посмотреть гайд. Хорошо, что мой код пока что никто не видел))
@PythonToday
@PythonToday 2 жыл бұрын
Да всё ок, это самая лучшая практика!
@user-vg4kj7mx2z
@user-vg4kj7mx2z 3 жыл бұрын
спасибо все грамотно
@user-zj1cb7cz3f
@user-zj1cb7cz3f 3 жыл бұрын
Просто лучший!
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю 💪
@user-zj1cb7cz3f
@user-zj1cb7cz3f 3 жыл бұрын
@@PythonToday скажи пожалуйста, мне нужно спарсить елемент, но он доступен только после нажатия кнопки, можешь снять ролик или подсказать здесь как решить эту проблему? Спасибо за труды
@PythonToday
@PythonToday 3 жыл бұрын
@@user-zj1cb7cz3f Воспользуйся библиотекой Selenium(активно использовали в плейлисте по instagram боту), нажми на кнопку и забирай все, что нужно.
@user-zj1cb7cz3f
@user-zj1cb7cz3f 3 жыл бұрын
@@PythonToday Ахах, спасибо, даже не думал)
@user-qi9ts9xd6f
@user-qi9ts9xd6f 2 жыл бұрын
Ай красавчик
@PythonToday
@PythonToday 2 жыл бұрын
Большое спасибо!
@user-qe9pd1yk3k
@user-qe9pd1yk3k 3 жыл бұрын
Нормальный, детальный обзор, с боевым проектом, где есть сложности и нюансы, такие как несколько страниц, запросы вложенные. Кстати хорошая тема просто сохранять как HTML страницы, тогда будут обычные HTML без json запросов и грязи) отличные урок продолжай, надо денежкой тебя отблагодарить !
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю!
@user-qe9pd1yk3k
@user-qe9pd1yk3k 2 жыл бұрын
@@user-hv4or2mz9q Коммент был для благодарности, за разъяснение логики парсинга, нежели самой технологии и еще как первый учебный проект на python, так как в основном пишу на js, php. Лично для меня по удобству конечно js лучше, я с него могу парсить все что мне надо используя puppeteer и тор браузер для обхода блокировок, а на счет кода выше, да думаю вы скорее всего правы, так как этот код не везде применим, но это скорее пособие для новичков)
@user-qe9pd1yk3k
@user-qe9pd1yk3k 2 жыл бұрын
@@user-hv4or2mz9q все же еще и от самого тз зависит, есть парсинги вообще которые обрабатывают тучу страниц и преобразуют их в отдельные файлы
@dimamalyk8608
@dimamalyk8608 3 жыл бұрын
Ролик оказался полезным, хотелось бы новую вершину, например парсинг Ютуба. К примеру, выгрузка комментов с видео.
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю. У ютуба есть своё api, которое позволяет доставать много данных. Можно попробовать использовать его. По парсингу ютуба точно видео не будет. Чревато
@simpleanalysis1946
@simpleanalysis1946 2 жыл бұрын
Спасибо
@Vladimir-re8xl
@Vladimir-re8xl 3 жыл бұрын
Круто)
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю!
@Vladimir-re8xl
@Vladimir-re8xl 3 жыл бұрын
@@PythonTodayне используете опп в своей практике? Хотелось бы посмотреть на парсинг в ооп стиле.
@PythonToday
@PythonToday 3 жыл бұрын
@@Vladimir-re8xl Например? Не совсем понятно для чего при парсинге использовать ООП. Каждый сайт индивидуален. Можно всё обернуть в класс, но зачем, на основе этого класса нет смысла создавать объекты. Или не правильно понял?
@turalnagi
@turalnagi 2 жыл бұрын
super
@Monte_Cristo_R
@Monte_Cristo_R 3 жыл бұрын
спасибо очень полезно) !!! И конечно же было бы неплохо узнать как работать с API , ключами и так далее, на сайтах где надо авторизоваться например ВК или опять же какая то торговая биржа ))))
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк 👍 Но ведь у API есть подробные документации, там ведь вообще не нужно заморачиваться)
@nikitabbrv5947
@nikitabbrv5947 3 жыл бұрын
@@PythonToday то, что синьорам кажется элементарно, джунам и интерном - как будто "в тумане". )
@djdkdkrk
@djdkdkrk Жыл бұрын
ага, сколько я копался в доках/инете чтоб спарсить вк, чертов ад
@ajira8273
@ajira8273 2 жыл бұрын
Спасибо за очень познавательный урок! Но вот возник вопрос, я правильно понимаю, что парсер захардкожен на 23 страницы? У заказчика в будущем не возникнут проблемы, когда сайт перевалит за 23 страницы?
@bigmek4051
@bigmek4051 Жыл бұрын
То чувство, когда видео длится 20 минут, а на его понимание, повторение о осознание всех процессов в коде тратишь часа по 3 ) Не так давно начал заниматься Python, освоил базу на каком-то бесплатном курсе, решил что будет интересно попробовать себя именно в этой сфере. Как практика Ваши уроки крайне полезны, хоть и не просты, этого не отнять 😅
@PythonToday
@PythonToday Жыл бұрын
Большое спасибо за фидбэк! За каждым видео стоят десятки часов работы. В том и смысл, дать максимум полезной информации, без воды за короткий промежуток времени.
@user-um2eu1dy8t
@user-um2eu1dy8t 11 ай бұрын
Как успехи ?
@selviont8443
@selviont8443 3 жыл бұрын
Автоматизация рутинных задач с помощью Python. Там хорошо объяснена тема регулярных выражений
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю 💪
@deniskononov2708
@deniskononov2708 3 жыл бұрын
Плюсую! Если кому надо в электронном виде: yadi.sk/i/QmwgS3erpfADjw Если ссылки не желательны, удалю
@alexanderchemeza1772
@alexanderchemeza1772 10 ай бұрын
Если известна ссылка и необходимо менять число, лучше использовать while, выход по получению кода 404. Да и толка от записи html нет. Но для понимания основ сойдет
@user-iy6vk4pn1j
@user-iy6vk4pn1j 3 жыл бұрын
Заменить группу символов в слове. Довольно удобно New_word = "".join([i if i not in ("b", "a", "n", "l", "e", "t", "r" ) else "_" for i in old_word])
@user-iy3yo2wt1n
@user-iy3yo2wt1n 2 жыл бұрын
👍👍👍
@PythonToday
@PythonToday 2 жыл бұрын
💪
@agrxlol
@agrxlol Жыл бұрын
Вопрос по дальнейшей публикации данных через wordpress: есть ли какой-то разбор, как это напарсенное (для статей например с использованием advanced custom fields) разместить на сайте с помощью питона?
@ve2376
@ve2376 3 жыл бұрын
Итак, мы вместе выполнили заказ на фрилансе, где получать свою долю? :) *Спасибо за полезную информацию.
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк!
@Ruslantuber
@Ruslantuber 2 жыл бұрын
легкий сайт без защит, капчи и прочего. Удобная задача, но в реальности в основном замудренные задачи с тестами тьюринга... где реквест рассыпается и помогает только селениум и то, через костыли.
@dodo-ip2hd
@dodo-ip2hd 2 жыл бұрын
Здравствуйте, не могли бы вы подсказать сайты подобные на представленному в уроке (он сейчас не доступен)
@nikitabbrv5947
@nikitabbrv5947 3 жыл бұрын
Спасибо за видео! Подскажи, а зачем нужен Scrapy или Selenium например? блин, пока писал, увидел что на канале есть видео о Seleniume)))
@PythonToday
@PythonToday 3 жыл бұрын
Благодарю за фидбэк. Scrapy сильная библиотека для скрапинга. А Selenium преимущественно инструмент для тестирования.
@takiekakmi7532
@takiekakmi7532 2 жыл бұрын
У меня возможно тупой вопрос, но все-же: есть ли какой-то вариант прикрутить декоратор не к результату функции, а к итерации цикла for в ней (чтобы не писать в теле функции переменные со счётчиком итерации, а вынести это все в декоратор)????
@Zizya1486
@Zizya1486 3 жыл бұрын
- удалит все теги в тексте.
@MrSunchezz
@MrSunchezz 3 жыл бұрын
Использовать 'Requests' в век асинхронного Python, под музыкальный фон уроков от ХоудиХо... Да, это работает, но интересно уже что-то новое видеть, учитывая исключительно I/O-bound задачу.
@user-zz1ev4hu5l
@user-zz1ev4hu5l 2 жыл бұрын
ничего плохого в том, что автор вдохновился, уже всем известным ХаудиХо
@ivanzozulia8857
@ivanzozulia8857 Жыл бұрын
Ребят, видео супер. Подскажите пожалуйста на моменте 14:09 при сохранении файлов (html) в папку, сохраняет в папку только один файл (последний) на странице, в чем может быть ошибка?
@alexlotion5055
@alexlotion5055 Жыл бұрын
Решил попробовать собрать информацию с сайта Animego. Почему-то html страниц собираемый парсером отличается от того что пишется в браузере и фактически отображается на страницах.
@daddy_eddy
@daddy_eddy 2 жыл бұрын
Все, не работает больше ссылка на тот сайт. Тренировки закончены.
@myata04
@myata04 Жыл бұрын
Нет, можно найти сайт, где в конце страницы есть кнопка - показать еще, или перейти в этот же сайт, и нажать например: Тесты, в ссылке в конце подставляя: "?page-2", забыл. Можешь посмотреть сам, посмотрев код кнопки - показать еще, и перейти по его href ссылке в коде, и сверху будет в ссылке написано - ?page-2
@Djamal2004
@Djamal2004 Жыл бұрын
Музыка качает
@pythonx8732
@pythonx8732 3 жыл бұрын
Здравствуйте еще раз, помогите пожалуйста. Есть сайт госреестр.рф там при поиске урл не меняется. а мне нужно парсить его. Как это реализовать? Заранее спасибо
@user-lc2zz4cn3x
@user-lc2zz4cn3x 2 жыл бұрын
Привет, как сделать такой же перенос длинных ссылок как на 16:24. При Hard wrap 120 и Wrap on tayping при вставке не делает перенос, только если пробелы поставить вручную
@6blctpo_cnatb464
@6blctpo_cnatb464 Жыл бұрын
Сайт, который вы выбрали для примера раскрытия темы имеет сильно другую конфигурацию. Посоветуйте подобный для практического разбора
@inosensey6893
@inosensey6893 3 жыл бұрын
Классный видос, только зачем тут selenium? Он не использовался в коде
@pishy_kommentu
@pishy_kommentu 2 жыл бұрын
Пожалуйста, кто-нибудь может написать под этим комментарии ссылку на сайт? Я не могу его найти.
@user-kw1fv1dj4y
@user-kw1fv1dj4y 3 жыл бұрын
На 3:20 вы говорите -"воспользуемся поиском..." вы какие-то горячие клавиши используете для открытия поисковой строчки? Я тоже пользуюсь пайчармом.
@PythonToday
@PythonToday 3 жыл бұрын
ctrl + f ?
@Fiz_kent23
@Fiz_kent23 3 ай бұрын
А на какой платформе вы принимаете задания от клиентов и актуально ли это сейчас?
@JohnDoe-hp5kw
@JohnDoe-hp5kw 2 жыл бұрын
Давно вы этим занимаетесь?) Я попытался спарсить ТИК ТОК, что бы узнать количество видео у пользователя, но с пагинацией у меня так ничего и не получилось, я не нашел там такого и не понял как прокручивать страницы Может сможете подсказать что-то? Буду очень благодарен PS Я совсем новичок, если что)
@Oskar-oskar
@Oskar-oskar 2 жыл бұрын
Отличное видео! У меня только один вопрос, как открыть поиск по коду в структуре сайта ?
@PythonToday
@PythonToday 2 жыл бұрын
Благодарю за фидбэк! Так же почти во всех программах CTRL + F
@jokaharu7219
@jokaharu7219 Жыл бұрын
Красиво!
@sjotik
@sjotik 2 жыл бұрын
Круто, спасибо. Но вопрос: сайт динамический и данные в нем добавляются. Как только пагинаций станет более 23-х результат будет неполный. Возможно ли кодом написать проверку на поиск последнего индекса пагинации? Было бы интересно посмотреть реализацию такой логики, чтобы парсеру было "пофиг" на изменение количества позиций-записей и он работал долго и счастливо)). А в целом ОГРОМНОЕ спасибо!!! Тема парсинга очень широка и дает много возможностей для воплощения идей в реальность.
@romanbond1060
@romanbond1060 2 жыл бұрын
цикл while true / break и внутри try/except и проверку на ответ сервера или наличие данных
@imfiwile8995
@imfiwile8995 Жыл бұрын
Можешь попробовать через проверку status_code сделать, если на сайте 404 код отправляется, когда за пагинацию выходишь Или через try/except отлавливать, когда нет контента на странице и прекращать парсинг
@user-ym3yt1uq7s
@user-ym3yt1uq7s Жыл бұрын
подскажите пожалуйста столкнулся с такой ошибкой при попытке распарсить сайт: return codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 1583: character maps to проблема в кодировке страницы, посоветуйте что-нибудь?
@affinozt2319
@affinozt2319 Жыл бұрын
12:14 - *Cоздание список*
@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 2 жыл бұрын
Ты лучший
@squidwardtentacles7724
@squidwardtentacles7724 Жыл бұрын
а как быть если это уже совершенно другой сайт, не тот что в ролике?
@ffonlfoff5005
@ffonlfoff5005 Жыл бұрын
Приветствую. А как вы клиенту данный код передавали? упаковывали в ехе? или это разовая работа и вы передали только файлы с результатом?
@k2d4e60
@k2d4e60 Жыл бұрын
Честно говоря, я тоже ещё не понимаю как передавать готовые проекты заказчику, если как нибудь в конце видео это было бы озвучено, было бы вообще супер
@bambimbambas
@bambimbambas 3 жыл бұрын
Очень прошу вас помочь. Я запутался. Я писал всё по вашему примеру, но более структурировал код и запутался, когда в игру вошла пагинация. Я разделил проект на два файла: файл, который проверяет страницу на 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) И да, у меня без записи в жсон файл, так как пока что данные не верны. Очень жду ваш ответ. Спасибо !!!
@user-cm6jg8vu2g
@user-cm6jg8vu2g 22 күн бұрын
Бро, учился парсингу по твоим роликам. Хотел устроиться в одну конторку для написания парсеров. В качестве тестового задания писал парсер с яндекс-карт. В итоге получил отказ по причине того, что код слишком базовый. Как выглядит НЕбазовый код - загадка.
@sinoikromov7322
@sinoikromov7322 2 жыл бұрын
Сайт обновили что нету страница стартапа
@vodichkagazirovanaya9214
@vodichkagazirovanaya9214 3 жыл бұрын
А разве сайт тебя не заблокирует из-за большого количества запросов?
@moiseev9904
@moiseev9904 2 жыл бұрын
Здравствуйте, а реально написать парсер тендеров?
@user-do5my2xl5q
@user-do5my2xl5q Жыл бұрын
Все неплохо, но хардкодить количество страниц не хорошо. Можно проходить по страницам до тех пор, пока они открываются и есть контент
@musicforyou1380
@musicforyou1380 7 ай бұрын
4:05...всё идет по плану. Знал бы автор, что это за выражение будет вскоре...
@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'? помогите плз
@mikhail6188
@mikhail6188 11 ай бұрын
не удается получить доступ к сайту :(
@user-tp2cq7yq9g
@user-tp2cq7yq9g 11 ай бұрын
у меня тоже :( надо залайкать тебя, чтобы наверх пробились наши проблемы
@user-tp2cq7yq9g
@user-tp2cq7yq9g 11 ай бұрын
ну точнее как... Сай то у меня открылся а вот страница со всеми стартапами и их страницами в частности нет... У тебя также?
@mikhail6188
@mikhail6188 11 ай бұрын
По всей видимости его не вернут, смотрим запоминаем, переходим к следующему уроку, я, например, парсил на свой выбор, и перешёл к следующему уроку
@user-tp2cq7yq9g
@user-tp2cq7yq9g 11 ай бұрын
@@mikhail6188 Я тоже. Тем более следующий урок тоже с динамически подгружаемыми данными...
@raufauf3979
@raufauf3979 2 жыл бұрын
привет, не могу понять, в каком формате нужно скидывать заказчикам заказ? Просто выходные файлы или саму программу (exe)?
@PythonToday
@PythonToday 2 жыл бұрын
Приветствую, все зависит от ТЗ. Кому то просто скрипт, кому на сервер закинуть и настроить или веб интерфейс парсера на Django. Бывали и exe.
@raufauf3979
@raufauf3979 2 жыл бұрын
@@PythonToday спасибо большое)
@maximgordeev601
@maximgordeev601 3 жыл бұрын
Спасибо за ваши видео! Есть вопрос, а если на сайте для появления доп информации надо нажать кнопку , но при этом ни чего в строку адреса не передается. Как тогда быть? например как тут mosecom. mos. ru/zelenograd-16/ это сайт мос эко мониторинга и для того чтоб отображались все показатели воздуха надо нажать кнопку. Можете подсказать в какую сторону гуглить, хоть примерно :)
@PythonToday
@PythonToday 3 жыл бұрын
Смотреть в network куда, какой и с какими параметрами запрос уходит. Откуда то ведь данные приходят
@Kos37376
@Kos37376 Жыл бұрын
скиньте пожалуйста ссылку на сайт
@illuminate3151
@illuminate3151 2 жыл бұрын
а зачем передавать заголовки headers?
@doctor_zlo6785
@doctor_zlo6785 2 жыл бұрын
что за музыка на фоне?
@user-nq5yh5re4w
@user-nq5yh5re4w 9 ай бұрын
слушай друг подскажи где ты такие адекватные заказы находишь))
Homemade Professional Spy Trick To Unlock A Phone 🔍
00:55
Crafty Champions
Рет қаралды 57 МЛН
Super gymnastics 😍🫣
00:15
Lexa_Merin
Рет қаралды 107 МЛН
PINK STEERING STEERING CAR
00:31
Levsob
Рет қаралды 24 МЛН
Парсинг динамических сайтов | selenium python
43:00
Алексей Куличевский
Рет қаралды 2,8 М.
Homemade Professional Spy Trick To Unlock A Phone 🔍
00:55
Crafty Champions
Рет қаралды 57 МЛН