В этом руководстве мы создадим собственный поисковый API электронной коммерции с поддержкой как eBay, так и Etsy без использования каких-либо внешних API. С помощью AutoScraper и Flask мы можем достичь этой цели менее чем за 20 строк Python кода для каждого сайта.
Требования
Установите необходимые библиотеки через pip
:
pip install -U autoscraper flask
Приступим
Во-первых, мы собираемся создать умный скрейпер для извлечения данных со страницы результатов поиска eBay. Допустим, надо получить title
, price
и product link
для каждого элемента. Используя AutoScraper, это легко сделать, просто предоставив некоторый образец данных:
Обратите внимание, что если вы хотите скопировать и запустить этот код, вам может потребоваться обновить wanted_list
.
Теперь сгруппируем результаты по правилам скрейпера:
scraper.get_result_similar(url, grouped=True)
Из выходных данных мы узнаем, какое правило каким данным соответствует, чтобы правильно его использовать. Установим некоторые псевдонимы на основе выходных данных, удалим избыточные правила и сохраним модель, чтобы применить ее позже:
Обратите внимание, что ID правил в вашем коде будут отличаться.
С eBay разобрались. Добавим поддержку результатов поиска Etsy. Начнем с того, что создадим для него скрейпер. На этот раз мы будем использовать wanted_dict
вместо wanted_list
. Он автоматически установит для нас псевдонимы:
url = 'https://www.etsy.com/search?q=macbook'
wanted_dict = {
'title': [
'Apple MacBook Pro i9 32GB 500GB Radeon 560X 15.4 2018 Touch Bar 2.9GHz 6-Core',
'Laptop MacBook Premium Ergonomic Wood Stand Holder Computer Gift Nerd Tech Geek Mens, woodworking gift, Home office workspace accessories',
],
'price': ['1,500.00', '126.65'],
'url': ['851553172']
}
scraper = AutoScraper()
scraper.build(url=url, wanted_dict=wanted_dict)
# получим результаты, сгруппированные по правилам, чтобы знать, какое использовать
scraper.get_result_similar(url, grouped=True)
Поскольку на Etsy ссылки генерируются с уникальным ID каждый раз, мы добавили один ID типового продукта в wanted_dict
, чтобы из него можно было создать ссылку. Кроме того, мы предоставили два образца для title
и price
, так как структура элементов на страницах результатов поиска Etsy отличается и нужно, чтобы скрейпер изучил их все.
Проанализировав выходные данные, сохраним нужные правила, удалим остальные и сохраним нашу модель:
Теперь, когда скрейперы готовы, мы можем создать полностью функционирующий API для обоих сайтов менее чем за 40 строк:
Здесь мы определяем API с параметром q
в качестве поискового запроса. Получим и объединим результаты поиска eBay и Etsy и вернем их в качестве ответа. Обратите внимание, что мы передаем скрейперу group_by_alias=True
, чтобы получить результаты, сгруппированные по нашим определенным псевдонимам.
После запуска кода, сервер API будет прослушивать порт 8080. Протестируем API, открыв http://localhost:8080/?q=headphone в браузере:
Вуаля! Теперь у нас есть готовый API для электронной коммерции. Просто замените headphone
в URL-адресе на нужный запрос, чтобы получить результаты его поиска.
Заключение
Окончательный код этого руководства доступен на GitHub.
Эта настройка подходит для разработки и тестирования. Встроенный сервер Flask не подходит для производства. Для этой цели, пожалуйста, проверьте параметры развертывания Flask.
Данное руководство предназначено для личного и образовательного использования. Если вы хотите получать данные с веб-сайтов, то проверьте их политику в отношении скрейпинг-ботов.
Надеюсь, что эта статья будет полезна и поможет воплотить идеи быстрее, чем когда-либо. Счастливого кодинга!
Читайте также:
- Развертывание Flask приложения на Heroku и подключение к БД MySQL - JawsDB
- Синхронизация Git-репозиториев в режиме реального времени
- Удаленные вызовы процедур с запросом-ответом
Читайте нас в Telegram, VK и Дзен
Перевод статьи Alireza Mika: AutoScraper and Flask: Create an API From Any Website in Less Than 5 Minutes