Начало работы с веб-парсингом в JavaScript
Опубликовано: 2021-04-02Веб-скрапинг - одна из самых интересных вещей в мире программирования.
Что такое парсинг?
Почему он вообще существует?
Давайте узнаем ответы.
Что такое веб-парсинг?
Веб-скрапинг - это автоматизированная задача по извлечению данных с веб-сайтов.
Есть много приложений для очистки веб-страниц. Извлечение цен на товары и их сравнение с различными платформами электронной коммерции. Получение ежедневной цитаты из Интернета. Создание собственной поисковой системы, такой как Google, Yahoo и т. Д. Список можно продолжить.
Вы можете сделать больше, чем думаете, с помощью веб-скрейпинга. Как только вы узнаете, как извлекать данные с веб-сайтов, вы можете делать с ними все, что захотите.
Программа, которая извлекает данные с веб-сайтов, называется парсер . Вы научитесь писать парсеры на JavaScript.
В основном парсинг веб-страниц состоит из двух частей.
- Получение данных с помощью библиотек запросов и безголового браузера.
- Анализ данных для извлечения из них точной информации.
Без лишних слов приступим.
Настройка проекта
Я предполагаю, что у вас установлен Node, если нет, ознакомьтесь с руководством по установке NodeJS.
Мы собираемся использовать пакеты node-fetch и cheerio для cheerio веб-страниц в JavaScript. Настроим проект с npm для работы со сторонним пакетом.
Давайте быстро посмотрим, как завершить настройку.
- Создайте каталог с именем
web_scrapingи перейдите к нему. - Запустите команду
npm initчтобы инициализировать проект. - Ответьте на все вопросы, исходя из ваших предпочтений.
- Теперь установите пакеты с помощью команды
npm install node-fetch cheerioДавайте взглянем на установленные пакеты.
выборка узла
Пакет node-fetch переносит window.fetch в среду node js. Это помогает делать HTTP-запросы и получать необработанные данные.
радость
Пакет cheerio используется для анализа и извлечения необходимой информации из необработанных данных.
Два пакета node-fetch и cheerio достаточно хороши для парсинга веб-страниц в JavaScript. Мы не собираемся видеть все методы, предоставляемые пакетами. Мы увидим поток веб-скрапинга и наиболее полезные методы в этом потоке.
Вы научитесь чистке веб-страниц, выполняя это. Итак, приступим к работе.
Список чемпионата мира по крикету
Здесь, в этом разделе, мы собираемся провести фактический парсинг веб-страниц.
Что мы добываем?
По названию раздела, думаю, вы легко догадались. Да, все, что вы думаете, правильно. Давайте извлечем всех победителей и призеров чемпионата мира по крикету до сих пор.
- Создайте в проекте файл с именем
extract_cricket_world_cups_list.js. - Мы будем использовать страницу Wikipedia Cricket World Cup, чтобы получить желаемую информацию.
- Сначала получите необработанные данные с помощью пакета
node-fetch. - Код ниже получает необработанные данные указанной выше страницы Википедии.
const fetch = require("node-fetch"); // function to get the raw data const getRawData = (URL) => { return fetch(URL) .then((response) => response.text()) .then((data) => { return data; }); }; // URL for data const URL = "https://en.wikipedia.org/wiki/Cricket_World_Cup"; // start of the program const getCricketWorldCupsList = async () => { const cricketWorldCupRawData = await getRawData(URL); console.log(cricketWorldCupRawData); }; // invoking the main function getCricketWorldCupsList();Мы получили необработанные данные из URL. Теперь пришло время извлечь необходимую нам информацию из необработанных данных. Воспользуемся пакетом cheerio для извлечения данных.
Извлечение данных, содержащих HTML-теги, с помощью cheerio - легкая прогулка. Прежде чем переходить к фактическим данным, давайте посмотрим на некоторые примеры парсинга данных с помощью cheerio .
-
cheerio.loadданные HTML сcheerio.loadметодаcheerio.load.
const parsedSampleData = cheerio.load( `<div id="container"><p id="title">I'm title</p></div>` );- Мы проанализировали приведенный выше HTML-код. Как извлечь из него содержимое тега
p? Это то же самое, что и селекторы в манипуляциях с DOM в JavaScript.
console.log(parsedSampleData("#title").text());

Вы можете выбрать теги как хотите. Вы можете ознакомиться с различными методами на официальном сайте cheerio.
- Теперь пришло время извлечь список чемпионата мира по футболу. Чтобы извлечь информацию, нам нужно знать теги HTML, которые содержат информацию на странице. Перейдите на страницу Wikipedia чемпионата мира по крикету и просмотрите страницу, чтобы получить информацию о тегах HTML.
Вот полный код.
const fetch = require("node-fetch"); const cheerio = require("cheerio"); // function to get the raw data const getRawData = (URL) => { return fetch(URL) .then((response) => response.text()) .then((data) => { return data; }); }; // URL for data const URL = "https://en.wikipedia.org/wiki/Cricket_World_Cup"; // start of the program const getCricketWorldCupsList = async () => { const cricketWorldCupRawData = await getRawData(URL); // parsing the data const parsedCricketWorldCupData = cheerio.load(cricketWorldCupRawData); // extracting the table data const worldCupsDataTable = parsedCricketWorldCupData("table.wikitable")[0] .children[1].children; console.log("Year --- Winner --- Runner"); worldCupsDataTable.forEach((row) => { // extracting `td` tags if (row.name === "tr") { let year = null, winner = null, runner = null; const columns = row.children.filter((column) => column.name === "td"); // extracting year const yearColumn = columns[0]; if (yearColumn) { year = yearColumn.children[0]; if (year) { year = year.children[0].data; } } // extracting winner const winnerColumn = columns[3]; if (winnerColumn) { winner = winnerColumn.children[1]; if (winner) { winner = winner.children[0].data; } } // extracting runner const runnerColumn = columns[5]; if (runnerColumn) { runner = runnerColumn.children[1]; if (runner) { runner = runner.children[0].data; } } if (year && winner && runner) { console.log(`${year} --- ${winner} --- ${runner}`); } } }); }; // invoking the main function getCricketWorldCupsList();И вот очищенные данные.
Year --- Winner --- Runner 1975 --- West Indies --- Australia 1979 --- West Indies --- England 1983 --- India --- West Indies 1987 --- Australia --- England 1992 --- Pakistan --- England 1996 --- Sri Lanka --- Australia 1999 --- Australia --- Pakistan 2003 --- Australia --- India 2007 --- Australia --- Sri Lanka 2011 --- India --- Sri Lanka 2015 --- Australia --- New Zealand 2019 --- England --- New ZealandКруто, правда?
Шаблон соскабливания
Получение необработанных данных из URL-адреса является обычным делом в каждом проекте веб-парсинга. Единственная часть, которая изменяется, - это извлечение данных в соответствии с требованиями. Вы можете попробовать приведенный ниже код в качестве шаблона.
const fetch = require("node-fetch"); const cheerio = require("cheerio"); const fs = require("fs"); // function to get the raw data const getRawData = (URL) => { return fetch(URL) .then((response) => response.text()) .then((data) => { return data; }); }; // URL for data const URL = "https://example.com/"; // start of the program const scrapeData = async () => { const rawData = await getRawData(URL); // parsing the data const parsedData = cheerio.load(rawData); console.log(parsedData); // write code to extract the data // here // ... // ... }; // invoking the main function scrapeData();Вывод
Вы узнали, как очистить веб-страницу. Теперь ваша очередь попрактиковаться в кодировании.
Я бы также посоветовал ознакомиться с популярными фреймворками для парсинга и облачными решениями для парсинга.
Счастливое кодирование
