Парсинг простых сайтов на Python: BeautifulSoup, requests

  Переглядів 10,908

The ParseHub

The ParseHub

День тому

В этом видео я покажу как можно собрать информацию с простых сайтов с помощью BeautifulSoup и requests, писать будем как всегда на Python.
BeautifulSoup - это замечательная библиотека, которая значительно ускоряет и упрощает сбор данных, те кто занимаются парсингом просто обязаны уметь ею пользоваться
Исходный код:
github.com/Duff89/glavsnab_pa...
Приватные прокси за 99 руб: proxy6.net/?r=54545
Купон на скидку: SdSq8wCwJA
proxyline.net/?ref=212089
Купон для скидки: EYvdLcmgSy4tUcBP5uk
Поддержать канал:
yoomoney.ru/to/410014382689862
или
2204 1201 0103 5539
Контакт для связи: sergeichopolovich1989@gmail.com
00:00 Вступление
01:25 Что такое BeautifulSoup
02:00 Изучаем сайт для парсинга
03:03 Установка зависимостей
04:17 Пишем код
24:44 Итоговый запуск
#python #parsing #scraping #request #html #интернетмагазин #beautifulsoup #парсинг

КОМЕНТАРІ: 97
@rostikkigi4275
@rostikkigi4275 7 місяців тому
доброго времени суток! Подписан и посмотрел почти все видео с канала!Очень информативно и доходчиво даже для нубов подобных мне) Спасибо за ваш труд!
@the_parse_hub
@the_parse_hub 7 місяців тому
Спасибо!
@rostikkigi4275
@rostikkigi4275 7 місяців тому
@@the_parse_hub с первого заказа задоначу))
@user-mf8wx6sv7o
@user-mf8wx6sv7o 7 місяців тому
Спасибо за ваш труд!
@vrstatick7273
@vrstatick7273 8 місяців тому
Очень интересно и информативно
@LifterAndy
@LifterAndy 6 місяців тому
Спасибо за Вашу работу.
@sergeyk39
@sergeyk39 6 місяців тому
Большое спасибо, очень интересно!
@DayZDrag
@DayZDrag 6 місяців тому
начал изучать парсинг, жёстко тупил и путался из-за не структуированного и как попало написанного кода, щас увидел твою структуру и всё резко стало понятно и просто, парсинг это работа с многочисленным количеством разных данных, чтобы не запутаться чуть ли не обязательно нужно писать структуированный код, в принпице во всём программировании структуированный код - понятный код
@Embrace777
@Embrace777 6 місяців тому
Подписался) Очень полезно) Спасибо!
@user-ld3yu9uy7v
@user-ld3yu9uy7v 8 місяців тому
Спасибо за полезный контент, учусь по твоим видео, про датаклассы очень информация помогла!)
@the_parse_hub
@the_parse_hub 8 місяців тому
Спасибо! Датаклассы и правда очень крутая штука, особенно при передаче данных, гораздо меньше шансов ошибиться
@ON-ie1ib
@ON-ie1ib 6 місяців тому
Супер информативное видео. Хорошая работа
@alexanderkomanov4151
@alexanderkomanov4151 7 місяців тому
Классно!
@Vladimir_F609
@Vladimir_F609 8 місяців тому
Спасибо большое за годный видос! С bs4 знаком, но всё равно что-то полезное находится 👍
@the_parse_hub
@the_parse_hub 8 місяців тому
Спасибо!
@BorisVP1967
@BorisVP1967 8 місяців тому
Подписан. Прокомментирую для продвижения канала. В отличие от широкого ряда других авторов каналов на подобные темы, понятная подача материала. В принципе даже для меня, далеко не молодого человека, в том случае, если многократно повторю действие и буду одновременно его проговаривать, есть шанс понять происходящее, саму логику написания программ, которые способны последовательно осуществлять действия и даже вдумчиво и с толком запустить тот парсер, который нужен. Выбрать-бы ещё время для этого.
@the_parse_hub
@the_parse_hub 8 місяців тому
Спасибо!
@biglakecom
@biglakecom 2 місяці тому
блин чётко👍
@cape4129
@cape4129 Місяць тому
ТОп вообще огонь канал
@the_parse_hub
@the_parse_hub Місяць тому
Спасибо!
@abc_chess
@abc_chess 8 місяців тому
Полезное видео, странно что просмотров мало. Баловался с парсером полгода назад, основная проблема(я новичок) когда я циклом обходил каждую ссылку на товар и тянул данные, то не смог настроить скрипт так, чтобы эти данные последовательно записывались в эксель файл😢
@the_parse_hub
@the_parse_hub 8 місяців тому
Спасибо. Насчет просмотров: канал относительно новый, всё впереди. Насчет последовательной записи: нужно использовать контекстный менеджер with, чтобы случайно не заблокировать файл, ну и стараться писать не по одной записи а блоками
@aisultanbaltabaev2053
@aisultanbaltabaev2053 8 місяців тому
👍
@kostyanmsk9493
@kostyanmsk9493 5 місяців тому
Спасибо тебе огромное, очень понятно объясняешь, продолжай радовать контентом))) P. S: а можешь рассказать про динамический парсинг? (В экселе так можно) и про применение, например как создать файл, для обученмя бесплаиной модели? Как можно динамически парсить различные данные в этот файл что бы модель автоматически дообучалась? Возможно ли это? Было бы очень интерестно, так как тебя понятно воспринимать и слушать
@the_parse_hub
@the_parse_hub 5 місяців тому
Спасибо! Насчет Excel и нейросетей, я в них далеко не специалист, поэтому пока этим порадовать не смогу
@Chel1k7
@Chel1k7 6 місяців тому
сайт очень добрый к парсингу, редкость такое
@the_parse_hub
@the_parse_hub 6 місяців тому
Таких сайтов на самом деле много, не всегда есть смысл как-то защищать данные
@user-fv6wz9hd5l
@user-fv6wz9hd5l 4 місяці тому
в целом соблюдая логику видео, и использую другой раздел сайта все получилось реализовать без не решаемых проблем. занимаюсь питоном по 4 каналам параллельно, за 1.5 месяца по выходным ( 40% месяца по 4-5 часов) свитчер 36 лет. дошел до ооп, решил сделать парсер как подведение итогов по функциональному. Спасибо автору. 1 замечание - перед началом подобного видео указывайте настройки исходной среды. на разных версиях продуктов или не скачанных надстройках, типа lxml, могут быть проблемы
@the_parse_hub
@the_parse_hub 4 місяці тому
Ну насчет lxml и остальных зависимостей я это показывал в видео: ukposts.info/have/v-deo/aZSrlnlrr4h6uas.html
@EarnDevison
@EarnDevison 7 місяців тому
сделай пожалуйста видео на нажатие динамических кнопок playwright. которые меняются при наводке курсором
@the_parse_hub
@the_parse_hub 7 місяців тому
Отдельное видео это будет наверное слишком, проще отвечу прямо здесь: Вот примерная логика: # находим элемент и забираем у него координаты box = page.get_by_role("button").bounding_box() # перемещаем курсор на середину этого элемента page.mouse.move(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2) # здесь нужно добавить ожидание, нового текста кнопки, класса или чего-то еще # клик page.mouse.click(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
@EarnDevison
@EarnDevison 7 місяців тому
@@the_parse_hub а если эта кнопка не элемент button а типа span или div? есть может Telegram чат? upd: ааа. кликом мышки отчаливая от ближайшего элемента..
@maxd.578
@maxd.578 8 місяців тому
Крутой видос! А что если у нужного нам тега класс не с читаемым названием (div, class_='product-card'), а например такой какой-нибудь? 'col-lg-3 col-md-4 col-sm-6 col-xs-6 col-xxs-12 item item-parent catalog-block-view__item js-notice-block item_block'. Как быть?
@the_parse_hub
@the_parse_hub 8 місяців тому
Спасибо. Насчет нужного селектора: бывают такие сложные моменты, особенно где названия классов генерируются (привет озону). Но почти всегда можно выйти на нужный элемент через его родителей\соседей или просто использовать какой-то один уникальный класс или атрибут, в твоём примере ".catalog-block-view__item" выглядит довольно нормальным
@ru8954
@ru8954 7 місяців тому
Добрый день! Не поможете советом? Мне нужно спарсить из интернет магазина все товары, которые там есть. Я так понимаю requests + bs4 в этом случае лучший вариант по скорости и удобству? И еще вопрос по поводу блокировки бота, она же возможна, ее как-то можно избежать? Может быть вы имели подобный опыт или есть совет, как это лучше реализовать?
@the_parse_hub
@the_parse_hub 7 місяців тому
Эх, если бы всё было так просто, то этого канала не было бы) Всё зависит от сайта, поэтому какой-то внятный совет не могу дать
@ru8954
@ru8954 7 місяців тому
@@the_parse_hub Мне это нужно в рамках учебного проекта, поэтому не особо важно какой это будет магазин. Например dns
@the_parse_hub
@the_parse_hub 7 місяців тому
@@ru8954 Возьмите тогда rdstroy.ru/. Там точно можно парсить через requests и bs4,защиты нет, недавно проверял
@user-ou1eb3cn9z
@user-ou1eb3cn9z 5 місяців тому
price можно в try - exept обработать
@rikenbaker1
@rikenbaker1 2 місяці тому
Видео супер! Спасибо! Обратите внимание, что когда открывает получившийся файл на 16:35, внизу вкладка data и вот в ней всё в столбцах. У меня открылось в первой вкладке text, голову ломал что не так сделал.
@the_parse_hub
@the_parse_hub 2 місяці тому
Ну это особенность формата csv. По сути, это обычный текст разделенный запятыми или другими символами
@user-fv6wz9hd5l
@user-fv6wz9hd5l 4 місяці тому
При открытии полученного файла кодировки пайчарма спрашивают что выбрать, при открытии файла в текст выдаются ошибки, какую кодировку стоит использовать? пишет что .csv только на проф версии пайчарма, есть вариация чем корректно его открыть в среде пайчарм без проф версии?
@the_parse_hub
@the_parse_hub 4 місяці тому
Насчёт кодировки, многое зависит от операционной системы. Как нормально (в табличном виде) открыть csv в бесплатной версии - наверное никак. В крайнем случае, можете найти где скачать "бесплатную" про версию и использовать полный функционал или переписать немного кода и сохранять результат в формате xlsx например
@user-gq5pm4wu4v
@user-gq5pm4wu4v 7 місяців тому
Здравствуйте! А вы не сталкивались с блокировкой на wildberries? После нескольких часов парсинга выдает код 429, значит заблокировали. И приватные прокси не помогают. И не могу дальше парсить.
@the_parse_hub
@the_parse_hub 7 місяців тому
Добрый день. 429 это значит слишком частые запросы, это не блокировка. В ВБ возникает обычно когда идет парсинг страницы примерно > 30. Видимо считается, что настоящий пользователь до этого не дойдет никогда. Попробуйте делать повторный запрос, до 50-60-й страницы это обычно помогает
@user-gq5pm4wu4v
@user-gq5pm4wu4v 7 місяців тому
@@the_parse_hub попробовал. Действительно, если снова начать с первой страницы, то идёт. Спасибо вам большое!
@AnimationLook
@AnimationLook 4 місяці тому
Привет, можешь сделать инструкцию, как получать har файлы со траниц с помощью playwright? Еще можно browsermob + selenium разобрать, но мне кажется это уже устаревающая связка
@the_parse_hub
@the_parse_hub 4 місяці тому
Вот официальная инструкция, по-моему нормально расписано: playwright.dev/python/docs/mock#mocking-with-har-files
@AnimationLook
@AnimationLook 4 місяці тому
@@the_parse_hub Да, это я уже все читал, но все равно не получается. Поэтому я подумал, что инструкция по этой штуке будет неплохим контентом
@the_parse_hub
@the_parse_hub 4 місяці тому
@@AnimationLook Это будет в курсе по Playwright, но когда он будет готов для меня большой вопрос
@Tribunall
@Tribunall 6 місяців тому
Паршу 2 сайта для сравнение цен, где лучше сохранять данние для сравнения (json, sqlite) или в чем?
@the_parse_hub
@the_parse_hub 6 місяців тому
Sqlite вполне нормальная бд для таких целей
@Tribunall
@Tribunall 6 місяців тому
@@the_parse_hub спасибо за подказку
@Andriyklm9
@Andriyklm9 7 місяців тому
сделай пж видео о том как пройти recaptcha v2 callback на selenium
@the_parse_hub
@the_parse_hub 7 місяців тому
В планах есть такое
@IamZAS
@IamZAS 6 місяців тому
Привет! Спасибо за объяснение, супер! НО у меня небольшая ошибка, на текущий момент раковин = 832, показывать элементов на сайте стоит по 100. Парсит нормально, но показывает в выводе консоли всего 9 страниц, хотя на сайте 11 страниц. Можешь подсказать где моя ошибка?
@the_parse_hub
@the_parse_hub 5 місяців тому
Нужно выводить отладочную информацию и смотреть, так сказать не могу
@IamZAS
@IamZAS 5 місяців тому
@@the_parse_hub Я вроде разобрался, там сайт кривой. (на мой взгляд)
@the_parse_hub
@the_parse_hub 5 місяців тому
@@IamZAS такое тоже бывает)
@BorisVP1967
@BorisVP1967 8 місяців тому
16:40 Судя по информации из "Инспектора" браузера, лучшим решением для проверки , наверное всё-же явилось-бы, считывать информацию о количестве товаров из атрибутов, которые доступны: Раковины 581 Так на сегодня "раковин" 581, в то время, как на момент съёмки видео их было 587. При этом возможно считать заведомо ложным утверждение о том, что когда-то товаров под каталожным названием "Раковины", не станет больше 587 (пятисот восьмидесяти семи). То есть проверка количества по атрибутам, наверное всё-же более правильное решение для автоматизации задачи, в том случае, если сама задача не разовая.
@the_parse_hub
@the_parse_hub 8 місяців тому
Согласен. Но вариант с учётом дублей мне больше по душе
@Enthe0genic
@Enthe0genic 7 місяців тому
Почему может выводить None при первой (8:12-8:26) проверке?
@the_parse_hub
@the_parse_hub 7 місяців тому
Значит такой элемент не найден. Возможно неправильно записан селектор
@Enthe0genic
@Enthe0genic 7 місяців тому
@@the_parse_hub спасибо, нашла ошибку)
@millera6656
@millera6656 6 місяців тому
Добрый день! при наборе: sku = product.find("span", class_="product-card_key").text print(sku), и после запуска программы выдает ошибку : sku = product.find("span", class_="product-card_key").text AttributeError: 'NoneType' object has no attribute 'text' скажите пожайлуста что не так?
@the_parse_hub
@the_parse_hub 6 місяців тому
sku = product.find("span", class_="product-card_key") Здесь идет поиск какого-то элемента, если элемент не найден, то функция вернет None, далее идет попытка у этого элемента взять значение атрибута text и конечно у None не может быть такого атрибута. Скорее всего неправильно записан селектор: class_="product-card_key", проверяем на сайте - точно там class_ = "product-card__key" (Двойное нижнее подчеркивание)
@anus8346
@anus8346 8 місяців тому
не по теме ролика конечно хочется увидеть видео о решении callback капчи с помощью rucaptcha в интернете нет объяснений как это сделать
@the_parse_hub
@the_parse_hub 8 місяців тому
Да, в планах есть
@MUSRB
@MUSRB 8 місяців тому
почему не сохраняет в отдельный столбпец?
@the_parse_hub
@the_parse_hub 8 місяців тому
Не знаю про что вопрос, но наверное пропущена запятая где-то в функции записи
@MUSRB
@MUSRB 8 місяців тому
@@the_parse_hub with open(f'eprr.csv', mode='w', newline='', encoding='utf-8') as fie: writer = csv.writer(fie) writer.writerow(['name', 'price'])
@polskapospolity1834
@polskapospolity1834 6 місяців тому
Можно, пожалуйста разъясните: у меня в VScode кариллица отображается знаками вопроса. Как мне настроить кодировку?
@the_parse_hub
@the_parse_hub 6 місяців тому
пропишите кодировку, к примеру: open(f"glavsnab.csv", mode="w", newline="", encoding="utf-8")
@polskapospolity1834
@polskapospolity1834 6 місяців тому
@@the_parse_hub теперь в csv файле вообще нет данных. Вообще это не очень большая проблема, тк эксель прекрасно читает эти файлы. Просто ради интереса узнаю
@alexandrchur5665
@alexandrchur5665 5 місяців тому
Здравствуйте! Подскажите, как написать такого бота, который бы "слушал" несколько чатов в Телеграм и пересылал сообщения в личку по каким-то ключевым словам? К примеру, я занимаюсь строительством и ремонтом, и надо первым получать предложения в чатах своего города, если кто-то ищет строителя.
@the_parse_hub
@the_parse_hub 5 місяців тому
Добрый день! Начните с этого: skillbox.ru/media/code/parsim-dannye-v-telegram-na-python-chast-1/
@alexandrchur5665
@alexandrchur5665 5 місяців тому
@@the_parse_hub Это уже посмотрел, спасибо! Но там парсинг используется, чтобы просматривать сообщения в чате, а как сделать, чтобы бот "слушал" сообщение в текущем времени, чтобы успеть первым ответить потенциальному клиенту?
@the_parse_hub
@the_parse_hub 5 місяців тому
@@alexandrchur5665 к примеру так: habr.com/ru/articles/425151/
@alexandrchur5665
@alexandrchur5665 5 місяців тому
@@the_parse_hub Большое спасибо! )
@alexandrchur5665
@alexandrchur5665 5 місяців тому
@@the_parse_hub У меня ещё вопрос. В статье описывается сохранение новых сообщений в файл на ПК, но не всегда есть возможность иметь ПК под рукой на котором запущен бот. Подскажите, как настроить перенаправление сообщений в телеграм-клиент на телефон?
@vrstatick7273
@vrstatick7273 8 місяців тому
Интересна тема обход различных блокировок при отправке post запросов
@the_parse_hub
@the_parse_hub 8 місяців тому
Согласен. Но с post запросами многое зависит от сайта, так что универсального решения быть не может. На каком-нибудь сайте обязательно покажу
@mhalev
@mhalev 6 місяців тому
А в ссылке ?limit=600 нельзя было указать? :)
@the_parse_hub
@the_parse_hub 6 місяців тому
Указать можно, только работать не будет) На лимиты тоже есть лимиты
@gosros662
@gosros662 6 місяців тому
Почему я не понял? Чувствую себя тупым
@the_parse_hub
@the_parse_hub 6 місяців тому
Если какой-то момент непонятен - могу прояснить
@user-ld3yu9uy7v
@user-ld3yu9uy7v 8 місяців тому
Спасибо за полезный контент, учусь по твоим видео, про датаклассы очень информация помогла!)
@the_parse_hub
@the_parse_hub 8 місяців тому
Спасибо! наверное про датаклассы нужно отдельное видео, там возможностей гораздо больше, чем я использую в видео
@user-pk7le8he2r
@user-pk7le8he2r 8 місяців тому
Видео отличное! Узнал ряд новых вещей про bs4. а в чем здесь преимущество использования датаклассов, перед, например, банальным списком словарей?@@the_parse_hub
顔面水槽がブサイク過ぎるwwwww
00:58
はじめしゃちょー(hajime)
Переглядів 75 млн
Простой парсинг сайтов на Python | requests, BeautifulSoup, csv
1:11:50
Андрей Андриевский
Переглядів 132 тис.
ПАРСИНГ КОМПАНИЙ В 2GIS | Как написать парсер на selenium (Python)
9:02
Артём Ипатов - Python на практике
Переглядів 3,9 тис.
Playwright - самый современный аналог selenium
14:57