AutoScraper и Flask: создание API для любого сайта менее чем за 5 минут



Книга AutoScraper и Flask: создание API для любого сайта менее чем за 5 минут

В этом руководстве мы создадим собственный поисковый 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 в браузере:


Результаты с eBay

Результаты с Etsy

Вуаля! Теперь у нас есть готовый API для электронной коммерции. Просто замените headphone в URL-адресе на нужный запрос, чтобы получить результаты его поиска.


Заключение


Окончательный код этого руководства доступен на GitHub.


Эта настройка подходит для разработки и тестирования. Встроенный сервер Flask не подходит для производства. Для этой цели, пожалуйста, проверьте параметры развертывания Flask.


Данное руководство предназначено для личного и образовательного использования. Если вы хотите получать данные с веб-сайтов, то проверьте их политику в отношении скрейпинг-ботов.


Надеюсь, что эта статья будет полезна и поможет воплотить идеи быстрее, чем когда-либо. Счастливого кодинга!




929   0  

Comments

    Ничего не найдено.