📌Примечание: В этой статье я покажу вам, как скрапировать поиск Apple App Store и получить точно такой же результат, как на Apple iMac, потому что результаты поиска на Mac полностью отличаются от результатов на PC. На скриншотах ниже показана разница:
Есть несколько причин, по которым можно использовать API, в частности наш:
SerpApi обрабатывает все на бэкенде с быстрым временем ответа менее ~2,6 секунды (~0,6 секунды с Ludicrous speed) на запрос и без автоматизации браузера, который становится намного быстрее. Время отклика и статус показаны на странице SerpApi Status .
Если вам не нужны объяснения, посмотрите полный пример кода в онлайн IDE .
from serpapi import GoogleSearch import json params = { 'api_key': '...', # https://serpapi.com/manage-api-key 'engine': 'apple_app_store', # SerpApi search engine 'term': 'image viewer', # search query 'device': 'desktop', # device to get the results 'country': 'us', # country for the search 'lang': 'en-us', # language for the search 'disallow_explicit': False, # disallowing explicit apps 'num': 20, # number of items per page 'page': 0, # pagination # 'property': 'developer' # developer of an app } app_store_results = [] while True: search = GoogleSearch(params) # data extraction on the SerpApi backend new_page_results = search.get_dict() # JSON -> Python dict app_store_results.extend(new_page_results['organic_results']) if 'next' in new_page_results.get('serpapi_pagination', {}): params['page'] += 1 else: break print(json.dumps(app_store_results, indent=2, ensure_ascii=False))
Установите библиотеку:
pip install google-search-results
google-search-results - это пакет SerpApi API.
Импортируйте библиотеки:
from serpapi import GoogleSearch import json
Параметры определены для генерации URL. Если вы хотите передать в URL другие параметры, вы можете сделать это с помощью словаря params:
params = { 'api_key': '...', # https://serpapi.com/manage-api-key 'engine': 'apple_app_store', # SerpApi search engine 'term': 'image viewer', # search query 'device': 'desktop', # device to get the results 'country': 'us', # country for the search 'lang': 'en-us', # language for the search 'disallow_explicit': False, # disallowing explicit apps 'num': 20, # number of items per page 'page': 0, # pagination # 'property': 'developer' # developer of an app }
📌Примечание: Вы также можете добавить другие параметры API .
Определите список app_store_results, в который будут добавлены извлеченные данные:
app_store_results = []
Создается цикл while, необходимый для извлечения данных со всех страниц:
while True: # data extraction will be here
Затем мы создаем объект поиска, в котором данные извлекаются из бэкенда SerpApi. В словарь new_page_results мы получаем данные из JSON:
search = GoogleSearch(params) # data extraction on the SerpApi backend new_page_results = search.get_dict() # JSON -> Python dict
Добавляем новые данные с этой страницы в список app_store_results:
app_store_results.extend(new_page_results['organic_results']) # title = new_page_results['organic_results'][0]['title'] # version = new_page_results['organic_results'][0]['version'] # description = new_page_results['organic_results'][0]['description']
📌Примечание: В комментариях выше я показал, как извлекать определенные поля. Возможно, вы заметили new_page_results['organic_results'][0]. Это индекс продукта, что означает, что мы извлекаем данные из первого продукта. New_page_results['organic_results'][1] - из второго продукта и так далее.
После получения данных с текущей страницы выполняется проверка, существует ли следующая страница. Если таковая имеется в словаре serpapi_pagination, то параметр page увеличивается на 1. В противном случае цикл останавливается.
if 'next' in new_page_results.get('serpapi_pagination', {}): params['page'] += 1 else: break
После того, как все данные получены, они выводятся в формате JSON:
print(json.dumps(app_store_results, indent=2, ensure_ascii=False))
[ { "position": 1, "id": 1507782672, "title": "Pixea", "bundle_id": "imagetasks.Pixea", "version": "2.1", "vpp_license": true, "age_rating": "4+", "release_note": "- New \"Fixed Size and Position\" zoom mode - Fixed a bug causing crash when browsing ZIP-files - Bug fixes and improvements", "seller_link": "https://www.imagetasks.com", "minimum_os_version": "10.12", "description": "Pixea is an image viewer for macOS with a nice minimal modern user interface. Pixea works great with JPEG, HEIC, PSD, RAW, WEBP, PNG, GIF, and many other formats. Provides basic image processing, including flip and rotate, shows a color histogram, EXIF, and other information. Supports keyboard shortcuts and trackpad gestures. Shows images inside archives, without extracting them. Supported formats: JPEG, HEIC, GIF, PNG, TIFF, Photoshop (PSD), BMP, Fax images, macOS and Windows icons, Radiance images, Google's WebP. RAW formats: Leica DNG and RAW, Sony ARW, Olympus ORF, Minolta MRW, Nikon NEF, Fuji RAF, Canon CR2 and CRW, Hasselblad 3FR. Sketch files (preview only). ZIP-archives. Export formats: JPEG, JPEG-2000, PNG, TIFF, BMP. Found a bug? Have a suggestion? Please, send it to support@imagetasks.com Follow us on Twitter @imagetasks!", "link": "https://apps.apple.com/us/app/pixea/id1507782672?mt=12&uo=4", "serpapi_product_link": "https://serpapi.com/search.json?country=us&engine=apple_product&product_id=1507782672&type=app", "serpapi_reviews_link": "https://serpapi.com/search.json?country=us&engine=apple_reviews&page=1&product_id=1507782672", "release_date": "2020-04-20 07:00:00 UTC", "price": { "type": "Free" }, "rating": [ { "type": "All Times", "rating": 0.0, "count": 0 } ], "genres": [ { "name": "Photo & Video", "id": 6008, "primary": true }, { "name": "Graphics & Design", "id": 6027, "primary": false } ], "developer": { "name": "ImageTasks Inc", "id": 450316587, "link": "https://apps.apple.com/us/developer/id450316587" }, "size_in_bytes": 7113871, "supported_languages": [ "EN" ], "screenshots": { "general": [ { "link": "https://is4-ssl.mzstatic.com/image/thumb/Purple113/v4/e0/21/86/e021868d-b43b-0a78-8d4a-e4e0097a1d01/0131f1c2-3227-46bf-8328-7b147d2b1ea2_Pixea-1.jpg/800x500bb.jpg", "size": "800x500" }, { "link": "https://is4-ssl.mzstatic.com/image/thumb/Purple113/v4/55/3c/98/553c982d-de30-58b5-3b5a-d6b3b2b6c810/a0424c4d-4346-40e6-8cde-bc79ce690040_Pixea-2.jpg/800x500bb.jpg", "size": "800x500" }, { "link": "https://is3-ssl.mzstatic.com/image/thumb/Purple123/v4/77/d7/d8/77d7d8c1-4b4c-ba4b-4dde-94bdc59dfb71/6e66509c-5886-45e9-9e96-25154a22fd53_Pixea-3.jpg/800x500bb.jpg", "size": "800x500" }, { "link": "https://is3-ssl.mzstatic.com/image/thumb/PurpleSource113/v4/44/79/91/447991e0-518f-48b3-bb7e-c7121eb57ba4/79be2791-5b93-4c4d-b4d1-38a3599c2b2d_Pixea-4.jpg/800x500bb.jpg", "size": "800x500" } ] }, "logos": [ { "size": "60x60", "link": "https://is3-ssl.mzstatic.com/image/thumb/Purple113/v4/8a/a7/f7/8aa7f75f-620b-74d5-7958-35aa5d851582/AppIcon-0-0-85-220-0-0-0-0-4-0-0-0-2x-sRGB-0-0-0-0-0.png/60x60bb.png" }, { "size": "512x512", "link": "https://is3-ssl.mzstatic.com/image/thumb/Purple113/v4/8a/a7/f7/8aa7f75f-620b-74d5-7958-35aa5d851582/AppIcon-0-0-85-220-0-0-0-0-4-0-0-0-2x-sRGB-0-0-0-0-0.png/512x512bb.png" }, { "size": "100x100", "link": "https://is3-ssl.mzstatic.com/image/thumb/Purple113/v4/8a/a7/f7/8aa7f75f-620b-74d5-7958-35aa5d851582/AppIcon-0-0-85-220-0-0-0-0-4-0-0-0-2x-sRGB-0-0-0-0-0.png/100x100bb.png" } ] }, ... other results ]
Первоначально опубликовано на SerpApi: https://serpapi.com/blog/scraping-apple-app-store-search-with-python/
Присоединяйтесь к нам на Twitter | YouTube
Добавить запрос на улучшение 💫 или ошибку🐞
20.03.2023 14:01
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а также новые инструменты веб-скраппинга с открытым исходным кодом для их обхода.
20.03.2023 12:24
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие действия:
20.03.2023 11:15
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц. HTML обеспечивает структуру страницы CSS (визуальное и звуковое) оформление для различных устройств. Наряду с графикой и сценариями HTML и CSS являются...
20.03.2023 08:46
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
19.03.2023 13:43
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем запускать наши php-файлы через localhost на наших компьютерах. Мне с трудом удалось установить его и я решил поделиться этой статьей, чтобы помочь тем,...
19.03.2023 13:03
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после поставщика контекста. Это позволит избежать ненужных повторных рендеров.