Вы когда-нибудь хотели знать цену со скидкой раньше? В этой статье обсуждается, как создать инструмент, который обнаруживает лучшие сделки с методами веб-скрапинга, на небольшом устройстве Raspberry Pi, который вы можете быстро создать дома в течение 10 минут.
Предпосылки
- Raspberry Pi (Не обязательно, достаточно ноутбука). В сети есть масса проектов Raspberry Pi; большинство этих проектов требует некоторой электротехники. Однако наши варианты использования будут просто использовать Raspberry Pi в качестве сервера для парсинга веб-страниц, который работает круглосуточно и без выходных.
- Python 3. Python - это язык с множеством мощных библиотек, который легко запустить и создать прототип нового приложения. Поскольку Python 2 завершает свою жизнь 1 января 2020 года, в этом случае мы собираемся использовать Python 3.
- Scrapy. Один из лучших фреймворков для парсинга веб-страниц с открытым исходным кодом на Python. Scrapy - это мощный и очень быстрый инструмент; это ядро нашего набора инструментов. Хотя были разработаны новые версии, основные компоненты не сильно изменились. В этой статье используется самая последняя версия Scrapy 2.0.1 на Python 3.6.10.
- Современный браузер. Современный браузер с включенными инструментами разработчика, который помогает очень легко проверять объекты и извлекать HTML-теги.
Веб-сайт
Многие сайты предоставляют информацию о скидках и промокодах, например, SlickDeals, Dealnews и DealMoon. В HTML будут различные компоненты для извлечения, но выбор веб-сайта с вашими интересами здесь не ограничен. Важнейшая часть успешного парсинга - выбор сайта с достаточным объемом трафика. В этой статье мы будем использовать SlickDeals в качестве нашего парсера.
Используйте инструмент разработчика для извлечения контекста
- Перейти на сайт SlickDeals
- Большинство выгодных предложений находится в разделе Frontpage Slickdeals. Каждый товар содержит следующую информацию, включая изображение продукта, название продукта, магазин / веб-сайт продукта, текущую цену, первоначальную цену, отметки "Нравится" / "Нравится", информацию о доставке.
3. Откройте инструмент разработчика в браузере или проверьте элемент на веб-сайте. Большинство инструментов разработчика должны уметь выделять ваш выбор и фокусироваться на выбранном HTML-теге. Важным шагом здесь является поиск аналогичного шаблона для извлечения данных в цикле Python. Если вы перейдете к следующему элементу, вы можете снова увидеть тот же тег. В этом конкретном случае тег div с классом «fpItem» распознается для каждого элемента - <div class=”fpItem”>
4. Как только мы сможем идентифицировать<div class=”fpItem”>
, нам нужно получить остальные данные от его родителя. Чтобы получить имя каждого класса, вы можете повторить шаги, упомянутые выше, используя Инструменты разработчика в браузере, получить все интересующие нас поля и извлечь их.
Код Scrapy
Со всей информацией о том, из какого класса извлекать данные. Мы можем просто поместить все в проект Python Scrapy и выполнить тестовый запуск. Вы можете узнать больше о Scrapy здесь.
Приведенный выше код представляет собой файл spider.py в папке Scrapy's Spider. Во-первых, мы определяем имя сканера - «slickdeals». Затем, как мы обсуждали выше, нам нужно получить элемент списка с помощью Selector и вызова
deal_items = Selector(response).xpath(‘//div[contains(@class, “fpItem”)]’)
Затем мы можем перебирать их и извлекать данные, здесь мы используем XPath и проверяем, содержит ли класс ключевое слово, которое мы ищем.
store = item.xpath(‘.//a[contains(@class,”itemStore”)]/text()’).extract() title = item.xpath(‘.//a[contains(@class,”itemTitle”)]/text()’).extract() title_link = item.xpath(‘.//a[contains(@class,”itemTitle”)]/@href’).extract() price = item.xpath(‘.//div[contains(@class,”itemPrice”)]/text()’).extract() original_price = item.xpath(‘.//span[contains(@class, “oldListPrice”)]/text()’).extract()
В конце концов, мы сохраняем данные в файле CSV, чтобы провести дополнительный анализ. Вы можете сами отправить электронное письмо с нужным ключевым словом. Здесь можно использовать модуль Python email, ниже приведен пример без содержания.
import smtplib from email.message import EmailMessage msg['Subject'] = f'A Deal of XXX is Found on SlickDeals' msg['From'] = f'[email protected]' msg['To'] = f'[email protected]' s = smtplib.SMTP('localhost') s.send_message(msg) s.quit()
Чтобы протестировать запуск этой программы, в корневом каталоге проекта просто выполните
scrapy crawl slickdeals
И теперь результат будет выглядеть примерно так, и вы увидите поля, которые мы извлекли.
2020–04–18 21:00:10.552354,Sam Ash ,Taylor Guitars 317e Grand Pacific Acoustic-Electric Guitar w/ Hardshell Case,/f/13990862-taylor-317e-grand-pacific-acoustic-electric-guitar-1000-off-ymmv-999?src=frontpage,$999,$1999,34,52
Расписание
Поскольку программа будет работать круглосуточно, без выходных, энергоэффективный Raspberry Pi будет иметь больше смысла для достижения цели. После проверки выполнения кода мы можем запланировать запуск приложения-поискового робота через crontab Linux.
Вы можете начать с crontab -e
, а затем добавить следующую команду. Мы собираемся запускать веб-сканер каждые 15 минут с помощью crontab */15 * * * *
SHELL=/bin/bash */15 * * * * cd /home/pi/projects/slickdealscrapy && /home/pi/.pyenv/shims/scrapy crawl slickdeals >> /tmp/mycommand.log 2>&1
Последняя мысль
Поздравляю! Вы создали программу для парсинга веб-страниц, работающую круглосуточно и без выходных, в соответствии с заданным вами запросом. Независимо от того, какова ваша цель: поиск хороших предложений, бесплатных подарков, купонов; Наша небольшая программа работает очень интенсивно и тихо в нашем бэк-офисе, она отслеживает лучшие предложения для вас и отправляет вам уведомление о своих выводах. Я надеюсь, что эта статья может предоставить вам как понимание, так и возможности веб-скрейпинга, чтобы вы могли начать создавать более сложные программы на небольшом устройстве, таком как Raspberry Pi.
Если вам понравилась эта статья, пожалуйста, поддержите меня в ладоши.