Искатель NodeJS : не удается получить имя, связанное с поисковым словом

#javascript #node.js #cheerio

Вопрос:

Я создал обходчик в NodeJS

У меня есть веб-сайт : «http://www.google.com» для которого я написал «краулер»

Используемая технология-NodeJS, cheerio

Примерный пример того, чего я достиг :

Например , позволяет выполнить поиск google.com. есть кнопка под названием «поиск в Google».

Давайте поищем текст «поиск в Google». Сегодня мой искатель может найти слово на странице и сказать, что он его нашел.

Сегодня он показывает : текст «поиск в Google», найденный на google.com

Каким мне нужен результат, чтобы быть :

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

Необходимый вывод : текст «поиск в Google», найденный на google.com из «TAGNAME: КНОПКА»

Я пытался использовать indexOf, но это не работает. Пожалуйста, подскажите, как это сделать ?

Вот код !!!

 index.js
var request = require('request');
var cheerio = require('cheerio');
var URL = require('url-parse');

var START_URL = "https://www.mytravelexp.com/";
var SEARCH_WORD ="Pack your travel essentials";
var MAX_PAGES_TO_VISIT = 20;

var pagesVisited = {};
var numPagesVisited = 0;
var pagesToVisit = [];
var url = new URL(START_URL);
var baseUrl = url.protocol   "//"   url.hostname;

pagesToVisit.push(START_URL);
crawl();

function crawl() {
  if(numPagesVisited >= MAX_PAGES_TO_VISIT) {
    console.log("Reached max limit of number of pages to visit.");
    return;
    
  }
  var nextPage = pagesToVisit.pop();
  if (nextPage in pagesVisited) {
    // We've already visited this page, so repeat the crawl
    crawl();
  } else {
    // New page we haven't visited
    visitPage(nextPage, crawl);
  }
}

function visitPage(url, callback) {
  // Add page to our set
  pagesVisited[url] = true;
  numPagesVisited  ;

  // Make the request

  request(url, function(error, response, body) {
    console.log("***************************")
    console.log(" Visiting page: "    url   'n');
     if(response.statusCode !== 200) {
       callback();
       return;
     }
     // Parse the document body
     var $ = cheerio.load(body);
     var isWordFound = searchForWord($, SEARCH_WORD);
     if(isWordFound) {
       console.log(' '   SEARCH_WORD   ' found at page '   url);
       collectInternalLinks($);
       callback();
     } else {
       collectInternalLinks($);
       // In this short program, our callback is just calling crawl()
       callback();
     }
  });
}

function searchForWord($, word) {
  var bodyText = $('html > body').html().toLowerCase();
  return(bodyText.includes(word.toLowerCase()) !== -1);
}

function collectInternalLinks($) {
    var relativeLinks = $("a[href^='/']");
    relativeLinks.each(function() {
        pagesToVisit.push(baseUrl   $(this).attr('href'));
    });
    
    var absoluteLinks = $("a[href^='http']");
    absoluteLinks.each(function() {
        pagesToVisit.push($(this).attr('href'));
    });
} 

Ответ №1:

 if ( $('123')[0].name === 'button' ){
    console.log($('button').contents().first().text());
    console.log( $('123').attr('name') );
}