Apple App Store — это цифровой центр, где пользователи просматривают, загружают и устанавливают приложения на своих устройствах Apple, включая iPhone и iPad. Здесь представлены миллионы приложений — от головокружительных игр до приложений для повышения производительности и других развлечений, которые не дают нам оторваться от экранов.

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

Итак, в этом блоге мы покажем вам, как сканировать и извлекать данные из Apple App Store, используя CrawlbaseАвтора Crawling API и JavaScript. Эта комбинация удивительно хорошо подходит для сбора информации, например, рейтинга приложений, обещаний в их описаниях и того, что на самом деле пишут пользователи в отзывах.

Как извлечь данные из Apple App Store?

Наш первый шаг — создать учетную запись в Crawlbase, что позволит нам использовать Crawling API и служить нашей платформой для надежного извлечения данных из App Store.

Создание Crawlbase аккаунт

  1. Подпишитесь на Crawlbase аккаунт и войти.
  2. После регистрации вы получите 1,000 бесплатных запросов. Добавьте ваши платежные данные прежде чем использовать любой из бесплатных кредитов, чтобы получить дополнительные 9,000 запросов.
  3. К вашей Документы по счету и сохраните свой токен обычного запроса для целей этого блога.

Настройка среды

Затем убедитесь, что на вашем устройстве установлен Node.js, так как он является основой нашего скрипта сбора данных, обеспечивая быструю среду выполнения JavaScript и доступ к основным библиотекам.

Установка Node в Windows:

  1. Перейдите на сайт официальный сайт Node.js и загрузите версию с долгосрочной поддержкой (LTS) для Windows.
  2. Запустите установщик и следуйте инструкциям. Оставьте параметры по умолчанию.
  3. Проверьте установку, открыв новую командную строку и выполнив следующие команды:
1
2
узел -v
npm -v

Для macOS:

  1. Перейдите на [https://nodejs.org](https://nodejs.org/) и загрузите установщик macOS (LTS).
  2. Следуйте указаниям мастера установки.
  3. Откройте Терминал и подтвердите установку:
1
2
узел -v
npm -v

Для Linux (Ubuntu/Debian):

  1. Откройте терминал, чтобы добавить репозиторий NodeSource и установить Node.js:
1
2
curl -fsSL https://deb.nodesource.com/setup_lts.x | Sudo -E баш -
Sudo apt-get install -y nodejs
  1. Проверьте вашу установку:
1
2
узел -v
npm -v

Скрипт получения

Возьмите скрипт ниже и сохраните его с помощью .js расширение, любое IDE или любая другая среда программирования, которая вам нравится, тоже подойдёт. После сохранения ещё раз проверьте, установлены ли все необходимые зависимости в вашей конфигурации Node.js. После этого всё должно быть готово.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Импортировать { CrawlingAPI } от 'crawlbase';

Const CRAWLBASE_NORMAL_TOKEN = ' ';
Const URL = «https://apps.apple.com/us/app/google-authenticator/id388497605»;

асинхронной функция crawlAppStore() {
Const API = новый CrawlingAPI({ знак: CRAWLBASE_NORMAL_TOKEN });
Const варианты = {
агент пользователя: «Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/30.0»,
};

Const ответ = Ждите пчелы.получить(URL, параметры);

if (ответ.код состояния ! == 200) {
бросать новый Ошибка(`Запрос не выполнен, код статуса: ${response.statusCode}`);
}

возвращают ответ.тело;
}

ВАЖНО: Не забудьте заменить <Normal requests token> с твоим настоящим Crawlbase обычный запрос токена перед запуском скрипта.

Этот скрипт показывает, как использовать CrawlbaseАвтора Crawling API для извлечения HTML-контента из Apple App Store без блокировки. Обратите внимание, что ответ ещё не скопирован. Нам всё ещё нужно удалить ненужные элементы, очистить данные и подготовить проанализированный, структурированный ответ.

Поиск определенных селекторов CSS

Теперь, когда вы понимаете, как отправить простой запрос API с помощью Node.js, давайте найдем необходимые нам данные из нашего целевого URL-адреса, чтобы позже мы могли написать код для их очистки и анализа.

Первое, что вы заметите, — это основной раздел вверху. Именно там обычно находятся самые важные данные, и он, как правило, хорошо структурирован, что делает его идеальным объектом для парсинга.

Откройте целевой URL и найдите каждый селектор. Например, давайте найдём заголовок:

Изображение инструментов разработчика браузера Chrome с выделенным элементом заголовка контента.

Принять к сведению .app-header__title и сделать то же самое для subtitle, seller, category, stars, rating и price. После этого раздел будет завершён.

Для остальной части страницы процесс практически такой же. Вот ещё один пример: если вы хотите включить среднюю оценку клиента в раздел «Рейтинги и отзывы», щёлкните правой кнопкой мыши по данным и выберите «Просмотреть»:

Изображение инструментов разработчика браузера Chrome с выделенным элементом рейтинга контента.

Суть вы знаете. Теперь найти оставшиеся нужные данные не составит для вас никакого труда.

Анализ HTML в Node.js

Теперь, когда вы стали экспертом в извлечении CSS-селекторов, пришло время написать код для парсинга HTML. Вот здесь Ваше здоровье Это легкая и мощная библиотека, которая позволяет нам выбирать релевантные данные из исходного HTML-кода в Node.js.

Начните с создания папки проекта и запустите:

1
2
инициализация npm -y
npm установить Crawbase Lodash Casenator Cheerio

Импортируйте необходимые библиотеки

Тогда в вашем .js файл, импортируйте необходимые библиотеки для этого проекта, включая Cheerio:

1
2
3
4
Импортировать _ от 'лодаш';
Импортировать { CrawlingAPI } от 'crawlbase';
Импортировать {toCamelCase} от «касенатор»;
Импортировать * as за ваше здоровье от 'привет';

Не забудьте настроить Crawling API а также целевой веб-сайт:

1
2
Const CRAWLBASE_NORMAL_TOKEN = ' ';
Const URL = «https://apps.apple.com/us/app/google-authenticator/id388497605»;

Функции для сбора данных из Apple Store

Здесь мы воспользуемся собранными ранее CSS-селекторами. Давайте напишем часть кода, которая извлекает информацию со страницы App Store.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
функция scrapePrimaryAppDetails($) {
позволять заголовок = $('.app-header__title').текст().отделка();
Const titleBadge = $('.badge--product-title').текст().отделка();
название = название.заменить(titleBadge, '').отделка();
Const подзаголовок = $('.app-header__subtitle').текст().отделка();
Const продавец = $('.app-header__identity').текст().отделка();
позволять категория = нуль;
стараться {
категория = $('.product-header__list__item a.inline-list__item').текст().отделка().раскол('в')[1].отделка();
} поймать {
категория = нуль;
}
Const звезды = $('.мы-звездный-рейтинг').Attr('aria-label');
Const рейтинг = $('.we-rating-count').текст().отделка().раскол('•')[1].отделка();
Const цена = $('.app-header__list__item--price').текст().отделка();

возвращают { название, подзаголовок, продавец, категория, звезды, рейтинг, цена };
}

Таким же образом он извлечет заголовок, подзаголовок, продавца, категорию, рейтинг в звездах, общие рейтинги и цену.

На этом этапе вы можете добавить дополнительные функции для каждого раздела страницы. Например, можно добавить изображение для предварительного просмотра и описание, а также отзывы пользователей и т. д.

Объедините все в одной функции

После завершения работы над скребком нам необходимо объединить все в одну функцию и вывести результат:

1
2
3
4
5
6
7
8
9
10
функция scrapeAppStore(HTML) {
Const $ = привет.загрузка(html);
возвращают {
primaryAppDetails: scrapePrimaryAppDetails($),
appPreviewAndDescription: scrapeAppPreviewAndDescription($),
рейтинги и обзоры: { с отзывами: ScrapeRatingsAndReviews($) },
информационный раздел: ScrapeInformationSection($),
связанныеприложенияирекомендации: scrapeПохожиеприложенияирекомендации($),
};
}

Полный код для извлечения данных из Apple App Store

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
Импортировать _ от 'лодаш';
Импортировать { CrawlingAPI } от 'crawlbase';
Импортировать {toCamelCase} от «касенатор»;
Импортировать * as за ваше здоровье от 'привет';

Const CRAWLBASE_NORMAL_TOKEN = ' ';
Const URL = «https://apps.apple.com/us/app/google-authenticator/id388497605»;

асинхронной функция crawlAppStore() {
Const API = новый CrawlingAPI({ знак: CRAWLBASE_NORMAL_TOKEN });
Const варианты = {
агент пользователя: «Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/30.0»,
};

Const ответ = Ждите пчелы.получить(URL, параметры);

if (ответ.код состояния ! == 200) {
бросать новый Ошибка(`Запрос не выполнен, код статуса: ${response.statusCode}`);
}
возвращают ответ.тело;
}

функция scrapePrimaryAppDetails($) {
позволять заголовок = $('.app-header__title').текст().отделка();
Const titleBadge = $('.badge--product-title').текст().отделка();
название = название.заменить(titleBadge, '').отделка();
Const подзаголовок = $('.app-header__subtitle').текст().отделка();
Const продавец = $('.app-header__identity').текст().отделка();
позволять категория = нуль;
стараться {
категория = $('.product-header__list__item a.inline-list__item').текст().отделка().раскол('в')[1].отделка();
} поймать {
категория = нуль;
}
Const звезды = $('.мы-звездный-рейтинг').Attr('aria-label');
Const рейтинг = $('.we-rating-count').текст().отделка().раскол('•')[1].отделка();
Const цена = $('.app-header__list__item--price').текст().отделка();

возвращают { название, подзаголовок, продавец, категория, звезды, рейтинг, цена };
}

функция scrapeAppPreviewAndDescription($) {
Const источники = $('источник').toArray();
Const URL-адрес изображения =
источники
.карта((элемент) => $(элемент).Attr('srcset'))
.фильтр((srcset) => srcset)
.карта((srcset) => исходный набор.раскол('')[0].отделка().раскол('')[0])
.найдите((URL) => URL-адрес) || нуль;
позволять appDescription = $('.section__description').текст().отделка();
appDescription = appDescription.заменить(/^Описание*/, '');

возвращают { imageUrl, appDescription };
}

функция ScrapeRatingsAndReviews($) {
Const отзывы = [];
$('.мы-клиент-отзыв').каждый((индекс, элемент) => {
Const звезды = $(элемент).найдите('.мы-звездный-рейтинг').Attr('aria-label');
Const reviewerName = $(элемент).найдите('.мы-клиент-отзыв__пользователь').текст().отделка();
Const reviewTitle = $(элемент).найдите('.мы-клиент-отзыв__название').текст().отделка();
Const fullReviewText = $(элемент).найдите('.мы-клиент-отзыв__тело').текст().отделка();
Const ДатаОбзора = $(элемент).найдите('.мы-клиент-отзыв__дата').Attr('дата-время');
Отзывы.протолкнуть.({ звезды, имя_рецензента, заголовок_обзора, полный_текст_обзора, дата_обзора });
});

возвращают обзоры;
}

функция ScrapeInformationSection($) {
Const информация = {};
$('dl.information-list dt').каждый((индекс, элемент) => {
Const ключ = $(элемент).текст().отделка();
Const значение = $(элемент).следующий('дд').текст().отделка();
if (ключ && значение) {
Const camelKey = toCamelCase(ключ);
if (camelKey === «языки») {
информация[camelKey] = _.уник(ценить.раскол('').карта((пункт) => пункт.отделка())).sort();
} еще if (camelKey === 'совместимость') {
информация[camelKey] = _.уник(
ценность
.раскол('\ n')
.карта((пункт) => пункт.отделка())
.фильтр((пункт) => элемент),
).sort();
} еще {
информация[camelKey] = значение;
}
}
});

возвращают Информация;
}

функция scrapeПохожиеприложенияирекомендации($) {
функция extractAppsFromSection(заголовокТекст) {
Const результаты = [];
$('h2.section__headline').каждый((индекс, элемент) => {
Const currentHeadlineText = $(элемент).текст().отделка();
if (currentHeadlineText === headlineText) {
Const родительский = $(элемент).родителя();
Const следующийБрат = родитель.следующий();
следующийБрат/Сестра.найдите('a.we-lockup--in-app-shelf').каждый((appIndex, appElement) => {
Const appTitle = $(appElement).найдите('.we-lockup__title').текст().отделка();
Const appUrl = $(appElement).Attr('href');
if (appTitle && appUrl) {
результаты.протолкнуть.({
название: appTitle,
URL: appUrl,
});
}
});
}
});

возвращают полученные результаты;
}

возвращают {
developerApps: extractAppsFromSection(«Еще от этого разработчика»),
связанные приложения: extractAppsFromSection(«Вам также может понравиться»),
};
}

функция scrapeAppStore(HTML) {
Const $ = привет.загрузка(html);
Const данные = {
primaryAppDetails: {
...scrapePrimaryAppDetails($),
},
appPreviewAndDescription: {
...scrapeAppPreviewAndDescription($),
},
рейтинги и обзоры: {
с отзывами: ScrapeRatingsAndReviews($),
},
информационный раздел: {
...ScrapeInformationSection($),
},
связанныеприложенияирекомендации: {
...scrapeПохожиеприложенияирекомендации($),
},
};

возвращают данные;
}

Const html = Ждите crawlAppStore();
Const данные = scrapeAppStore(html);
консоль.журнал(JSON.стягивать(данные, нуль, 2));

И когда вы запустите свой скрипт:

1
npm run crawl

Вы увидите вывод в этой структуре:

Изображение, демонстрирующее структурированный вывод JSON, полученный в результате анализа Apple App Store.

Эта организованная структура обеспечивает прочную основу для дальнейшего анализа, составления отчетов или визуализации, независимо от вашей конечной цели.

Попробуйте полный код в нашем репозитории GitHub для этого блога.

Соберите данные Apple Store с помощью Crawlbase

Анализ данных из Apple App Store может дать ценную информацию о том, как представлены приложения, как реагируют пользователи и как работают конкуренты. Crawlbase и надежный HTML-парсер, такой как Cheerio, вы можете автоматизировать извлечение данных Apple и превратить их во что-то полезное.

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

Начните свой следующий проект по скрапингу прямо сейчас с помощью CrawlbaseАвтора Smart AI Proxy и Crawling API чтобы избежать блокировки!

Часто задаваемые вопросы (FAQ)

В: Могу ли я скопировать любое приложение из App Store?

О. Да, если у вас есть общедоступный URL-адрес приложения. Apple не предоставляет полный общедоступный индекс, поэтому вам придётся создать свой список или собрать ссылки из других источников.

A. Обычно допустимо извлекать общедоступные данные для исследований или личного использования, но убедитесь, что ваше использование соответствует Условия обслуживания Apple. Избегайте чрезмерного удаления данных и ограничений на использование.

В. Что делать, если меня заблокируют или ограничат скорость?

A. Если с одного IP-адреса отправляется слишком много запросов или если поведение кажется автоматическим, сайты, собирающие данные, могут быть заблокированы или скорость их загрузки ограничена. Чтобы избежать подобных проблем, вы можете использовать CrawlbaseАвтора Crawling API и Smart AI Proxy. Они включают в себя функции защиты от блокировки, такие как определение местоположения и ротация IP-адресов, которые значительно снижают вероятность блокировки и обеспечивают более точный сбор данных.