如何解决nodeJS Crawler:无法获取与搜索词关联的标记名
我在 NodeJS 中创建了一个爬虫
我有一个网站:“http://www.google.com”,我为其编写了爬虫
技术使用的是nodeJS、cheerio
我所取得的成就的示例:
例如,让我们搜索 google.com。有一个按钮叫做“谷歌搜索”。
让我们搜索文本“google search”。今天我的爬虫可以在页面中找到这个词并说它找到了。
今天显示:在 google.com 上找到的文本“google search”
我需要的结果是:
它需要做的是除了查找文本之外,还要告诉我标签名称,在这种情况下是一个按钮
所需的输出是:在 “TAGNAME: BUTTON”
的 google.com 上找到的文本“google search”我尝试使用 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'));
});
}
解决方法
if ( $('123')[0].name === 'button' ){
console.log($('button').contents().first().text());
console.log( $('123').attr('name') );
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。