Простой парсинг сайтов на Python | requests, BeautifulSoup, csv

Поділитися
Вставка
  • Опубліковано 14 гру 2024

КОМЕНТАРІ • 385

  • @beksultantoktobekov6098
    @beksultantoktobekov6098 4 роки тому +58

    Ахренеть , как вы просто каждое слово в коде объясняете и все нормальным языком. Здоровье вам ❤

  • @dmitryv6156
    @dmitryv6156 3 роки тому +43

    Отличная подача материал, но есть ряд замечаний:
    1. range(1, n) возвращает список начинающийся с 1 и заканчивающийся n-1, соответственно в Вашем случае нужно написать range(1, PAGINATION+1);
    2. функцию save_doc(cards, CSV) необходимо сдвинуть влево на уровень вышестоящего for. В текущем варианте записываемые в файл данные будут повторяться с нарастанием последующего прохода цикла парсера.
    PS Я понимаю, что автор легко нашел бы эти неточности в реальном проекте, но написал для тех, кто будет смотреть данное видео для обучения.

  • @mma_fighter
    @mma_fighter 3 роки тому +4

    Много профессионалов на ютубе, но мало кто может так подробно и понять объяснить материал. Спасибо !

    • @andrievskii
      @andrievskii  3 роки тому

      Но я даже не профессионал))

    • @Veber-we4it
      @Veber-we4it 3 роки тому

      @@andrievskii Так ещё и скромный

  • @АртурТестов-л6д
    @АртурТестов-л6д 4 роки тому +20

    Спасибо, что рассказал абсолютно все, даже для диких чайников. Респект 👍

  • @erickwhite1195
    @erickwhite1195 4 роки тому +11

    лучшее видео по PYTHON, что я видел. Многие вещи стали понятными. Огромное спасибо! Надеюсь будут и дальше похожие видео)
    Однозначно лайк, подписка.

    • @dryuni
      @dryuni 8 місяців тому

      PythonToday посмотри, тоже чувак толковый

  • @animegogogo5124
    @animegogogo5124 8 місяців тому +1

    За 1 час я понял как парсить, я думал это сложно, но оказываеться это не так сложно, понятно и дохотчиво объясняешь даже каджую мелочь, мало таких кто объясняют, Спасибо за курс! вы лучший!❤ Спасибо что есть такие люди!

    • @andrievskii
      @andrievskii  8 місяців тому

      Удачи в обучении, пусть все получится

  • @baluan_sholak
    @baluan_sholak 2 роки тому +1

    Спасибо за видео. Кстати у кого выдает ошибку UnicodeEncodeError, в with open добавьте encoding="utf-8-sig" (если вы работаете в виндовс). Будет выглядеть так: with open(path, 'w', newline='', encoding="utf-8-sig") as file:
    Отличное обучение для новичков, еще раз спасибо!

    • @МаркМалина
      @МаркМалина 2 роки тому

      Не мог понять что делать с ошибкой, и тут ответ, спасибо)

    • @baluan_sholak
      @baluan_sholak 2 роки тому +1

      @@МаркМалина знал, что пригодится

  • @cyber_ukraine
    @cyber_ukraine 3 роки тому +6

    Уважаемый АВТОР, вы гений!
    Я за все 5 лет обучения в универе получил в разы меньше знаний чем от часа просмотра этого видео!
    Ставлю колокольчик на будущие уроки!

    • @andrievskii
      @andrievskii  3 роки тому

      Рад был помочь))

    • @TXADodje
      @TXADodje 3 роки тому +7

      Соболезную

  • @Владимир-щ8н3ь
    @Владимир-щ8н3ь 4 роки тому +3

    Изумительное объяснение. Там где надо расставлены акценты. Спасибо!

  • @Bondik202
    @Bondik202 4 роки тому +8

    отличный урок ! мне нравиться что вы рассказываете о методах подробно .

  • @Evis9110
    @Evis9110 4 роки тому +9

    Мой первый парсер готов благодаря Вам, спасибо огромное)

  • @goodtrydemongg2033
    @goodtrydemongg2033 4 роки тому +2

    Самый лучший и понятный курс по парсингу который я встречал, красавчик!

    • @andrievskii
      @andrievskii  4 роки тому

      Спасибо, очень приятно

  • @mobilelegends8845
    @mobilelegends8845 4 роки тому +4

    Братушка от души за контент, очень класно все объясняешь! Плиз побольше питона бро, а с нас царские лайки))

  • @Tommy7417
    @Tommy7417 Рік тому +1

    Супер, дякую за відео, та детальне пояснення.

  • @shadows2138
    @shadows2138 3 роки тому +1

    Урок был очень полезен. я только начал изучать. Вы сказали, что у Вас есть курс. Я его посмотрю. Курсы не бывают лишними). Вы говорите, что урок длинный и Вы много останавливаетесь на мелочах, но как новичок скажу, что проще перемотать вперёд, если ты что-то знаешь, чем упустить важную мелочь, когда ты ничего не знаешь)

  • @simple1kazakh
    @simple1kazakh 3 роки тому +1

    очень полезный урок, написал свой первый парсер, благодарю Андрей!

    • @andrievskii
      @andrievskii  3 роки тому

      Не останавливайся)

  • @Tobi17460
    @Tobi17460 2 роки тому

    Три дня я писал и вникал в этот код, спасибо большое за такой урок очень полезный, теперь я на шаг ближе к своей мечте!

  • @evollt
    @evollt 4 роки тому +2

    Здравствуйте. Спасибо вам за курс! Все очень понятно и доступно. Вы объясняете чуть ли ни каждую мелочь и это очень хорошо.

  • @kayuttv8231
    @kayuttv8231 3 роки тому

    Огромное спасибо... Уже несколько дней пытаюсь понять, а не получается. А у вас всё понятно каждую строку объяснили. Ещё раз огромный респект!

  • @FriskesTV
    @FriskesTV 2 роки тому

    Спасибо за видео, хорошо объясняешь!
    Помощь тем у кого траблы с кодировкой, это происходит изза символа 'é' в одном из тайтлов карт 'Chaméléon', есть 2 решения, либо подменить эти символы с помощью метода replace(), и тогда эта карта сохранится в наш список, либо просто отбросить данную карту вместе с ошибкой с помощью try except пример:
    try:
    writer.writerow([item['title'], item['link_product'], item['brand'], item['card_img']])
    except UnicodeEncodeError:
    print('Получена ошибка: UnicodeEncodeError')

  • @maxymus7884
    @maxymus7884 3 роки тому +1

    Большое спасибо за урок! За один вечер с поверхностными знаниями по python прошел урок и видоизменил его под свои нужды для парсинга с других сайтов(маркетплейс).

    • @andrievskii
      @andrievskii  3 роки тому

      Рад, что был полезен

    • @mr.akulka
      @mr.akulka 3 роки тому

      Поделись пожалуйста кодом для маркетплейса

  • @aleksgor1408
    @aleksgor1408 2 роки тому

    Круто. Искал нормальное поясняющее видео по парсингу. В этом максимально все понял ))) Спасибо.

  • @Nikbleat
    @Nikbleat 4 роки тому +1

    Мучался с парсером 3 дня. Однако с твоим видео всё таки смог его довести до результата.

  • @userikzhan6683
    @userikzhan6683 3 роки тому +3

    Спасибо за очень полезный и компактный разбор! Лайк и подписка!

    • @andrievskii
      @andrievskii  3 роки тому

      Спасибо за подписку

  • @belford_acj2302
    @belford_acj2302 2 роки тому

    Андрей Андриевский, спасибо Вам большое за решение с Плагинацией. Круто! Все сделал и все получилось! Желаю Вам успехов в 2022-году! :)

  • @Alex_MacDenis
    @Alex_MacDenis 3 роки тому +4

    Огромное спасибо автору! Всё максимально понятно и подробно, большое спасибо!❤️

  • @Mr717273747
    @Mr717273747 3 роки тому +1

    Андрюха, спасибо за доскональный урок.
    Ты - лучший.
    Don't get lost !

    • @andrievskii
      @andrievskii  3 роки тому

      спасибо за комментарий

  • @alexalexov7164
    @alexalexov7164 2 роки тому

    спасибо вам большое! наконецто научился парсить сайты! и это все благодаря вам! смотрел много видео но самое лутшее обяснение иммено у вас! спасибо еще раз! вы мне ооочень помогли! вы лутший!!!

  • @po100lit7
    @po100lit7 2 роки тому +1

    здОрово! Браво! ещё бы добавить автоматическое определение количества страниц для парсинга)))

  • @yarikyarik8275
    @yarikyarik8275 3 роки тому +3

    Все очень хорошо объяснил. Только, просьба, делай масштаб побольше, а то на телефоне плохо видно)

  • @Kaiserdom
    @Kaiserdom 4 роки тому

    Единственный толковый урок. Спасибо, все понятно и ясно объяснил!!!

  • @vvsyakiy
    @vvsyakiy 3 роки тому +7

    Для всех у кого парсятся непонятные символы вместо русских букв:
    в функции get_html добавьте строчку " r.encoding = 'utf8' " и всё будет норм

    • @nigma933
      @nigma933 3 роки тому

      спасибо от души

    • @grigoriimikhailov703
      @grigoriimikhailov703 3 роки тому

      а куда её вставить - можно чуть подробнее плиз? не понимаю :(

    • @vvsyakiy
      @vvsyakiy 3 роки тому +1

      @@grigoriimikhailov703 между r = requests.get(url, headers=HEADERS, params=params) и return r

  • @Вячеслав-х4и1ю
    @Вячеслав-х4и1ю Рік тому

    Спасибо добрый человек! Отличная подача материала. Респект!

  • @swipes1
    @swipes1 3 роки тому +4

    Спасибо супер, сделайте парсер с сайтами куда надо заходить с логином, хотя бы легенкий парсер чтобы понять как работать

  • @d0r1s3t6
    @d0r1s3t6 3 роки тому

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

  • @MultiTuzik
    @MultiTuzik Рік тому

    Супер видео , спасибо вам , очень круто объясняете , пересмотрю ваши плейлисты на досуге )

  • @ИльяЗанин-и5м
    @ИльяЗанин-и5м 2 роки тому

    Бро, спасибо тебе большое, ты реально мне помог! Здоровье тебе и твоим близким

  • @michaelpodroykin7722
    @michaelpodroykin7722 4 роки тому

    Андрей!!
    Круто, молодец
    Просмотрел весь видос, все ясно и понятно рассказываешь)
    Спасибо

  • @Metalfrezer
    @Metalfrezer 3 роки тому

    Вот такие и должны быть уроки! Респектище и спасибо колоссальное!

  • @cassidy7172
    @cassidy7172 3 роки тому +1

    Спасибо, дружище, всё подробно и по делу. Очень полезное видео.

  • @MrTimmirs
    @MrTimmirs 3 роки тому

    Отличный урок, думаю будет всем полезно рассмотреть создание парсера через ООП.
    Спасибо за труд!

  • @ПИОНЕР-МузыкальнаястудиявБрянс

    url в get_html записан маленькими буквами. В то время как константа URL записана большими. Как это работает? Питон ведь чувствителен к регистру. Не понимаю.

  • @bers991
    @bers991 3 роки тому +2

    Спасибо за видео, отлично объясняете, помогло в освоении python !

  • @skuse01
    @skuse01 8 місяців тому +1

    Ты просто лучший, огромное спасибо

  • @artemselivanov6892
    @artemselivanov6892 3 роки тому +1

    Дякую за урок. Це було дуже корисно!

    • @andrievskii
      @andrievskii  3 роки тому

      Гарного навчання

  • @kakTyzZz69
    @kakTyzZz69 2 роки тому

    Отличное видео, самое годное по парсингу! Автору респект

  • @stradys
    @stradys Рік тому +1

    спасибо, хороший урок! сделайте пжл аналогичное видео с использованием Selenium для динамических сайтов, думаю многим будет интересно

  • @arktikmoon
    @arktikmoon 3 роки тому +2

    Ну блин всё огонь. Кстати там сразу заметил пропущенные двоеточия в словаре на паре ключ значение. Смотрю и думаю сказал словарь, записывает данные как множество. Только множество пустое не так создаётся, и после последнего элемента насколько помню нужно запятую. Что то здесь не то))). И на константе csv pycharm заругался))). Там же как метод воспринимается. Когда без кавычек.

    • @arktikmoon
      @arktikmoon 3 роки тому

      Огромнейшее спасибо от всей души за урок. Шикарная подача.

  • @liubovkernichnaya9610
    @liubovkernichnaya9610 4 роки тому

    Ставлю тебе душевный лайк, видео очень помогло, отличный урок, спасибо тебе за твой труд!

  • @Reshila-us6uc
    @Reshila-us6uc 4 роки тому +1

    *Ты лучший спасибо по больше таких уроков*

  • @romanmyhailyshyn
    @romanmyhailyshyn 2 роки тому

    Спасибо, очень хорошо объясняете, час - это совсем не долго, зато подробно и понятно.

  • @РусланИващенко-у6я
    @РусланИващенко-у6я 4 роки тому +2

    Круто!
    Получилось! Правда только одну страницу и без сохранения в файл почему-то.. Буду пересматривать еще, видимо что-то упустил.
    Ждем продолжения!

  • @ayakovtsev
    @ayakovtsev 4 роки тому +1

    Красава! Видос отличный! Спасибо, что заморочился!

  • @denisgoldman3255
    @denisgoldman3255 2 роки тому +2

    Спасибо за видео! Один вопрос, как парсить по списку ссылок? Есть определённые ссылки на страницы, с которых нужно спарсить title и h1. Как это сделать?

  • @Bah1918
    @Bah1918 3 роки тому +2

    Очень полезный урок. СПАСИБО

  • @0palev
    @0palev 3 роки тому

    отличный урок получился, и у меня почти всё вышло, пока не начал сохранять в csv файл адреса картинок и ссылку на банк, что то с кодировкой.
    Если написать так
    with open(path, 'w', newline='', encoding='utf8') as file
    тогда все гуд, но в екселе абра кадабра, которую уже потом можно декодировать.

  • @ghostfromsky
    @ghostfromsky 2 роки тому

    Спасибо большое вам, объяснили все очень понятно. Мне этот ролик очень сильно помог, здоровья вам!

  • @othelnik6659
    @othelnik6659 4 роки тому +4

    А почему у меня парсится не страничка объектов а только один объект на страничке??

  • @ДенисДемиденко-щ5м

    Урок понравился, спасибо. Всё понятно) Даже подписался

  • @Kosmoswa
    @Kosmoswa 3 роки тому +1

    отличный урок. большое спасибо!

  • @NavAlextv
    @NavAlextv 4 роки тому

    Просто отличная подача материала, супер!!!

  • @tmercurial
    @tmercurial 3 роки тому

    Спасибо за урок, смог написать парсер под мои цели

  • @GohaBed
    @GohaBed 4 роки тому +2

    жму руку! все ясно и понятно!

  • @Дудха
    @Дудха 3 роки тому +1

    Отличный урок! Подписался

  • @denysmilka6762
    @denysmilka6762 4 роки тому

    Видос годный)
    Лайк подписка.
    Пойду писать код.

  • @pchuprinina
    @pchuprinina 3 роки тому +1

    Чтобы захватывал последнюю страницу необходимо писать range не захватывает последнее значение

  • @ГульшатА-ц2с
    @ГульшатА-ц2с 3 роки тому

    Мега-полезный урок! спасибо!

  • @SmorodinkaMarina
    @SmorodinkaMarina Рік тому

    Круто, огромное спаибо.

  • @djonikbb5572
    @djonikbb5572 3 роки тому +1

    Однозначно подписка ,жду видео по питону

  • @ВиталийПотылицын-ж3з

    Спасибо за ваш труд,позновательно!

  • @ХеллБой-я1щ
    @ХеллБой-я1щ 3 роки тому

    Информативное видео, спасибо огромное!

  • @roman445
    @roman445 3 роки тому +6

    Спасибо за урок, сделал парсер по нему для тех же карточек. Теперь там все поменялось, я переделал. Если кому нужен код, что бы не набивать, пишите. Только у меня названия банков парсятся в неправильной кодировке, не знаю что с этим делать пока.

    • @vladmvv4849
      @vladmvv4849 3 роки тому

      Пропиши utf-8 забей как это сделать

    • @vincemanlie4435
      @vincemanlie4435 2 роки тому

      Вышлите мне код пожалуйста

  • @gaben_aTan
    @gaben_aTan 2 роки тому

    Все доступно, но ещё бы структура кода была бы в рамках ООП :))))

  • @КороткевичМихаил
    @КороткевичМихаил 3 роки тому

    Всё очень понятно. Спасибо большое! =)

  • @СоглаевПавел
    @СоглаевПавел 4 роки тому +3

    Всё полезно, просто и для тупых. Уважуха и респект!!!

  • @quickliker
    @quickliker 4 роки тому +1

    Не ну это лайк однозначно👍🏻

  • @Bah1918
    @Bah1918 3 роки тому

    Классное объяснение .Хоть один человек детально всё показал. СПАСИБО. А видео с применением ООП будет.?

    • @andrievskii
      @andrievskii  3 роки тому +1

      Будет в плейлисте о Джанго

  • @Loveisdarknesss
    @Loveisdarknesss Рік тому

    я думаю пора обновить данное видео, можно даже на этом же сайте, думаю всем будет интересно поменялось что то за 3 года или нет)

  • @orkenrakhmatulla2127
    @orkenrakhmatulla2127 2 роки тому

    Классно , спасибо большое !👍🏻

  • @emilseyfullayev1638
    @emilseyfullayev1638 4 роки тому +2

    slov net, prosto bolshoy like

  • @АлексейИванов-ц5л3ы

    Спасибо за людское объяснение ))))

  • @winssd9496
    @winssd9496 3 роки тому +1

    На первом этапе вместо Response 200
    Response 403. Что делать

  • @dmitrys5289
    @dmitrys5289 2 роки тому

    Сайт переделали, но главное что все принципы разжеваны и можно без проблем повторить. Так даже интереснее))

  • @ВладимирЧехун-ц8д
    @ВладимирЧехун-ц8д 3 роки тому +1

    Понятно и доходчиво

  • @irinaste91
    @irinaste91 2 роки тому

    Круто.Спасибо.👍👍👍👍👍👍👍👍👍👍

  • @viktornet-k6x
    @viktornet-k6x 3 роки тому +2

    Подскажите, пожалуйста, получаю ошибку:
    'title': item.find('div', class_='img-crop').get_text()
    AttributeError: 'NoneType' object has no attribute 'get_text'
    В чём может быть проблема? Весь код чётко по видеоуроку, ошибку выдаёт после добавления .get_text(), .find(). Если не добавлять .get_text(), .find() выдаёт словарь [{'title': None}].

    • @TheRindzinnew
      @TheRindzinnew 3 роки тому

      Здравствуйте я тоже досмотрел все видео и вбил до конца. По всему нету пару советов есть на английских сайтах пока думаю. вот один советует.coderoad.ru/51687872/BeautifulSoup-get_text-возвращает-объект-NoneType

    • @Eirstream
      @Eirstream 2 роки тому

      Во-первых в уроке не так написано, там .get_text(strip=True), во-вторых у Вас ошибка в выборе div, где находится класс img-crop, нужно указать правильно вышестоящий div, в котором вы ищите и указать его в строке, которая выше items = soup.find_all('div', class_='ВОТ ТУТ')

  • @kachala
    @kachala Рік тому

    20:50 вместо 200 выдаёт response 403
    почитал и пишет что это защита от парсинга стоит

  • @АнастасіяПономарьова-ш1е

    Добрый день, сделала парсер все по уроку, парсит только первую страницу, если написать парсить 2 и более, просто дублирует данные с первой страницы. Прошу помощи

    • @НиколайСахаров-к9ь
      @НиколайСахаров-к9ь 3 роки тому

      ЖИЗА! Решили проблему?

    • @АнастасіяПономарьова-ш1е
      @АнастасіяПономарьова-ш1е 3 роки тому

      @@НиколайСахаров-к9ь да, пагинацию сделала по-другому, привязка к номерам страниц снизу или сверху первой, пример
      def get_pages_count(url, url_headers):
      html=requests.get(url, headers=url_headers)
      # print(html.text)
      tree = BeautifulSoup(html.text, 'lxml')
      links=tree.find_all("a", class_='page-link')
      # print(links[-2])
      page_count = int(links[-2].get_text(strip=True))
      print("Всего страниц: %d" % page_count)
      return page_count
      возвращает кол-во страниц, далее включаю цикл for от 1 до page_count

  • @VladislavN-v2y
    @VladislavN-v2y 3 роки тому

    Хорошее видео. Всё понятно.

  • @Анатолий-п6х
    @Анатолий-п6х 11 місяців тому

    почему после card append у вас 4 строки по прежнему относятся к BS а я за вами повторяю и у меня возникает ошибка 'NoneType' object has no attribute 'get_text' и с .get_text и .find, что это не относится к BS

  • @andriyrudenko9314
    @andriyrudenko9314 2 роки тому

    ЛУЧШИЙ!!

  • @ЮлияПавленко-й5н
    @ЮлияПавленко-й5н 2 роки тому

    Определенно лайка

  • @ИванКорсаков-ф6й
    @ИванКорсаков-ф6й 3 роки тому +1

    Хотелось бы увидеть парсер страниц, где нет пагинации.
    где URL не меняется при смене пагинации.

  • @user-urfinjuice
    @user-urfinjuice 4 роки тому +2

    В восторге друг

  • @ДарийМар
    @ДарийМар 2 роки тому

    очень круто, спасибо

  • @ban2479
    @ban2479 4 роки тому +1

    я астановился на 20:56 время мне написало что делать?
    C:\Users\Ban\AppData\Local\Programs\Python\Python39\python.exe C:/Users/Ban/PycharmProjects/pythonProject2/parser.py
    File "C:\Users\Ban\PycharmProjects\pythonProject2\parser.py", line 13
    r = requests.get(url, headers=,params=params)
    ^
    SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
    Process finished with exit code 1

  • @anns7309
    @anns7309 3 роки тому +1

    Спасибо за видео! А как правильно пройтись циклом, если нужно пройти по ссылке заголовка банковской карты и оттуда уже брать доп инфо?

  • @РоманСуворов-й2т
    @РоманСуворов-й2т 3 роки тому +2

    Мысль правильная, но не работает, ваш код. Нужно править логику перехода по страницам.

  • @ХожиакбарБаратов-ъ3ц

    Давайте сделаем шахматы в python-не
    Спасибо за уроки)

  • @road2zion2
    @road2zion2 3 роки тому

    Спасибо! Очень помог!