Начало работы с веб-скрейпингом в 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 показана ниже:

Веселье.png

Как видно из изображения, количество коммитов существует в 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 тег на рисунке ниже.
    Cheerio_2.png
  • Однажды у нас есть список детей для li тег готов, мы перебираем каждый, чтобы выбрать тот, у которого есть ["type"] == "tag" а также ["name"] == "span".
  • Как только мы извлекли anchor тег, мы выполняем тот же цикл над его списком дочерних элементов, чтобы найти span ребенок в классе num text-emphasized. Это делается с помощью ["name"] == "span" а также ["attribs"]["class"] == "num text-emphasized".
  • Наконец, после того, как мы получим span элемент с нами, мы извлекаем его данные и обрезаем их, чтобы удалить пробелы. Это оставляет нас с количеством коммитов. Вывод всего кода показан в следующем фрагменте.

Cheerio_3.png

Поздравляю! Вы только что написали свой первый парсер с помощью node.js! 😄

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *