Автор оригинала: Dushyant Rathore.
Веб-соскоб – соскреб данных, используемый для извлечения данных с веб-сайтов. Web Scraping Software может получить доступ к сети World Wide напрямую, используя протокол передачи HyperText, или через веб-браузер. Хотя веб-соскоб можно выполнить вручную пользователем программного обеспечения, термин обычно относится к автоматизированным процессам, реализованным с использованием бота или веб-сканера. В настоящее время соскоб играет неотъемлемую роль в дизайне веб-API и т. Д.
- Сделайте запрос на веб-страницу, чтобы соскрести данные.
- Извлечение тела веб-страницы.
- Понимание структуры тегов/элементов, которые вы хотите извлечь из веб-страницы и вносить изменения в код для перемещения дома соответственно.
Проект с открытым исходным кодом Node.js является одним из самых популярных средов выполнения и имеет кучу функций, которые позволяют легко развивать потрясающие вещи с ним.
Манипулирующий DOM внутри веб-браузера – это то, что JavaScript и библиотеки, такие как jQuery, действительно хорошо, и поэтому он имеет большой смысл писать веб-сценарии Scraping в Node.js, поскольку мы можем использовать много методик, которые мы знаем из манипуляций DOM в Клиентский код для веб-браузера.
Чтобы начать работу с помощью Web Scraping, используя Node.js, нужно настроить следующие вещи: –
Cheerio – это быстрый, гибкий и постная реализация Core jQuery, разработанная специально для сервера. В Cheerio мы используем селекторы для выбора тегов HTML-документа. Синтаксис селектора был заимствован в jQuery. Ниже приведен частичный список доступных селекторов:
- $ (“*”) – выбирает все элементы
- $ (“# первая”) – выбирает элемент с
- $ (“. Intro”) – выбирает все элементы с
- $ (“div”) – выбирает все элементы
- $ (“h2, div, p”) – выбирает все
,
, элементы - $ (“Li: firf”) – выбирает первый элемент
Для основного примера мы будем соскабливать количество коммитов на Страница GitHub Cheerio Отказ Веб-страница с структурой DOM показана ниже:
Как вы можете наблюдать от изображения, количество коммитов существует в промежуток
элемент, имеющий класс Num Text-подчеркивает
Отказ Этот элемент охвата – это ребенок A (якорь)
Тег, который в свою очередь, это ребенок Ли
тег, имеющий класс `комбинирует”. Следующий код загружает необходимые пакеты и извлекает количество коммитов из веб-страницы.
// Load the necessary packages var request = require("request"); const $ = require('cheerio'); //URL to scrape var url = "https://github.com/cheeriojs/cheerio"; //Make the request request(url, function(error, response, body){ if(error){ console.log(error); } else{ console.log("Response : " + response); console.log("Response Status : " + response.status); //console.log("Body : " + body); //Extract the children of the list tag having class commits var li = $('li.commits', body)[0]["children"]; //Loop over to extract the anchor tag for(var i = 0; i < li.length; i++){ //Check for anchor tag/type if(li[i]["type"] == "tag" && li[i]["name"] == "a"){ for(var j = 0; j < li[i]["children"].length; j++){ //Check for the span having the class num text-emphasized if(li[i]["children"][j]["name"] == "span"){ if(li[i]["children"][j]["attribs"]["class"] == "num text-emphasized"){ //console.log(li[i]["children"][j]); console.log("Commits : " + li[i]["children"][j]["children"][0]["data"].trim()); } } } } } }})
Теперь мы пройдемся через секции фрагмента кода.
- Начальная часть кода импортирует пакеты
Запрос
иCheerio
которые жизненно важны для соскоба. - Далее мы храним URL, чтобы соскрести в VAR
URL
Отказ После этого мы сделаем запрос к URL-адресу, используя модуль запроса и проверяю ошибку/ответ и обрабатывать ее соответственно в двух отдельных блоках (1-й блок для ошибки и 2-й блок для Craping Code). В соскобке мы сначала извлеките детей
Ли
тег, имеющий класссовершает
Отказ Можно наблюдать список детей дляЛи
тег на рисунке ниже.- Однажды у нас есть список детей для
Ли
Тег готов, мы включаем каждый, чтобы выбрать, имеющее[«Тип»]
и[«Имя»]
Отказ - Как только мы извлекли
Якорь
Tag, мы выполняем ту же петлю по своему списку детей, чтобы найтипромежуток
Ребенок, имеющий классNum Text-подчеркивает
Отказ Это делается с использованием[«Имя»]
и[«Класс»] [«Класс»]
Отказ - Наконец, после того, как у нас есть
промежуток
Элемент с нами, мы извлекаем его данные и обрежьте его, чтобы удалить пробелы. Это оставляет нас с количеством коммиентов. Выход всего кода отображается в следующем фрагменте.
Поздравляю! Вы просто написали свой первый веб-скребок, используя Node.js!