Отличная подача материал, но есть ряд замечаний: 1. range(1, n) возвращает список начинающийся с 1 и заканчивающийся n-1, соответственно в Вашем случае нужно написать range(1, PAGINATION+1); 2. функцию save_doc(cards, CSV) необходимо сдвинуть влево на уровень вышестоящего for. В текущем варианте записываемые в файл данные будут повторяться с нарастанием последующего прохода цикла парсера. PS Я понимаю, что автор легко нашел бы эти неточности в реальном проекте, но написал для тех, кто будет смотреть данное видео для обучения.
За 1 час я понял как парсить, я думал это сложно, но оказываеться это не так сложно, понятно и дохотчиво объясняешь даже каджую мелочь, мало таких кто объясняют, Спасибо за курс! вы лучший!❤ Спасибо что есть такие люди!
Спасибо за видео. Кстати у кого выдает ошибку UnicodeEncodeError, в with open добавьте encoding="utf-8-sig" (если вы работаете в виндовс). Будет выглядеть так: with open(path, 'w', newline='', encoding="utf-8-sig") as file: Отличное обучение для новичков, еще раз спасибо!
Уважаемый АВТОР, вы гений! Я за все 5 лет обучения в универе получил в разы меньше знаний чем от часа просмотра этого видео! Ставлю колокольчик на будущие уроки!
Урок был очень полезен. я только начал изучать. Вы сказали, что у Вас есть курс. Я его посмотрю. Курсы не бывают лишними). Вы говорите, что урок длинный и Вы много останавливаетесь на мелочах, но как новичок скажу, что проще перемотать вперёд, если ты что-то знаешь, чем упустить важную мелочь, когда ты ничего не знаешь)
Спасибо за видео, хорошо объясняешь! Помощь тем у кого траблы с кодировкой, это происходит изза символа 'é' в одном из тайтлов карт 'Chaméléon', есть 2 решения, либо подменить эти символы с помощью метода replace(), и тогда эта карта сохранится в наш список, либо просто отбросить данную карту вместе с ошибкой с помощью try except пример: try: writer.writerow([item['title'], item['link_product'], item['brand'], item['card_img']]) except UnicodeEncodeError: print('Получена ошибка: UnicodeEncodeError')
Большое спасибо за урок! За один вечер с поверхностными знаниями по python прошел урок и видоизменил его под свои нужды для парсинга с других сайтов(маркетплейс).
спасибо вам большое! наконецто научился парсить сайты! и это все благодаря вам! смотрел много видео но самое лутшее обяснение иммено у вас! спасибо еще раз! вы мне ооочень помогли! вы лутший!!!
url в get_html записан маленькими буквами. В то время как константа URL записана большими. Как это работает? Питон ведь чувствителен к регистру. Не понимаю.
Ну блин всё огонь. Кстати там сразу заметил пропущенные двоеточия в словаре на паре ключ значение. Смотрю и думаю сказал словарь, записывает данные как множество. Только множество пустое не так создаётся, и после последнего элемента насколько помню нужно запятую. Что то здесь не то))). И на константе csv pycharm заругался))). Там же как метод воспринимается. Когда без кавычек.
Спасибо за видео! Один вопрос, как парсить по списку ссылок? Есть определённые ссылки на страницы, с которых нужно спарсить title и h1. Как это сделать?
отличный урок получился, и у меня почти всё вышло, пока не начал сохранять в csv файл адреса картинок и ссылку на банк, что то с кодировкой. Если написать так with open(path, 'w', newline='', encoding='utf8') as file тогда все гуд, но в екселе абра кадабра, которую уже потом можно декодировать.
Спасибо за урок, сделал парсер по нему для тех же карточек. Теперь там все поменялось, я переделал. Если кому нужен код, что бы не набивать, пишите. Только у меня названия банков парсятся в неправильной кодировке, не знаю что с этим делать пока.
Подскажите, пожалуйста, получаю ошибку: '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}].
Здравствуйте я тоже досмотрел все видео и вбил до конца. По всему нету пару советов есть на английских сайтах пока думаю. вот один советует.coderoad.ru/51687872/BeautifulSoup-get_text-возвращает-объект-NoneType
Во-первых в уроке не так написано, там .get_text(strip=True), во-вторых у Вас ошибка в выборе div, где находится класс img-crop, нужно указать правильно вышестоящий div, в котором вы ищите и указать его в строке, которая выше items = soup.find_all('div', class_='ВОТ ТУТ')
Добрый день, сделала парсер все по уроку, парсит только первую страницу, если написать парсить 2 и более, просто дублирует данные с первой страницы. Прошу помощи
@@НиколайСахаров-к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
почему после card append у вас 4 строки по прежнему относятся к BS а я за вами повторяю и у меня возникает ошибка 'NoneType' object has no attribute 'get_text' и с .get_text и .find, что это не относится к BS
я астановился на 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
Ахренеть , как вы просто каждое слово в коде объясняете и все нормальным языком. Здоровье вам ❤
Отличная подача материал, но есть ряд замечаний:
1. range(1, n) возвращает список начинающийся с 1 и заканчивающийся n-1, соответственно в Вашем случае нужно написать range(1, PAGINATION+1);
2. функцию save_doc(cards, CSV) необходимо сдвинуть влево на уровень вышестоящего for. В текущем варианте записываемые в файл данные будут повторяться с нарастанием последующего прохода цикла парсера.
PS Я понимаю, что автор легко нашел бы эти неточности в реальном проекте, но написал для тех, кто будет смотреть данное видео для обучения.
Много профессионалов на ютубе, но мало кто может так подробно и понять объяснить материал. Спасибо !
Но я даже не профессионал))
@@andrievskii Так ещё и скромный
Спасибо, что рассказал абсолютно все, даже для диких чайников. Респект 👍
лучшее видео по PYTHON, что я видел. Многие вещи стали понятными. Огромное спасибо! Надеюсь будут и дальше похожие видео)
Однозначно лайк, подписка.
PythonToday посмотри, тоже чувак толковый
За 1 час я понял как парсить, я думал это сложно, но оказываеться это не так сложно, понятно и дохотчиво объясняешь даже каджую мелочь, мало таких кто объясняют, Спасибо за курс! вы лучший!❤ Спасибо что есть такие люди!
Удачи в обучении, пусть все получится
Спасибо за видео. Кстати у кого выдает ошибку UnicodeEncodeError, в with open добавьте encoding="utf-8-sig" (если вы работаете в виндовс). Будет выглядеть так: with open(path, 'w', newline='', encoding="utf-8-sig") as file:
Отличное обучение для новичков, еще раз спасибо!
Не мог понять что делать с ошибкой, и тут ответ, спасибо)
@@МаркМалина знал, что пригодится
Уважаемый АВТОР, вы гений!
Я за все 5 лет обучения в универе получил в разы меньше знаний чем от часа просмотра этого видео!
Ставлю колокольчик на будущие уроки!
Рад был помочь))
Соболезную
Изумительное объяснение. Там где надо расставлены акценты. Спасибо!
отличный урок ! мне нравиться что вы рассказываете о методах подробно .
Мой первый парсер готов благодаря Вам, спасибо огромное)
Самый лучший и понятный курс по парсингу который я встречал, красавчик!
Спасибо, очень приятно
Братушка от души за контент, очень класно все объясняешь! Плиз побольше питона бро, а с нас царские лайки))
Супер, дякую за відео, та детальне пояснення.
Будь ласка
Урок был очень полезен. я только начал изучать. Вы сказали, что у Вас есть курс. Я его посмотрю. Курсы не бывают лишними). Вы говорите, что урок длинный и Вы много останавливаетесь на мелочах, но как новичок скажу, что проще перемотать вперёд, если ты что-то знаешь, чем упустить важную мелочь, когда ты ничего не знаешь)
очень полезный урок, написал свой первый парсер, благодарю Андрей!
Не останавливайся)
Три дня я писал и вникал в этот код, спасибо большое за такой урок очень полезный, теперь я на шаг ближе к своей мечте!
Здравствуйте. Спасибо вам за курс! Все очень понятно и доступно. Вы объясняете чуть ли ни каждую мелочь и это очень хорошо.
Огромное спасибо... Уже несколько дней пытаюсь понять, а не получается. А у вас всё понятно каждую строку объяснили. Ещё раз огромный респект!
Спасибо за видео, хорошо объясняешь!
Помощь тем у кого траблы с кодировкой, это происходит изза символа 'é' в одном из тайтлов карт 'Chaméléon', есть 2 решения, либо подменить эти символы с помощью метода replace(), и тогда эта карта сохранится в наш список, либо просто отбросить данную карту вместе с ошибкой с помощью try except пример:
try:
writer.writerow([item['title'], item['link_product'], item['brand'], item['card_img']])
except UnicodeEncodeError:
print('Получена ошибка: UnicodeEncodeError')
Большое спасибо за урок! За один вечер с поверхностными знаниями по python прошел урок и видоизменил его под свои нужды для парсинга с других сайтов(маркетплейс).
Рад, что был полезен
Поделись пожалуйста кодом для маркетплейса
Круто. Искал нормальное поясняющее видео по парсингу. В этом максимально все понял ))) Спасибо.
Мучался с парсером 3 дня. Однако с твоим видео всё таки смог его довести до результата.
Спасибо за очень полезный и компактный разбор! Лайк и подписка!
Спасибо за подписку
Андрей Андриевский, спасибо Вам большое за решение с Плагинацией. Круто! Все сделал и все получилось! Желаю Вам успехов в 2022-году! :)
Огромное спасибо автору! Всё максимально понятно и подробно, большое спасибо!❤️
Андрюха, спасибо за доскональный урок.
Ты - лучший.
Don't get lost !
спасибо за комментарий
спасибо вам большое! наконецто научился парсить сайты! и это все благодаря вам! смотрел много видео но самое лутшее обяснение иммено у вас! спасибо еще раз! вы мне ооочень помогли! вы лутший!!!
здОрово! Браво! ещё бы добавить автоматическое определение количества страниц для парсинга)))
Все очень хорошо объяснил. Только, просьба, делай масштаб побольше, а то на телефоне плохо видно)
Единственный толковый урок. Спасибо, все понятно и ясно объяснил!!!
Для всех у кого парсятся непонятные символы вместо русских букв:
в функции get_html добавьте строчку " r.encoding = 'utf8' " и всё будет норм
спасибо от души
а куда её вставить - можно чуть подробнее плиз? не понимаю :(
@@grigoriimikhailov703 между r = requests.get(url, headers=HEADERS, params=params) и return r
Спасибо добрый человек! Отличная подача материала. Респект!
Спасибо супер, сделайте парсер с сайтами куда надо заходить с логином, хотя бы легенкий парсер чтобы понять как работать
Спасибо большое вам! Пытался писать парсера, никак не получалось, зашел к вам на видео - все с первого раза написал
Супер видео , спасибо вам , очень круто объясняете , пересмотрю ваши плейлисты на досуге )
Бро, спасибо тебе большое, ты реально мне помог! Здоровье тебе и твоим близким
Андрей!!
Круто, молодец
Просмотрел весь видос, все ясно и понятно рассказываешь)
Спасибо
Вот такие и должны быть уроки! Респектище и спасибо колоссальное!
Спасибо, дружище, всё подробно и по делу. Очень полезное видео.
Отличный урок, думаю будет всем полезно рассмотреть создание парсера через ООП.
Спасибо за труд!
url в get_html записан маленькими буквами. В то время как константа URL записана большими. Как это работает? Питон ведь чувствителен к регистру. Не понимаю.
Спасибо за видео, отлично объясняете, помогло в освоении python !
Ты просто лучший, огромное спасибо
Спасибо
Дякую за урок. Це було дуже корисно!
Гарного навчання
Отличное видео, самое годное по парсингу! Автору респект
спасибо, хороший урок! сделайте пжл аналогичное видео с использованием Selenium для динамических сайтов, думаю многим будет интересно
Ну блин всё огонь. Кстати там сразу заметил пропущенные двоеточия в словаре на паре ключ значение. Смотрю и думаю сказал словарь, записывает данные как множество. Только множество пустое не так создаётся, и после последнего элемента насколько помню нужно запятую. Что то здесь не то))). И на константе csv pycharm заругался))). Там же как метод воспринимается. Когда без кавычек.
Огромнейшее спасибо от всей души за урок. Шикарная подача.
Ставлю тебе душевный лайк, видео очень помогло, отличный урок, спасибо тебе за твой труд!
*Ты лучший спасибо по больше таких уроков*
Спасибо, очень хорошо объясняете, час - это совсем не долго, зато подробно и понятно.
Круто!
Получилось! Правда только одну страницу и без сохранения в файл почему-то.. Буду пересматривать еще, видимо что-то упустил.
Ждем продолжения!
Красава! Видос отличный! Спасибо, что заморочился!
Спасибо за видео! Один вопрос, как парсить по списку ссылок? Есть определённые ссылки на страницы, с которых нужно спарсить title и h1. Как это сделать?
Очень полезный урок. СПАСИБО
отличный урок получился, и у меня почти всё вышло, пока не начал сохранять в csv файл адреса картинок и ссылку на банк, что то с кодировкой.
Если написать так
with open(path, 'w', newline='', encoding='utf8') as file
тогда все гуд, но в екселе абра кадабра, которую уже потом можно декодировать.
Спасибо большое вам, объяснили все очень понятно. Мне этот ролик очень сильно помог, здоровья вам!
А почему у меня парсится не страничка объектов а только один объект на страничке??
Урок понравился, спасибо. Всё понятно) Даже подписался
отличный урок. большое спасибо!
Пожалуйста
Просто отличная подача материала, супер!!!
Спасибо за урок, смог написать парсер под мои цели
жму руку! все ясно и понятно!
Отличный урок! Подписался
Видос годный)
Лайк подписка.
Пойду писать код.
Чтобы захватывал последнюю страницу необходимо писать range не захватывает последнее значение
Мега-полезный урок! спасибо!
Круто, огромное спаибо.
Однозначно подписка ,жду видео по питону
Спасибо за ваш труд,позновательно!
Информативное видео, спасибо огромное!
Спасибо за урок, сделал парсер по нему для тех же карточек. Теперь там все поменялось, я переделал. Если кому нужен код, что бы не набивать, пишите. Только у меня названия банков парсятся в неправильной кодировке, не знаю что с этим делать пока.
Пропиши utf-8 забей как это сделать
Вышлите мне код пожалуйста
Все доступно, но ещё бы структура кода была бы в рамках ООП :))))
Всё очень понятно. Спасибо большое! =)
Всё полезно, просто и для тупых. Уважуха и респект!!!
Не ну это лайк однозначно👍🏻
Классное объяснение .Хоть один человек детально всё показал. СПАСИБО. А видео с применением ООП будет.?
Будет в плейлисте о Джанго
я думаю пора обновить данное видео, можно даже на этом же сайте, думаю всем будет интересно поменялось что то за 3 года или нет)
Классно , спасибо большое !👍🏻
slov net, prosto bolshoy like
Спасибо за людское объяснение ))))
На первом этапе вместо Response 200
Response 403. Что делать
Сайт переделали, но главное что все принципы разжеваны и можно без проблем повторить. Так даже интереснее))
Понятно и доходчиво
Круто.Спасибо.👍👍👍👍👍👍👍👍👍👍
Подскажите, пожалуйста, получаю ошибку:
'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}].
Здравствуйте я тоже досмотрел все видео и вбил до конца. По всему нету пару советов есть на английских сайтах пока думаю. вот один советует.coderoad.ru/51687872/BeautifulSoup-get_text-возвращает-объект-NoneType
Во-первых в уроке не так написано, там .get_text(strip=True), во-вторых у Вас ошибка в выборе div, где находится класс img-crop, нужно указать правильно вышестоящий div, в котором вы ищите и указать его в строке, которая выше items = soup.find_all('div', class_='ВОТ ТУТ')
20:50 вместо 200 выдаёт response 403
почитал и пишет что это защита от парсинга стоит
Добрый день, сделала парсер все по уроку, парсит только первую страницу, если написать парсить 2 и более, просто дублирует данные с первой страницы. Прошу помощи
ЖИЗА! Решили проблему?
@@НиколайСахаров-к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
Хорошее видео. Всё понятно.
почему после card append у вас 4 строки по прежнему относятся к BS а я за вами повторяю и у меня возникает ошибка 'NoneType' object has no attribute 'get_text' и с .get_text и .find, что это не относится к BS
ЛУЧШИЙ!!
Определенно лайка
Хотелось бы увидеть парсер страниц, где нет пагинации.
где URL не меняется при смене пагинации.
В восторге друг
очень круто, спасибо
я астановился на 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
Спасибо за видео! А как правильно пройтись циклом, если нужно пройти по ссылке заголовка банковской карты и оттуда уже брать доп инфо?
Мысль правильная, но не работает, ваш код. Нужно править логику перехода по страницам.
Давайте сделаем шахматы в python-не
Спасибо за уроки)
Спасибо! Очень помог!