Начало работы с веб-скрейпингом в Node.js
Веб-скрапинг — это сбор данных, используемый для извлечения данных с веб-сайтов. Программное обеспечение для парсинга веб-страниц может получить доступ к всемирной паутине напрямую, используя протокол передачи гипертекста, или через веб-браузер. Хотя просмотр веб-страниц может выполняться пользователем программного обеспечения вручную, этот термин обычно относится к автоматизированным процессам, реализованным с использованием бота или поискового робота. В настоящее время парсинг играет неотъемлемую роль в разработке веб-API и т. д.
- Отправьте запрос на веб-страницу для извлечения данных.
- Извлечение тела веб-страницы.
- Понимание структуры тегов/элементов, которые вы хотите извлечь из веб-страницы, и внесение соответствующих изменений в код для обхода DOM.
Проект с открытым исходным кодом Node.js является одной из самых популярных сред выполнения и имеет множество функций, которые упрощают разработку с его помощью потрясающих вещей.
Манипулирование DOM внутри веб-браузера — это то, что Javascript и библиотеки, такие как jQuery, делают действительно хорошо, и поэтому имеет смысл писать скрипты парсинга веб-страниц в Node.js, поскольку мы можем использовать многие методы, которые мы знаем из манипулирования DOM в клиентский код для веб-браузера.
Чтобы начать работу с парсингом веб-страниц с помощью Node.js, вам потребуются следующие настройки:
Cheerio — это быстрая, гибкая и компактная реализация ядра jQuery, разработанная специально для сервера. В Cheerio мы используем селекторы для выбора тегов HTML-документа. Синтаксис селектора был заимствован из jQuery. Ниже приведен неполный список доступных селекторов:
- $(«*») — выбирает все элементы
- $(«#first») — выбирает элемент с id=»first»
- $(«.intro») — выбирает все элементы с class=»intro»
- $(«div») — выбирает все элементы
- $(«h2, div, p») — выбирает все элементы
,
,- $(«li:first») — выбирает первый элемент
Для базового примера мы будем очищать количество коммитов на Страница Cheerio на Github. Веб-страница со структурой DOM показана ниже:
Как видно из изображения, количество коммитов существует в
span
элемент, имеющий классnum text-emphasized
. Этот элемент span является потомкомa (anchor)
тег, который, в свою очередь, является дочернимli
тег, имеющий класс «фиксирует». Следующий код загружает необходимые пакеты и извлекает количество коммитов с веб-страницы.var request = require("request"); const $ = require('cheerio'); var url = "https://github.com/cheeriojs/cheerio"; request(url, function(error, response, body){ if(error){ console.log(error); } else{ console.log("Response : " + response); console.log("Response Status : " + response.status); var li = $('li.commits', body)[0]["children"]; for(var i = 0; i < li.length; i++){ if(li[i]["type"] == "tag" && li[i]["name"] == "a"){ for(var j = 0; j < li[i]["children"].length; j++){ if(li[i]["children"][j]["name"] == "span"){ if(li[i]["children"][j]["attribs"]["class"] == "num text-emphasized"){ console.log("Commits : " + li[i]["children"][j]["children"][0]["data"].trim()); } } } } } }})
Теперь мы рассмотрим фрагмент кода по частям.
- Начальная часть кода импортирует пакеты
request
а такжеcheerio
которые имеют жизненно важное значение для процесса очистки. - Затем мы сохраняем URL-адрес для очистки в var
url
. После этого мы делаем запрос к URL-адресу с помощью модуля запроса и проверяем наличие ошибки/ответа и обрабатываем его соответствующим образом в двух отдельных блоках (1-й блок для ошибки и 2-й блок для кода очистки). - В блоке очистки мы сначала извлекаем дочерние элементы
li
тег, имеющий классcommits
. Можно наблюдать список детей дляli
тег на рисунке ниже. - Однажды у нас есть список детей для
li
тег готов, мы перебираем каждый, чтобы выбрать тот, у которого есть["type"] == "tag"
а также["name"] == "span"
. - Как только мы извлекли
anchor
тег, мы выполняем тот же цикл над его списком дочерних элементов, чтобы найтиspan
ребенок в классеnum text-emphasized
. Это делается с помощью["name"] == "span"
а также["attribs"]["class"] == "num text-emphasized"
. - Наконец, после того, как мы получим
span
элемент с нами, мы извлекаем его данные и обрезаем их, чтобы удалить пробелы. Это оставляет нас с количеством коммитов. Вывод всего кода показан в следующем фрагменте.
Поздравляю! Вы только что написали свой первый парсер с помощью node.js!
- $(«h2, div, p») — выбирает все элементы