Обучение парсингу на Python #2 | Парсинг сайтов | Выполняем заказ на фрилансе
HTML-код
- Опубликовано: 15 май 2024
- Обучение (Web-Scraping) веб парсингу на Python. В данном видео разбираем на практике работу с библиотеками requests и Beautifulsoup4. Научимся делать запросы, сохранять страницы, парсить из них нужную нам информацию и что немаловажно рассмотрим сохранение данных в файлы json и CSV формата, т.е в таблицы.
🔥 Доступ в приват | Поддержать проект:
boosty.to/pythontoday
/ pythontoday
yoomoney.ru/to/410019570956160
🔥 Telegram канал с к кучей ништяков и кодом из видео:
t.me/python2day
💰 Стать спонсором канала:
/ @pythontoday
Таймкоды:
00:00 - Интро
00:31 - Описание проекта
01:32 - Установка необходимых библиотек
01:55 - Получение и сохранение главной страницы
06:42 - Сохранение данных в JSON файл
08:15 - Замена нескольких символов в строке
10:50 - Получение заголовков таблицы
12:38 - Запись заголовков в csv файл
13:50 - Получение химического состава продуктов со страницы
15:25 - Запись химического состава продуктов в csv файл
17:43 - Создание списка и запись данных в json файл
18:35 - Запуск парсера
****Ссылки****
Дешевый/надежный сервер в Европе + СКИДКА 10%:
vdsina.ru/?partner=858b36ud3p
Хороший proxy сервис:
proxy6.net/a/149995
Обучение парсингу на Python #1 | Парсинг сайтов | Разбираем методы библиотеки Beautifulsoup
• Обучение парсингу на P...
Документация Beautifulsoup:
EN: www.crummy.com/software/Beaut...
RU: www.crummy.com/software/Beaut...
Зарабатываем 7500р на фрилансе | Телеграм бот на aiogram | Парсинг динамического сайта
• Парсинг на Python | За...
Скачиваем интернет | Как скачивать файлы с помощью Python:
• Как скачивать файлы с ...
Работаем с Google Диск на Python:
• Работаем с Google Диск...
Парсинг криптобиржи | Торговый бот | API криптобиржи:
• Парсинг криптобиржи | ...
Python с нуля | if _name_ == '__main__' | Зачем? И почему нужно использовать
• Python с нуля | if __n...
Асинхронный парсинг на Python | Ускоряем код в 10 раз
• Асинхронный парсинг на...
Парсинг на Python | Подмена IP-адреса | Запросы через прокси
• Парсинг на Python | По...
Парсинг динамического сайта на Python + Telegram бот на AIOGram | Requests, AIOGram, API, JSON
• Парсинг динамического ...
Пишем Telegram бота на Python + Загружаем Telegram бота на сервер(хостинг):
• Пишем Telegram бота на...
Плейлист по распознаванию лиц на Python:
• Распознавание лиц | Fa...
Плейлист по парсингу сайтов на Python:
• Парсинг/Scraping
Плейлист по Instagram боту:
• Instagram Bot на Pytho...
Плейлист по Linux для новичков:
• Linux для начинающих
ККод проекта на github:
github.com/pythontoday/scrap_...
И в telegram канале:
t.me/python2day
****Соц.сети****
Telegram: t.me/python2day
Таймкоды для вас:
00:00 - Интро
00:31 - Описание проекта
01:32 - Установка необходимых библиотек
01:55 - Получение и сохранение главной страницы
06:42 - Сохранение данных в JSON файл
08:15 - Замена нескольких символов в строке
10:50 - Получение заголовков таблицы
12:38 - Запись заголовков в csv файл
13:50 - Получение химического состава продуктов со страницы
15:25 - Запись химического состава продуктов в csv файл
17:43 - Создание списка и запись данных в json файл
18:35 - Запуск парсера
А вы работаете на фрилансе ? И где вас найти если да ...
@@andreychernov753 Извини, я не беру заказы. Не хватает времени. Если хочешь подискутировать, залетай в ТГ чат
@@PythonToday а что с чатом, не могу там писать сообщения?
Спасибо за уроки, всё очень круто! Есть несколько вопросов: как не получить бан от сайта при скрапинге, как обходить блокировки, как парсить защищённые от скрапинга страницы и для каких задач стоит выбирать bs4, а для каких selenium?
Эти темы будут затрагиваться в следующих уроках?
Ещё интересен такой момент: для чего ты сохраняешь промежуточные данные в файлы? Всё равно же ты их читаешь потом в память и оперируешь объектами в памяти. Нафиг они нужны, никак не пойму?)
ДЛЯ ТЕХ У КОГО РАЗНАЯ ЕРЕСЬ, ИЛИ ПРОСТО БЕЛЫЙ ЭКРАН ВМЕСТО СИМВОЛОВ, пропишите в строке сохр файла (with open("index.html", "w")), encoding="utf-8", тоесть должнл получится with open("index.html", "w", encoding="utf-8") as file: .
13:50 В Windows в шапке в одной ячейке указаны через запятую - Продукт,Калорийность,Белки,Жиры,Углеводы. Чтобы разместить правильно по ячейкам указываем
with open(f'data/{count}_{category_name}.csv', 'w', encoding='utf-8-sig') as file:
writer = csv.writer(file, delimiter=';')
Здоровья тебе!!!
спасибо спаситель
Это надо продвинуть в топ, нас, любителей винды, пока что еще много XD
А у меня наоборот, с delimeter всё в одной ячейке.. без делиметер, всё ок.
Спасибо, сам долго мучался с кодировкой. в итоге ответ нашел, но слова были не в своей колонке. Сейчас все ок! Здоровья тебе
Если использовать метод супа .select() вместо .find(), то можно существенно сократить код.
Как пример, на 14:20 минуте видео, строка 80, вместо
products_data = soup.find(class_='mzr-tc-group-table').find('tbody').find_all('tr')
можно написать
products_data = soup.select('.mzr-tc-group-table tbody tr')
Метод .select() позволяет использовать синтаксис как в css, очень удобно
Дельное замечание. Спасибо =)
У меня постоянно возникала ошибка:
products_data = soup.find(class_="mzr-tc-group-table").find("tboby").find_all("tr")
AttributeError: 'NoneType' object has no attribute 'find_all'
твой совет помог мне её решить, спасибо
Вау, удивлен, что такой качественный материал лежит в открытом доступе. Огромное спасибо автору
Большое спасибо за поддержку! Рад что видео помогают.
автор реально гигант своего дела. Прям так все четко, все что нужно. Кайфанул с его видосов
спасибо за труд и за то, что делишься своими знаниями...👍
Огромное спасибо за полезный материал! Вся теория и боевая практика за два коротких видео, потрясающе!
Спасибо большое за фидбэк! Рад что полезно и помогает 👍
Огромное вам спасибо, всё доступно, без воды ну и реальная практика! Продолжайте в том же духе!
Благодарю 💪
Кайф! Очень нравится стиль подачи, скорость. Спасибо!!!
Спасибо
очень круто объясняешь, с удовольствием посмотрю остальные видео на твоём канале
Спасибо за видео! Только начинаю, не везде до конца понимаю, но контент супер! На голову выше того что раньше смотрел
Спасибо за фидбэк 💪
Большое спасибо за видео! Всё очень информативно, понятно, без воды и с кучей практики. С твоей помощью постепенно постигаю парсинг.
Спасибо за поддержку! Рад что видео помогают!
Большое спасибо. До этого видео не мог даже связать заголовок и дату публикации через парсер. А тут целая таблица и все понятно. Отличная подача материала)
Благодарю. Рад что полезно
Если столкнулись с проблемой, что в csv файле после каждой строки ставится пробел, используйте
writer = csv.writer(file, lineterminator='
')
также можно добавить атрибут к открытию файла csv newline=""
спасибо!
У меня запятыми разделяет...
спасибо! перерыл гугл, а ответ был под видео)
Ответ в ТОП!
Замечательно! Хоршая практика. Спасибо!
пересматриваю, еще раз спасибо за труды!👍👏
Спасибо за фидбэк 💪
Класс! меня бесят видеоуроки, потому что в них плотность инфы 5%. Весь часовой урок можно изложить в полстраницы текста. А у вас - браво! По-моему, максимально возможная степень сжатия, причем не во вред усвоению. Благодарю, профессионально!
Спасибо за фидбэк! Рад что полезно и интересно
@@PythonToday Здравствуйте, а у вас есть уроки парсинга динамически подгружаемого контента?
@@themelkiywey3485 возможно уже поздно, но у автора есть отдельный плейлист где он объясняет selenium
Для владельцев "прекрасной" винды. Если в Excel вместо русских букв выводится тарабанщина, а encoding="utf-8" не помогает, как это было у меня, то может помочь encoding="utf-8-sig"
Спасибо)
Спасибо, выручил.
Спасибочки!!!
огромнейшее спасибо
Спасибо. Заработало.
Было очень интересно пройти этот урок с вами)) Благодарю!
Благодарю за фидбэк!
Спасибо большое! Очень годный контент!!!
Огромное спасибо! По вашим урокам учится весело!
Благодарю за фидбэк!
Во-первых, спасибо и низкий поклон! Объяснение просто потрясающее, четко, лаконично, просто и доступно!
Во-вторых, у тебя потрясающие педагогические данные! Очень круто, что ты нашел ему применение и очень надеюсь, что твой труд не проходит бесследно и для тебя в том числе, потому что для зрителя, особенно новичка в деле - все очень здорово и доступно!
Желаю развития твоему каналу, а тебе неиссякаемой энергии на довольно не простое дело - обучение других людей!
СПАСИБО!
Большое спасибо за такой фидбэк и поддержку!
Автор крут, обучающее видео на высоком уровне👏👏👏 Спасибо 🤝
Спасибо большое за контент! Ты прекрасно объясняешь и описываешь. Большое тебе за эт спасибо!
Большое спасибо за поддержку!
Спасибо отлично и видно что из опыта сразу дает как не попасть в некоторые не приятные моменты!
Спасибо за фидбэк
Огромное спасибо, очень понравилась подача, смотрю вас уже 3 месяц если не больше, подача великолепная, других специалистов по python смотреть скучно, а у вас прям, тянет смотреть дальше и дальше, не останавливаясь.
Поставил лайк
Большое спасибо за фидбэк и поддержку!
Великолепный плейлист! Спокойный уравновешанный голос, грамотные объяснения без лишней воды и пробелов. Автор, так держать! От себя: хотелось бы отдельное видео по обходу блокировок на сайтах типа букмекерских кантор или бирж
Дружище благодарю за фидбэк. А какие там например блокировки? Недавно парсил теннисные события, вроде прошло как обычно.
@@PythonToday Сложно сказать, я только начинаю писать свои парсеры. Меня быстро блокировали, думаю что-то не так было с таймингами и headers
Кинь сайт, только домен с которым работал, например stavkinasport, а то комент заблочат. Посмотрю
@@PythonToday parimatch
Благодарю за видео. Очень доходчиво и полезно
Благодарю за поддержку!
Супер контент! Второй час ночи, но таки получилось спарсить расписание и маршрут местных автобусов, опираясь на данное видео :)
Большое спасибо!
Рад что полезно! Спасибо за фидбэк!
Огромное спасибо за твой труд! Взращиваешь будущих программистов!
Большое спасибо за фидбэк!
спасибо за ваш труд. было интересно. продолжу изучать ваши видео по парсингу.
Спасибо за фидбэк!
отличный урок! спасибо за гайд!👍🤘
Благодарю за фидбэк 💪
Чувак ну прям годнота!! Огромный респект за такой контент. То что я хотел и вовремя.
С двух аккаунтов подписался ))
Большое спасибо за фидбэк и поддержку!
🌟 Отличное видео!
👏 Посмотрел и сделал всё по инструкциям - результат великолепен! 🎉 Это идеальный гид для новичков и не только. 📚 Всё понятно и доходчиво объяснено. 👍
Данные у меня на компе. 🖥 😊
Как всегда инфа супер!)
3:42 У меня возникла проблема с Юникодом. Ошибка была что-то вроде "'charmap' codec can't encode characters"
У кого такая же то вот, лайфхак:.
Вместо привычного with open("name", "*") Нужно обозначить ещё и кодировку with open("name", "*", encoding="utf-8")
После этого html файл записался без проблем
Заочно лайк!
Крутой видос! Подчерпнул одну мысль, спасибо)
Спасибо 💪
Автору огромное спасибо! Клевая подача и крутой контент!
Благодарю!
Интересно! Благодарю
Огромное спасибо за проделанную работу,видео очень полезное.Имеется лишь один вопрос:почему при работе с
проблемной страницей(danon)из класса "uk-alert uk-alert-danger uk-h1 uk-text-center mzr-block mzr-grid-3-column-margin-top" вы выделяете из него только "uk-alert-danger"? 15:55
Автору огромное спасибо. Контент супер.
Большое спасибо за поддержку!
Круто, информативно, интересно. Моё почтение, сударь!
Большое спасибо за фидбэк и поддержку!
ОГРОМНЕЙШЕЕ СПАСИБО ВАМ!!!
Благодарю 💪
Потратил минут 10 на то, чтобы разобраться с проблемой не распознавания символа ('charmap' codec can't decode byte
,такая вот ошибка).Проблема появлялась,когда мы считывали из сохраненного файла index.html информацию о ссылках. (Перед этим была проблема с кодировкой, решение нашел ниже) И вот в видео мы убираем параметр "w",и я в своем случае encoding = "utf=8",и программа останавливалась на считывании информации из файла. Решение простое - оставить encoding = 'utf-8'. У меня Win10,может это кому-то поможет.
Молодцом, что сам разобрался 👍
Лучше бы везде добавлять encoding="UTF-8-sig", таким образом дополнительно прописывая кодировки c BOM, потому как чтение в excel полученной информации без BOM будет кривое.
Спасибо тебе, мужик! Очень выручил!
@@user-ig1hf8fb7r ну мне в excel просто не приходилось ещё сохранять, в основном только в json
Спасибо очень выручил! Я пол дня искал как решить данную проблему, потому что когда кодировки не было то на 8 итерации charmap выскакивал, а если была тогда символы не понятные были вместо текста, а как поставил encoding="utf-8-sig" и то и то мгновенно отпало. Больше никаких проблем и все читается)))
Наверно поздно, но можно вопрос:
когда вы сохраняли req.text в файл html, каким образом там еще и css сохранился?
И еще: после request кириллица, в виде ascii симболов (кажется). Я так понял это проблема с кодировкой, но вот как ее исправить не нашел. Можете, пожалуйста, подсказать?
Спасибо!
Спасибо за полезный урок. Скоро подпишусь на патреон
Благодарю за фидбэк!
Очень классный и полезный канал) вы молодец!
Большое спасибо за поддержку!
Круто. От красоты кода словил эстетическое удовольствие.
Спасибо за поддержку) Да прям, код очень далек от идеального, учусть только
@@PythonToday да, но эта тема ide, оно очень приятная. и да, вести документацию и оборачивать все в функции надобно бы, но я думаю, в демонстрационных видео ты это специально опустил).
спасибо за видео!
Очень полезно! Спасибо.
Благодарю 💪
Прохожу не первое видео, все супер! Держу в курсе))
Спасибо за поддержку! Рад что полезно 👍
Отличный урок, спасибо !
Благодарю за фидбэк!
Спасибо тебе огромное ХОРОШИЙ ЧЕЛОВЕК
Спасибо за фидбэк!
Все круто и классно, подробно и понятно 👍
Вот только погинация не рассмотрена) жду новых видео по парсингу,
Спасибо за проделанную работу
За 20 минут этого видео решились все проблемы с моим парсером) 3 дня голову ломал. Низкий поклон автору)
Спасибо за фидбэк! Рад что видео полезны)
Благодарю за видео ! Каждый шаг познавателен и всё понятно!
У меня почему то csv получился с пустыми строками между каждой итерацией
Спасибо за фидбэк. Проверь отступы при сохранении. Думаю где то вышел из цикла.
Тоже была такая проблема. Добавил во время записи csv параметр newline="" . Пустые строки пропали.
with open(f'data/{count}_{categorie_name}.csv', 'a', encoding="UTF-8-sig", newline=''") as file:
Отдельное спасибо комментаторам, решение всех проблем нашел под видео.
PS: Уроки супер!
@@user-gw3lh3pl3y эх жаль не углядел сразу ответа, и пошел искать в интернеты)), много времени конечно не заняло, но все же мог бы и не тратить его на поиски 😁
Супер!! Все работает! Я тебя обожаю
Спасибо за фидбэк!
Очень интересно!
Музыка на фоне просто топ, 4 раза за видос поспал!
Годнота.пошел повторять.
Всё по делу, спасибо )
Благодарю за фидбэк 👍
Спасибо за видео! И такой вопрос: как решать проблемы с появлением капчи при парсинге сайтов?
хочется сказать автору просто ОГРОМНОЕ СПАСИБО)))
только осваиваю парсинг и благодаря Вашим роликам это выходит делать)
делал параллельно с Вами
сначала пытался сам, если что то не понятно то смотрел дальше
у Вас 20 минут у меня часа 2-3 ибо первый раз этим занимаюсь
я так понимаю в этом деле надо тоже набить шишки и опыт)
Опыт лучший учитель) Всё будет, главное практика! Большое спасибо за фидбэк и поддержку!
То. что в видео показывается за 10-20 минут, за этим стоит несколько часов, порой десятки и дни работы. Так что всё окей, успехов в начинаниях!
Отличное видео!
Про Scrapy хотелось бы уроков)
Были бы все подобные темы подобного качества. Напротив, получается, как алмазы в кучах дерьма искать нечто подобное. В этой теме все четко.
Лучший❤
Хорошая подача и всё понятно. Даже понятно что мне не хватает практики с базовыми вещами. То есть когда написано в видео - всё понятно, а как автор до этого догадался - темнота. И в конечном результате если возьмусь сам за проект - не буду знать с чего начать))))) Огромное спасибо и удачи в развития канала
Благодарю за фидбэк!
благодарю. видео мега полезное!
Видео норм, но я вот остановился на этапе получения кода страницы)
Подумал что не пускает потому что я из Украины, и накатил уже прокси перед основным блоком кода...Результата нету(мб связать надо как то).
Вообщем занимательно, от одного к другому метаюсь , мб что то и сделаю)
upd* Да дело с прокси, сейчас буду привязывать его)
У кого файл csv заполняется с пустыми строками, добавьте атрибут lineterminator в writer:
with open(f"categories\{mod_category_name}.csv", "a", encoding="cp1251") as file:
writer = csv.writer(file, lineterminator="
")
Второе ваше видео которую активно просматриваю и разбираю на части для себя. Благодаря вам, пишу тестовое задание от компании в которую хочу устроиться на стажировку! Дедлайн через три дня, 70 % работы сделано с вашей помощью! Просто знайте, что вы вносите важный вклад для всех начинающих программистов. Бишкек, Кыргызстан.
Большое спасибо за фидбэк и поддержку!
устроился на работу?
Спасибо.
Спасибо
Супер!
Спасибо! Даже для нубаса все понятно.
Прекрасный контент. Спасибо.
Возможно я не понял или вы оговорились на 16:30.
Как функция len() по отношению к нашему словарю, да и вообще чему угодно, может вернуть
что-либо кроме целочисленного значения типа int ?
Здравствуйте. Код работает, но в файле экселя все данные записываются в первый столбик. Можно ли это исправить?
Чувааак, это прям очень клево.
Благодарю 💪
годнота, огромное спасибо вам!
Благодарю за фидбэк и поддержку!
Отличный урок!У меня все получилось)))! Ура)! Большое вам спасибо! Чаще всего пришлось сталкиваться с проблемами кодировки текста(юникоды), в итоге везде в строчках открытия файла прописал encoding= "utf-8" и в настройках редактора кода (sublime text)на вход и на выход также поставил UTF-8.
Благодарю 💪
Спасибо, начал тупить с победой над кривой кодировкой. encoding= "utf-8" на вин 10 выручил.
спасибо за работу
Спасибо за фидбэк!
Таймкод:
3:18 - Сохранение данных в html файл
5:05 - Данные которые будем собирать
5:35 - Вывести список данных через for
5:54 - Текст и ссылка.get("Атрибут")
6:37 - [текст] = ссылка -> текст: ссылка
6:50 - Сохранение данных в json
Благодаря этому видео спарсил свой первый сайт по каталогу юнитов любимой игры. Код причем оказался гораздо более объемный (и корявый) за счет некоторых неочевидных факторов, как отсутствие классов у ссылок, различающиеся параметры таблиц (заголовки к таблицам и инфа в них то была, то нет. Сайт в этом плане был написан довольно неграмотно), но в итоге удалось таки получить заветные данные в двух форматах. За это Спасибо автору, обязательно изучу остальные видео по парсингу!
Молодцом, рад что полезно!
Спасибо огромное вам!!!!
Благодарю за фидбэк!
@PythonToday, как у вас получается текст в csv выравненный по самому длинному слову?
Очень крутой видос. Запиши пожалуйста парсинг многостраничных сайтов, которые с перелистыванием страниц снизу, я имею ввиду.
Благодарю за фидбэк. Но ведь это прям просто если пагинация на странице. Как будет такой заказ, сразу выложу. Сегодня будет видео с динамическим сайтом
Очень Круто! Базовые знания Python, и уже можно делать то, за что дают деньги. Для новичка очень круто!!!
Благодарю за фидбэк!
очень сильно помогло, спасибо огромное!!!!!!!
Рад что полезно, спасибо за фидбэк!
ты шикарно объясняешь , есть в планах продолжать ликбез по питону)))
Спасибо 👍 В планах куча практики и продолжение плейлиста для новичков, к сожалению совсем не хватает времени на всё сразу
@@PythonToday буду ждать отличный канал))
Спасибо за ваши видео, всегда смотрю с интересом, учусь, пробую. Списал ваш код, после чего немного доработал используя pandas. Хотелось бы поделиться, обязательно попробуйте если не знали о таком методе( надо будет установить, импортировать pandas
table_head = pd.read_html(ссылка) - вытаскивает таблицы целиком со страницы, сохраняя их в списки, но таблицы должны быть в теге table
table = table_head[0] - выбираем нужную таблицу из списка
table.to_csv(f'data2/{count}_{category_name}.csv' - сохраняем в csv
)) Надеюсь кому нибудь пригодиться)))
Добрый день, спасибо большое за отличный курс!
Подскажите, пожалуйста, с чем может быть связано при запуске кода появление всплывающего окна: "Copy Authorization URL to Clipboard"? Видимо я в самом начале, что-то не то сделал с авторизацией к сайту?...
Можно ещё soup ом добраться до таблицы и потом пандасом прочитать, есть метод read_html() и получится сразу готовый датасет, с которым можно дальше работать.
Есть ли какие то библиотеки, которые поддерживают динамический html? Может интеграция с браузером, или эмитация его работы?
Спасибо за ваш контент! Канал просто отличный!
P.S. Думаю ещё один хороший способ как заменить несколько символов в строке на знак нижнего подчёркивания это использование re.sub из модуля re.
А именно: print(re.sub(r"\s+|,|-|'", "_", category_name))
Большое спасибо за фидбэк и за код!
Но если стоят рядом запятая и пробел, то два подряд подчёркивания будет
Отличное видео!
Спасибо 💪
Мой первый код, в котором не было ошибок =) и я не тратил время на поиски ненужного!
Спасибо за урок. Пару недель начал изучать Python и тут как раз подвернулась задача по парсингу. Правда на 7ой минуте получилась абра-кадабра ))
Нашёл на просторах, что нужно было добавить encoding='utf-8' в with open
Спасибо! Была та же ошибка )
Вариант замены нескольких символов в строке:
var = 'some text'
for i in ['s', 't', '42', ]: var = var.replace(i, '*')
print(var) # output: '*ome *ex*'
парень, ты колдуешь
У кого проблемы с кодировкой/в index..html вместо текста знаки вопроса
with open("index.html", 'w', encoding="utf-8") as file:
file.write(src)
Для замены unicode-символов в строке можно использовать библиотеки "python-slugify" или "awesome-slugify"