Источник: Nuances of Programming
В этом руководстве мы создадим собственный поисковый 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. Он автоматически установит для нас псевдонимы:
Поскольку на 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.
Данное руководство предназначено для личного и образовательного использования. Если вы хотите получать данные с веб-сайтов, то проверьте их политику в отношении скрейпинг-ботов.
Надеюсь, что эта статья будет полезна и поможет воплотить идеи быстрее, чем когда-либо. Счастливого кодинга!
Читайте также:
Перевод статьи Alireza Mika: AutoScraper and Flask: Create an API From Any Website in Less Than 5 Minutes