Скраппинг поиска Apple App Store с помощью Python

RedDeveloper
05.02.2023 12:54
Скраппинг поиска Apple App Store с помощью Python

Что будет соскабливаться

📌Примечание: В этой статье я покажу вам, как скрапировать поиск Apple App Store и получить точно такой же результат, как на Apple iMac, потому что результаты поиска на Mac полностью отличаются от результатов на PC. На скриншотах ниже показана разница:

  • Результаты Mac:
📌Примечание В этой статье я покажу вам как скрапировать поиск Apple App Store и получить
  • Результаты ПК:
📌Примечание В этой статье я покажу вам как скрапировать поиск Apple App Store и получить

Зачем использовать API?

Есть несколько причин, по которым можно использовать API, в частности наш:

  • Нет необходимости создавать парсер с нуля и поддерживать его.
  • Обходить блокировки от Google: решать CAPTCHA или решать блокировки по IP.
  • Платить за прокси и решатели CAPTCHA.
  • Не нужно использовать автоматизацию браузера.

SerpApi обрабатывает все на бэкенде с быстрым временем ответа менее ~2,6 секунды (~0,6 секунды с Ludicrous speed) на запрос и без автоматизации браузера, который становится намного быстрее. Время отклика и статус показаны на странице SerpApi Status .

SerpApi обрабатывает все на бэкенде с быстрым временем ответа менее ~26 секунды (~06

Полный код

Если вам не нужны объяснения, посмотрите полный пример кода в онлайн 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
  • GoogleSearch для соскабливания и разбора результатов Google с помощью SerpApi библиотеки веб-скрейпинга.
  • json для преобразования извлеченных данных в объект 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_key Параметр определяет закрытый ключ SerpApi, который необходимо использовать. Вы можете найти его в разделе ваш аккаунт -> API ключ .
  • движок Установите параметр apple_app_store для использования движка App Store API.
  • термин Параметр определяет запрос, который вы хотите найти. Вы можете использовать любой поисковый термин, который вы бы использовали при обычном поиске в App Store.
  • устройство Параметр определяет устройство, которое будет использоваться для получения результатов. Он может быть установлен как настольный, чтобы использовать Mac App Store, планшетный, чтобы использовать iPad App Store, или мобильный (по умолчанию), чтобы использовать iPhone App Store.
  • страна Параметр определяет страну, которую следует использовать для поиска. Это двухбуквенный код страны. Полный список поддерживаемых регионов Apple смотрите в разделе Регионы Apple .
  • lang Параметр определяет язык, который будет использоваться для поиска. Это четырехбуквенный код страны. Полный список поддерживаемых языков Apple смотрите в разделе Языки Apple .
  • disallow_explicit Параметр определяет фильтр для запрета явных приложений. По умолчанию он имеет значение false.
  • num Параметр определяет количество результатов, которые вы хотите получить на каждой странице. По умолчанию он равен 10. Максимальное количество результатов, которое вы можете получить на странице, - 200.
  • page Параметр используется для получения элементов на определенной странице. (например, 0 (по умолчанию) - первая страница результатов, 1 - вторая страница результатов, 2 - третья страница результатов и т.д.).
  • property Параметр позволяет искать свойство приложения. developer позволяет искать название разработчика приложения (например, property=developer и term=Coffee выдает приложения с "Coffee" в названии разработчика. (Например: Coffee Inc.)

📌Примечание: Вы также можете добавить другие параметры 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
]

Ссылки

  • Код в онлайн IDE
  • Apple App Store Search Scraper API
  • Apple App Store Search Scraper API Playground

Первоначально опубликовано на SerpApi: https://serpapi.com/blog/scraping-apple-app-store-search-with-python/

Присоединяйтесь к нам на Twitter | YouTube

Добавить запрос на улучшение 💫 или ошибку🐞

Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit

20.03.2023 14:01

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

Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра

20.03.2023 12:24

Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие действия:

ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023

20.03.2023 11:15

О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц. HTML обеспечивает структуру страницы CSS (визуальное и звуковое) оформление для различных устройств. Наряду с графикой и сценариями HTML и CSS являются...

Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular

20.03.2023 08:46

Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?

Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы

19.03.2023 13:43

Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем запускать наши php-файлы через localhost на наших компьютерах. Мне с трудом удалось установить его и я решил поделиться этой статьей, чтобы помочь тем,...

Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах

19.03.2023 13:03

При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после поставщика контекста. Это позволит избежать ненужных повторных рендеров.