В этом уроке мы сосредоточимся на следующем: Драматург Веб-скрапинг. Так что же такое Playwright? Это удобный фреймворк, созданный Microsoft. Он известен тем, что делает веб-взаимодействия более рационализированными и надежно работает со всеми последними браузерами, такими как WebKit, Chromium и Firefox. Вы также можете запускать тесты в headless или headless режиме и эмулировать собственные мобильные среды, такие как Google Chrome для Android и Mobile Safari.

Playwright начал свой путь еще в январе 2020 года, и с тех пор он неуклонно растет. К марту 2024 года он достигнет около 4 миллионов загрузок каждую неделю. Такие крупные имена, как Adobe Spectrum и Visual Studio Code, уже используют его для своих проектов. В этом году Playwright становится популярнее, чем когда-либо.

драматург ежемесячные загрузки 2024

источник

В этом руководстве мы покажем вам пошаговое руководство по использованию Playwright для веб-скрапинга в Node.js. Мы также продемонстрируем Crawlbase для другого подхода к получению данных из сети. Независимо от того, являетесь ли вы опытным разработчиком или новичком в веб-скрапинге, этот урок обещает снабдить вас необходимыми навыками для успеха. Давайте начнем.

Содержание

1. Тематика блога

2. Предпосылки

3. Как выполнять веб-скрапинг с помощью Playwright

4. Определение первоначальной цены с помощью Playwright

5. Получение скидочной цены от драматурга

6. Извлечение миниатюры продукта с помощью Playwright

7. Сбор рейтингов продуктов с помощью Playwright

8. Подсчет количества обзоров продуктов с помощью Playwright

9. Сбор отзывов о продуктах с помощью Playwright

10. Компиляция и выполнение кода для скрапинга Playwright

11. Использование скребка Crawlbase Crawling API и Cheerio

12. Заключение

13. Часто задаваемые вопросы

1. Тематика блога

Наша цель в этом уроке — сканировать и скрести Backmarket.com, в частности этой URL-адрес и извлекайте необходимую информацию, такую ​​как название продукта, первоначальная цена и цена со скидкой, URL-адрес миниатюры изображения, рейтинги, количество отзывов и отдельные отзывы.

скрапинг бэкмаркета с использованием драматурга

В этом уроке мы рассмотрим два разных подхода:

Метод драматурга: Во-первых, мы воспользуемся фреймворком Playwright для извлечения соответствующих данных из нашего целевого URL. Мы предоставим пошаговые инструкции, от настройки среды кодирования для Playwright до анализа HTML-контента страницы и вывода результатов в легко усваиваемом формате JSON, который можно использовать для дальнейшего анализа.

Crawlbase Crawling API Метод: Далее мы будем использовать Crawling API от Crawlbase для сканирования и извлечения данных с одной и той же страницы продукта. Мы сделаем запрос GET на целевой URL, чтобы извлечь HTML-контент без блокировки, а затем проанализируем контент с помощью Cheerio. Проанализированный контент также будет напечатан в читаемом формате JSON.

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

2. Предпосылки

Теперь, когда мы определили наши цели, мы можем начать настраивать нашу среду для кодирования. Нам нужно убедиться, что у нас есть все необходимые основы. Вот что вам понадобится для начала:

Предпосылки для веб-скрапинга драматурга

Node.js, установленный в вашей системе: Node.js служит средой выполнения, позволяя выполнять JavaScript на локальной машине. Это важно для запуска скрипта веб-скрейпинга, который мы собираемся разработать.

Чтобы установить среду, просто скачайте Node.js с официального сайта: Официальный сайт Node.js.

Фундаментальное понимание JavaScript: Поскольку мы будем активно использовать JavaScript в нашем проекте веб-скрейпинга, важно знать основы языка. Вы должны быть знакомы с такими концепциями, как переменные, функции, циклы и базовые манипуляции DOM.

Для тех, кто только начинает работать с JavaScript, рассмотрите возможность изучения учебных пособий или документации, доступных на таких платформах, как Сеть разработчиков Mozilla (MDN) или W3Schools.

Crawlbase API-токен: Во второй части этого урока мы будем использовать Crawlbase API для более эффективного веб-скрапинга. API-токен будет служить вашим ключом для аутентификации запросов и раскрытия полного потенциала Crawling API. Мы будем использовать Crawlbase Значок JavaScript для имитации реальных запросов браузера.

Чтобы получить свой токен, перейдите по ссылке Crawlbase сайт завести аккаунти получите доступ к своим API-токенам из документация по счету .

3. Как выполнять веб-скрапинг с помощью Playwright

После установки Node.js откройте командную строку (Windows) или терминал (macOS/Linux).

Создайте каталог для хранения кода скрапера Playwright, выполнив следующие команды:

1
2
MkDir драматург-скребок
cd драматург-скребок && трогать index.js

Теперь установите Playwright, используя команду ниже:

1
npm установить драматург

Импортируйте библиотеку и создайте функцию для извлечения заголовка:

После установки необходимых пакетов мы можем начать кодирование. Начните с импорта необходимых модулей, таких как chromium из библиотеки Playwright для автоматизации браузера и fs для операций файловой системы. Это ключевые модули для выполнения веб-скрейпинга и обработки файловых операций в среде Node.js.

Для вашего удобства вы можете скопировать и вставить приведенный ниже код в ваш файл index.js.

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
// Импорт необходимых модулей
Const { хром } = требовать('драматург');
Const фс = требовать('фс');

// Функция для извлечения результатов из предоставленного веб-URL
асинхронной функция scrapeResults(веб-URL) {
// Запустить новый экземпляр браузера
Const браузер = Ждите хром.запуск({ безголовый: ложный });

// Создать новый контекст просмотра и страницу
Const контекст = Ждите браузер.новыйКонтекст();
Const страница = Ждите контекст.новая страница();

// Перейдите по указанному URL-адресу
Ждите стр.На(webUrl);

// Извлечь название продукта
Const title = Ждите страница.$eval('h1', (элемент) => элемент?.текстСодержание.отделка());

// Закрыть браузер
Ждите браузер.Закрыть();

// Возвращаем название продукта
возвращают заглавие;
}

// Вызов функции scrapeResults с предоставленным веб-URL
scrapeResults(
'https://www.backmarket.com/en-us/p/iphone-15-pro-max-256-gb-white-titanium-unlocked/4d141eb2-e989-4572-b57d-1685c77483a7',
);

Процесс очистки: Функция scrapeResults определена для извлечения результатов из предоставленного веб-URL. В этой функции:

  • Он запускает новый экземпляр браузера Chromium, используя chromium.launch({ headless: false }), браузер должен работать в не-headless-режиме (видимый пользовательский интерфейс).
  • Он создает новый контекст просмотра и страницу, используя browser.newContext() и context.newPage(), соответственно. Это подготавливает среду для навигации и взаимодействия с веб-страницами.
  • Он переходит по указанному веб-URL-адресу, используя page.goto(webUrl). Это дает указание браузеру загрузить указанный URL.
  • Он извлекает название продукта со страницы, используя page.$eval("h1", ...), который находит первый <h1> элемент на странице и извлекает его текстовое содержимое. ?.textContent.trim() гарантирует, что начальные и конечные пробелы будут удалены из извлеченного текста.
проверка элементов html на предмет веб-сканирования

4. Определение первоначальной цены с помощью Playwright

Чтобы извлечь исходную цену с целевой веб-страницы, сначала посетите предоставленный URL-адрес в вашем веб-браузере. Затем щелкните правой кнопкой мыши на исходном элементе цены и выберите «Проверить», чтобы получить доступ к инструментам разработчика, которые выделят соответствующий HTML-код.

определить элемент html

Определите элемент HTML, представляющий исходную цену, обеспечив уникальность путем проверки его атрибутов, классов или идентификаторов. После определения скопируйте селектор CSS элемента и проверьте его точность в текстовом редакторе или редакторе кода, внеся необходимые корректировки для точного нацеливания на исходный элемент цены.

1
2
3
4
5
6
// Функция для получения текстового содержимого элемента по селектору
Const получитьЗначениеПоСелектору = асинхронной (селектор) =>
Ждите стр.оценивать((селектор) => документ.селектор запросов(селектор)?.текстСодержание.отделка(), селектор);

// Извлечь первоначальную цену продукта
Const оригинальнаяЦена = Ждите получитьЗначениеПоСелектору('[data-popper-trigger="true"].body-1-light-striked');

Определение функции (getValueBySelector):

  • Этот код определяет асинхронную функцию с именем getValueBySelector, которая принимает CSS-селектор в качестве параметра.
  • Внутри функции используется page.evaluate() от Playwright для выполнения кода JavaScript в контексте текущей страницы.
  • Код JavaScript внутри page.evaluate() выбирает HTML-элемент на основе предоставленного селектора CSS с помощью document.querySelector(selector).
  • Затем он обращается к свойству textContent выбранного элемента, чтобы извлечь его текстовое содержимое, и применяет метод trim() для удаления всех начальных и конечных пробелов.
  • Функция возвращает обрезанное текстовое содержимое выбранного элемента.

Извлечение первоначальной цены:

  • После определения функции getValueBySelector она вызывается с определенным селектором CSS. ('[data-popper-trigger="true"].body-1-light-striked') для нацеливания на определенный элемент на странице.
  • Результат, представляющий собой первоначальную цену продукта, присваивается переменной originalPrice.

5. Получение скидочной цены от драматурга

Еще раз щелкните правой кнопкой мыши по исходному элементу цены и выберите «Просмотреть», чтобы открыть инструменты разработчика, которые выделят связанный HTML-код.

определить элемент html

Получив правильный селектор CSS, вы можете написать код, как показано ниже:

1
2
// Извлечь цену продукта со скидкой
Const Цена со скидкой = Ждите получитьЗначениеПоСелектору('[data-qa="страница-продукта-цена"]');

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

6. Извлечение миниатюры продукта с помощью Playwright

Аналогично предыдущим шагам, щелкните правой кнопкой мыши по миниатюре изображения продукта и выберите «Проверить», чтобы открыть Инструменты разработчика. Это действие выделит соответствующий HTML-код, связанный с миниатюрой изображения.

изображение скребок драматург

Чтобы написать код для извлечения URL-адреса миниатюры изображения с помощью Playwright, можно использовать следующий подход:

1
2
3
4
// Извлечь URL миниатюры изображения
Const миниатюра = Ждите стр.оценивать(
() => документ.селектор запросов('div[data-test="карусель"] img[loading="жаждущий"]')['источник'],
);

Этот код извлекает URL миниатюры изображения с веб-страницы. Мы используем page.evaluate() функция для выполнения кода JavaScript в контексте веб-страницы. Она выбирает элемент изображения в div с определенными атрибутами и извлекает его src атрибут, который содержит URL изображения. Извлеченный URL затем сохраняется в переменной thumbnail для дальнейшего использования.

7. Сбор рейтингов продуктов с помощью Playwright

Теперь вы знаете, как это сделать. Щелкните правой кнопкой мыши по рейтингам продуктов и выберите «Проверить», чтобы открыть Инструменты разработчика. Это действие позволит вам просмотреть HTML-код конкретного выбранного нами элемента.

очистка рейтинга продукта с помощью драматурга

Вот фрагмент кода для извлечения оценок продукта:

1
2
// Извлечь рейтинги продукта
Const рейтинги = Ждите получитьЗначениеПоСелектору('[data-test="количество-обзоров-страницы-продукта"] диапазон');

8. Подсчет количества обзоров продуктов с помощью Playwright

Соскребите количество отзывов о продукте с помощью playwright

Опять же, вам нужно будет использовать getValueBySelector для извлечения количества отзывов о продукте. Передайте селектор CSS, чтобы выбрать элемент, отображающий количество отзывов на основе его атрибута. После нахождения сохраните значение количества в переменной reviewsCount для дальнейшего использования.

1
2
// Извлечь количество отзывов о продукте
Const отзывыКоличество = Ждите получитьЗначениеПоСелектору('[data-test="количество-обзоров-страниц-продукта"] > диапазон');

9. Сбор отзывов о продуктах с помощью Playwright

Наконец, мы соберем отзывы о продукте. Получите связанный HTML-код, как показано ниже:

соскребайте отзывы о продуктах с драматургом

Выбрать все элементы обзора: Используйте document.querySelectorAll() для выбора всех элементов списка, содержащих отзывы. Сохраните их в переменной с именем reviewElements.

Карта по каждому элементу обзора: Используйте map() для итерации каждого элемента обзора в reviewElements, Внутри map() функция извлечения соответствующей информации, такой как имя автора, URL-адрес отзыва, рейтинги и текст отзыва.

Имя автора извлечения: Используйте querySelector() чтобы найти элемент с классом .body-1-bold внутри текущего элемента обзора. Извлеките текстовое содержимое и обрежьте все начальные и конечные пробелы.

Извлечь URL-адрес обзора: Используйте querySelector() чтобы найти якорь (<a>) элемент с атрибутом rel установить на «noreferrer noopener». Получить значение атрибута href и добавить к нему базовый URL https://www.backmarket.com/. Это даст вам полный URL-адрес обзора.

Извлечь рейтинги: Используйте querySelector() чтобы найти элемент с атрибутом data-qa установите значение «user-comment». Извлеките текстовое содержимое и удалите все начальные и конечные пробелы.

Извлечь текст обзора: Используйте querySelector() чтобы найти элемент с классами .body-1-light, .text-grey-500 и .whitespace-pre-line. Извлеките текстовое содержимое и удалите все начальные и конечные пробелы.

Возврат извлеченной информации: Верните объект, содержащий извлеченную информацию для каждого элемента обзора.

Отфильтровать отзывы: Используйте filter() удалить все обзоры, в которых отсутствует имя автора или текст обзора.

Вот как можно написать код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Const отзывы = Ждите стр.оценивать(() => {
// Выбрать все элементы списка, содержащие отзывы
возвращают массив.от(документ.запросСелекторВсе('ul.list-none li.group'))
.карта((список) => ({
// Извлечь имя автора
автор: список.селектор запросов('.body-1-жирный')?.текстСодержание.отделка(),
// Извлечь URL-адрес обзора
URL: `https://www.backmarket.com/${list.querySelector('a[rel="noreferrer noopener"]')?.получитьАтрибут('href')}`,
// Извлечь рейтинги
рейтинги: список.селектор запросов('[data-qa="user-comment"] span.body-2-bold')?.текстСодержание.отделка(),
// Извлечь текст обзора
с отзывами: список.селектор запросов('.body-1-light.text-grey-500.whitespace-pre-line')?.текстСодержание.отделка(),
}))
.фильтр((обзоре) => рассмотрение.автор && обзор.с отзывами); // Отфильтровать отзывы с отсутствующим автором или текстом отзыва
});

10. Компиляция и выполнение кода для скрапинга Playwright

Теперь, когда у нас есть фрагменты кода для каждого элемента, который мы хотим извлечь из backmarket.com, давайте скомпилируем их и сохраним как index.js.

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
// Импорт необходимых модулей
Const { хром } = требовать('драматург');
Const фс = требовать('фс');

// Функция для извлечения результатов из предоставленного веб-URL
асинхронной функция scrapeResults(веб-URL) {
// Запустить новый экземпляр браузера
Const браузер = Ждите хром.запуск({ безголовый: ложный });

// Создать новый контекст просмотра и страницу
Const контекст = Ждите браузер.новыйКонтекст();
Const страница = Ждите контекст.новая страница();

// Перейдите по указанному URL-адресу
Ждите стр.На(webUrl);

// Функция для получения текстового содержимого элемента по селектору
Const получитьЗначениеПоСелектору = асинхронной (селектор) =>
Ждите стр.оценивать((селектор) => документ.селектор запросов(селектор)?.текстСодержание.отделка(), селектор);

// Извлечь первоначальную цену продукта
Const оригинальнаяЦена = Ждите получитьЗначениеПоСелектору('[data-popper-trigger="true"].body-1-light-striked');

// Извлечь цену продукта со скидкой
Const Цена со скидкой = Ждите получитьЗначениеПоСелектору('[data-qa="страница-продукта-цена"]');

// Извлечь URL миниатюры изображения
Const миниатюра = Ждите стр.оценивать(
() => документ.селектор запросов('div[data-test="карусель"] img[loading="жаждущий"]')['источник'],
);

// Извлечь рейтинги продукта
Const рейтинги = Ждите получитьЗначениеПоСелектору('[data-test="количество-обзоров-страницы-продукта"] диапазон');

// Извлечь количество отзывов о продукте
Const отзывыКоличество = Ждите получитьЗначениеПоСелектору('[data-test="количество-обзоров-страниц-продукта"] > диапазон');

Const отзывы = Ждите стр.оценивать(() => {
// Выбрать все элементы списка, содержащие отзывы
возвращают массив.от(документ.запросСелекторВсе('ul.list-none li.group'))
.карта((список) => ({
// Извлечь имя автора
автор: список.селектор запросов('.body-1-жирный')?.текстСодержание.отделка(),
// Извлечь URL-адрес обзора
URL: `https://www.backmarket.com/${list.querySelector('a[rel="noreferrer noopener"]')?.получитьАтрибут('href')}`,
// Извлечь рейтинги
рейтинги: список.селектор запросов('[data-qa="user-comment"] span.body-2-bold')?.текстСодержание.отделка(),
// Извлечь текст обзора
с отзывами: список.селектор запросов('.body-1-light.text-grey-500.whitespace-pre-line')?.текстСодержание.отделка(),
}))
.фильтр((обзоре) => рассмотрение.автор && обзор.с отзывами); // Отфильтровать отзывы с отсутствующим автором или текстом отзыва
});

// Закрыть браузер
Ждите браузер.Закрыть();

// Записываем извлеченные данные в файл JSON
фс.writeFileSync(
'backmarket.json',
JSON.стягивать(
{
заглавие,
оригинальная цена,
Цена со скидкой,
миниатюра,
рейтинги,
отзывыКоличество,
отзывы,
},
нуль,
2,
),
);

// Возвращаем название продукта
возвращают заглавие;
}

// Вызов функции scrapeResults с предоставленным веб-URL
scrapeResults(
'https://www.backmarket.com/en-us/p/iphone-15-pro-max-256-gb-white-titanium-unlocked/4d141eb2-e989-4572-b57d-1685c77483a7',
);

Откройте терминал или командную строку и перейдите в каталог, где сохранен index.js. Выполните скрипт, выполнив следующую команду:

1
узел index.js

После запуска скрипта проверьте вывод. В случае успеха вы должны увидеть извлеченные данные, напечатанные на консоли или сохраненные в файле, в зависимости от того, как вы реализовали код.

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
{
"заглавие": «iPhone 15 Pro Max 256 ГБ — Белый титан — Разблокирован — Две eSIM»,
"оригинальнаяЦена": "$1,199.00 новый",
"discountedPrice": "1,078.00 $",
"миниатюра": "https://www.backmarket.com/cdn-cgi/image/format%3Dauto%2Cquality%3D75%2Cwidth%3D260/https://d2e6ccujb3mkqf.cloudfront.net/4d141eb2-e989-4572-b57d-1685c77483a7-1_bd9df67c-c913-4d6c-a7a2-e4a93ad78089.jpg",
"рейтинги": "4.4/5",
"reviewsCount": "(15 отзыва)",
"обзоры": [
{
"автор": «Роберт У.»,
"URL": "https://www.backmarket.com//en-us/p/iphone-15-pro-max-256-gb-blue-titanium-unlocked/878e83a6-9edf-4e23-8580-02fb22c5a022",
"рейтинги": "5/5",
"обзоры": «Я не мог быть счастливее, когда купил iPhone 15. Сначала он прибыл в надежной упаковке, защитная пленка на экране, оригинальная коробка с C-кабелем в комплекте. Точно так же, как если бы я получил его в магазине Apple, где я делал все свои предыдущие покупки новых продуктов. В будущем восстановленный товар будет моей первой мыслью!»
},
{
"автор": «Тереза ​​Дж.»,
"URL": "https://www.backmarket.com//en-us/p/iphone-15-pro-max-512-gb-natural-titanium-unlocked/d17785fe-7317-4cb5-bc0c-695b6211fb64",
"рейтинги": "4.6/5",
"обзоры": «Первый раз пользуюсь этим приложением. Навигация была неплохой. Доставка задержалась... это заставило меня нервничать. Я настроил свой телефон. Получив посылку, я обнаружил несколько отметин на телефоне, который должен был быть в отличном состоянии и без оригинальной коробки».
},
{
"автор": «Сайед А.»,
"URL": "https://www.backmarket.com//en-us/p/iphone-15-pro-max-256-gb-black-titanium-unlocked/39357e4a-02a9-4392-b750-8be737fdbb82",
"рейтинги": "3.8/5",
"обзоры": «Я доволен продуктом, но его цена должна быть ниже, потому что по этой цене вы можете купить его в Apple Store, просто нужно добавить немного больше. В остальном все хорошо. Если Backmsrket снизит цену, то людям не придется ходить в Apple Store за восстановленными товарами… думаю, что в будущем Backmarket станет лучше…»
},
{
"автор": «Кевин Д.»,
"URL": "https://www.backmarket.com//en-us/p/iphone-15-pro-max-256-gb-black-titanium-unlocked/39357e4a-02a9-4392-b750-8be737fdbb82",
"рейтинги": "4/5",
"обзоры": «Устройство пришло неработающим, перегревается (значительно) и перезапускается буквально каждые 2 минуты... Не понимаю, как можно было не заметить нечто подобное...»
},
{
"автор": «Квинтрелл О.»,
"URL": "https://www.backmarket.com//en-us/p/iphone-15-pro-max-256-gb-blue-titanium-unlocked/878e83a6-9edf-4e23-8580-02fb22c5a022",
"рейтинги": "5/5",
"обзоры": "отличный телефон, выглядит кристально чисто"
}
]
}

11. Использование скребка Crawlbase Crawling API и Cheerio

Соскоб с использованием Crawlbase Crawling API и Cheerio имеет отношение к этому уроку, поскольку он предлагает альтернативный подход к веб-скрейпингу. Этот метод выделяется как одна из лучших альтернатив, поскольку он использует Crawlbase Crawling API, что может помочь предотвратить потенциальные блокировки и CAPTCHA, навязываемые целевым веб-сайтом.

Кроме того, интеграция Crawlbase Crawling API с парсерами вроде Cheerio обеспечивает более стабильное решение для извлечения данных с веб-страниц без проблем, с которыми обычно сталкиваются при традиционных методах парсинга, например, блокировка или сильное ограничение скорости. Этот метод гарантирует, что мы можем получить нужную нам информацию с веб-сайта надежно и эффективно.

Для начала просто установите пакеты ниже:

1
2
3
MkDir скребок
cd скребок && трогать index.js
npm установить crawlbase cheerio

Эти команды создадут каталог с именем scraper, создать index.js файл и установите Crawlbase и библиотеки Cheerio.

Теперь мы применим аналогичный подход, как и в случае с Playwright. Однако на этот раз мы будем использовать HTTP/HTTPs-запрос к Crawling API для получения HTML-кода страницы. Затем мы используем Cheerio для извлечения тех же наборов данных из этого HTML-кода.

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
// импорт Crawlbase Crawling API пакет
Const { CrawlingAPI знак равно требовать('crawlbase');
Const Привет = требовать('привет');
Const фс = требовать('фс');

// инициализация Crawling API
Const API = новый CrawlingAPI({ знак: 'Crawlbase_JS_Токен' }); // Замените его на свой Crawlbase знак
Const веб-URL =
'https://www.backmarket.com/en-us/p/iphone-15-pro-max-256-gb-white-titanium-unlocked/4d141eb2-e989-4572-b57d-1685c77483a7';

// Crawling API получить выполнение запроса
API
.получить(веб-URL)
.тогда((ответ) => {
// Вызов функции для анализа данных из HTML-ответа
Const очистилДанные = parseDataFromHTML(ответ.тело);

// Запись извлеченных данных в файл JSON
фс.writeFileSync('scraped.json', JSON.стягивать({ scrapedData }, нуль, 2));
})
.поймать((ошибка) => {
консоль.журнал(ошибка, 'ОШИБКА');
});

// Функция для анализа данных из HTML-ответа
функция parseDataFromHTML(HTML) {
стараться {
Const $ = привет.загрузка(html),
очистилДанные = {
название: '',
оригинальная цена: '',
со скидкойЦена: '',
миниатюрами: '',
рейтинги: '',
отзывыКоличество: '',
с отзывами:[],
};

скопированные данные['заглавие'] = $('h1.title-1:первый').текст().отделка();
скопированные данные['оригинальнаяЦена'] = $('[data-popper-trigger="true"].body-1-light-striked:first').текст().отделка();
скопированные данные['discountedPrice'] = $('[data-qa="productpage-product-price"]:first').текст().отделка();
скопированные данные['миниатюра'] = $('div[data-test="карусель"] img[loading="жаждущий"]')['источник'];
скопированные данные[«рейтинги»] = $('[data-test="количество-обзоров-страниц-продукта"] диапазон:первый').текст().отделка();
скопированные данные['reviewsCount'] = $('[data-test="количество-обзоров-страниц-продукта"] > span:first').текст().отделка();
$('ul.list-none li.group').каждый((_, элемент) => {
Const автор = $(элемент).найдите('.body-1-жирный').текст().отделка();
Const URL = `https://www.backmarket.com/${$(элемент).найти('a[rel="noreferrer noopener"]').attr('href')}`;
Const рейтинги = $(элемент).найдите('[data-qa="user-comment"] span.body-2-bold').текст().отделка();
Const отзывы = $(элемент).найдите('.body-1-light.text-grey-500.whitespace-pre-line').текст().отделка();

if (автор && отзывы) {
// Помещаем извлеченные данные в массив отзывов
скопированные данные[«обзоры»].протолкнуть.({
автор,
URL,
рейтинги,
отзывы,
});
}
});

возвращают очистил данные;
} поймать (ошибка) {
возвращают ошибаюсь;
}
}

После сохранения кода выше перейдите в каталог, где находится index.js сохраняется в вашем терминале или командной строке. Выполните скрипт, запустив node index.js.

Проверьте вывод. В случае успеха вы увидите распечатанные извлеченные данные, как показано ниже:

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
{
"scrapedData": {
"заглавие": «iPhone 15 Pro Max 256 ГБ — Белый титан — Разблокирован — Две eSIM»,
"оригинальнаяЦена": "$1,199.00 новый",
"discountedPrice": "1,078.00 $",
"рейтинги": "4.4/5",
"reviewsCount": "(15 отзыва)",
"обзоры": [
{
"автор": «Роберт У.»,
"URL": "https://www.backmarket.com//en-us/p/iphone-15-pro-max-256-gb-blue-titanium-unlocked/878e83a6-9edf-4e23-8580-02fb22c5a022",
"рейтинги": "5/5",
"обзоры": «Я не мог быть счастливее, когда купил iPhone 15. Сначала он прибыл в надежной упаковке, защитная пленка на экране, оригинальная коробка с C-кабелем в комплекте. Точно так же, как если бы я получил его в магазине Apple, где я делал все свои предыдущие покупки новых продуктов. В будущем восстановленный товар будет моей первой мыслью!»
},
{
"автор": «Тереза ​​Дж.»,
"URL": "https://www.backmarket.com//en-us/p/iphone-15-pro-max-512-gb-natural-titanium-unlocked/d17785fe-7317-4cb5-bc0c-695b6211fb64",
"рейтинги": "4.6/5",
"обзоры": «Первый раз пользуюсь этим приложением. Навигация была неплохой. Доставка задержалась... это заставило меня нервничать. Я настроил свой телефон. Получив посылку, я обнаружил несколько отметин на телефоне, который должен был быть в отличном состоянии и без оригинальной коробки».
},
{
"автор": «Сайед А.»,
"URL": "https://www.backmarket.com//en-us/p/iphone-15-pro-max-256-gb-black-titanium-unlocked/39357e4a-02a9-4392-b750-8be737fdbb82",
"рейтинги": "3.8/5",
"обзоры": «Я доволен продуктом, но его цена должна быть ниже, потому что по этой цене вы можете купить его в Apple Store, просто нужно добавить немного больше. В остальном все хорошо. Если Backmsrket снизит цену, то людям не придется ходить в Apple Store за восстановленными товарами… думаю, что в будущем Backmarket станет лучше…»
},
{
"автор": "Кентрейл М.",
"URL": "https://www.backmarket.com//en-us/p/iphone-15-pro-max-512-gb-blue-titanium-unlocked/6e024703-8d25-4828-872d-484d38a8cd99",
"рейтинги": "5/5",
"обзоры": «Впервые я ношу новейший iPhone. Доставлено отлично, как описано, без недостатков. 💯 рекомендую»
},
{
"автор": «Ной Л.»,
"URL": "https://www.backmarket.com//en-us/p/iphone-15-pro-max-256-gb-natural-titanium-unlocked/de1fc6b3-ee1d-4d89-8db9-e382102a8528",
"рейтинги": "4.5/5",
"обзоры": «Очень доволен этим iPhone, очень легко перенести все данные на новый iPhone. Рекомендую покупать на Back Market, очень надежный сайт».
}
]
}
}

12. Заключение

В заключение, этот урок продемонстрировал два эффективных метода извлечения данных из backmarket.com с использованием Node.js. Мы изучили использование Playwright, продемонстрировав, как извлечь определенную информацию с веб-сайта. Также мы представили альтернативный подход с использованием Crawling API с Cheerio, предлагая решение обойти капчи и потенциальные блокировки при эффективном анализе HTML-контента.

Выбор между драматургом и Crawling API с Cheerio будет во многом зависеть от того, что вам нужно для вашего проекта. Playwright предоставляет надежное решение для динамического веб-скрейпинга и взаимодействия с современными веб-приложениями, в то время как Crawling API с Cheerio предлагается надежный метод доступа к HTML-контенту и его анализа.

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

Если вас интересуют другие проекты по скрапингу, рекомендуем ознакомиться с обучающими материалами ниже:

Как скопировать комментарии TikTok

Как извлечь данные компании Crunchbase

Как парсить сайты с помощью ChatGPT

13. Часто задаваемые вопросы

В. Можно ли использовать Playwright для скрапинга?

A. Да. Чтобы скрейпить веб-сайты с помощью Playwright, вы можете выполнить следующие общие шаги:

Шаг 1: Установка Playwright: Начните с установки Playwright через npm, используя команду npm install playwright.

Шаг 2: Напишите свой сценарий: Создайте файл JavaScript (например, scrape.js) и напишите код для автоматизации задач по скрапингу с помощью Playwright. Это может включать переход на веб-сайт, взаимодействие с элементами и извлечение данных.

Шаг 3: Запустите свой скрипт: Выполните свой скрипт, запустив node scrape.js в терминале или командной строке.

Шаг 4: Проверьте вывод: После запуска скрипта проверьте вывод, чтобы убедиться, что нужные данные были успешно извлечены.

Шаг 5: Усовершенствуйте свой сценарий: При необходимости усовершенствуйте свой скрипт для обработки любых пограничных случаев или ошибок, которые могут возникнуть в процессе сбора данных.

В. Playwright проще, чем Selenium?

С точки зрения простоты использования Playwright часто считается более удобным для пользователя по сравнению с Selenium. Playwright предлагает более простой и современный интерфейс для автоматизации взаимодействия с браузером. Он имеет такие функции, как автоматическая установка драйверов браузера и встроенная поддержка нескольких языков программирования.

С другой стороны, Selenium существует дольше и имеет большее сообщество и экосистему. Он широко используется и имеет обширную документацию и доступные ресурсы.

Короче говоря, выбор между Playwright и Selenium зависит от таких факторов, как конкретные требования вашего проекта, предпочтения команды и существующая инфраструктура.

В: Могут ли вас заблокировать, если вы копируете данные с веб-сайта с помощью Playwright?

Да, возможно заблокировать при парсинге веб-сайта с помощью Playwright. Веб-сайты могут применять меры для обнаружения и блокировки автоматизированных действий по парсингу, таких как обнаружение необычных шаблонов трафика или высокочастотных запросов с одного и того же IP-адреса.

Чтобы избежать блокировок и CAPTCHA, мы рекомендуем использовать Crawlbase. Интегрируя свой код с Crawlbase API, вы можете воспользоваться его функциями, включая использование миллионов ротационных IP-адресов и алгоритма на основе ИИ для имитации человеческого взаимодействия. Это помогает снизить риск обнаружения и обеспечивает более плавные операции по скрапингу.