#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') );
}