Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用NodeJS刮_Javascript_Node.js_Cheerio_Requestjs - Fatal编程技术网

Javascript 用NodeJS刮

Javascript 用NodeJS刮,javascript,node.js,cheerio,requestjs,Javascript,Node.js,Cheerio,Requestjs,我需要从循环中的url中提取链接,所以基本上我需要再次执行该函数,但我不知道如何使用nodejs实现这一点 var request = require('request'); var cheerio = require('cheerio'); var searchTerm = 'baloncesto'; var url = 'http://mismarcadores.com/' + searchTerm; request(url , function(err,resp,body){ $

我需要从循环中的url中提取链接,所以基本上我需要再次执行该函数,但我不知道如何使用nodejs实现这一点

var request = require('request');
var cheerio = require('cheerio');
var searchTerm = 'baloncesto';
var url = 'http://mismarcadores.com/' + searchTerm;

request(url , function(err,resp,body){
    $ = cheerio.load(body);
    links = $('a');
    $(links).each(function(i,link){
        console.log(url+$(link).attr('href'));
    }
   )
})
我的问题是如何从这个数组中提取链接,因为这段代码工作正常(这段代码在控制台中显示了链接),但我需要删除这些链接

其结果将是刮取每个URL中的URL

var request = require('request');
var cheerio = require('cheerio');
var searchTerm = 'baloncesto';
var url = 'http://mismarcadores.com/' + searchTerm;
request(url , function(err,resp,body){
    $ = cheerio.load(body)
    var allLinks = []
    links = $('a');
    $(links).each(function(i,link){
        console.log(url+$(link).attr('href'))
        var currentLink = url+$(link).attr('href')
        allLinks.push(currentLink)
        if (i == links.length-1){
          useLinks(allLinks)
        }
    }
   )
})

function useLinks(allLinks){
  console.log(allLinks)
}
如果你问如何从cheerio收到的链接中提取url,你已经在做了。如果您希望在请求完成后在其他地方使用它们(例如,再次刮取),则将它们存储在数组中,并在迭代最后一个链接后调用函数以使用该数组


如果你问如何从cheerio收到的链接中提取url,你已经在做了。如果您希望在请求完成后在其他地方使用它们(例如,再次刮取),则将它们存储在数组中,并在迭代最后一个链接后调用函数以使用该数组

它应该是这样的:

let links = $('a').get().map(a => $(a).attr('href'))

它应该是这样的:

let links = $('a').get().map(a => $(a).attr('href'))

我同意我的解决方案就像问题一样,但有不同的变化

我不提取所有链接,只提取通过url传递的链接

var express = require('express');
var fs      = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app     = express();
var searchTerm = 'baloncesto';
var url = 'http://mismarcadores.com/' + searchTerm;
var arr2 = [];
app.get('/webscrape', function(req, res,body){  
    request(url , function(err,resp,body){
        var array2 = [];
        var array3 = [];
        $ = cheerio.load(body);
        links = $('a'); //jquery get all hyperlinks
        $(links).each(function(i, link){
            if($(link).attr('href').includes("baloncesto")){
                array2.push($(link).attr('href'));
            }
        }); 
        const uniqueLinks = new Set([...array2]);   
        uniqueLinks.forEach((d) => {    
        const row = []; // a new array for each row of data
            row.push(d);
            array3.push(row.join()); // by default, join() uses a ','
        }); 
        fs.writeFile('raaga_output.json', JSON.stringify(array3, null, 4), function(err){
            console.log('File successfully written! - Check your project directory for the raaga_output.json file');
        })      
        res.send('File successfully written! - Check your project directory for the raaga_output.json file');   
    })
})
app.listen('3000')
console.log('Web Scrape happens on port 3000');
exports = module.exports = app;

每个人都可以毫无问题地使用它。

我分享我的解决方案就像问题一样,但有不同的变化

我不提取所有链接,只提取通过url传递的链接

var express = require('express');
var fs      = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app     = express();
var searchTerm = 'baloncesto';
var url = 'http://mismarcadores.com/' + searchTerm;
var arr2 = [];
app.get('/webscrape', function(req, res,body){  
    request(url , function(err,resp,body){
        var array2 = [];
        var array3 = [];
        $ = cheerio.load(body);
        links = $('a'); //jquery get all hyperlinks
        $(links).each(function(i, link){
            if($(link).attr('href').includes("baloncesto")){
                array2.push($(link).attr('href'));
            }
        }); 
        const uniqueLinks = new Set([...array2]);   
        uniqueLinks.forEach((d) => {    
        const row = []; // a new array for each row of data
            row.push(d);
            array3.push(row.join()); // by default, join() uses a ','
        }); 
        fs.writeFile('raaga_output.json', JSON.stringify(array3, null, 4), function(err){
            console.log('File successfully written! - Check your project directory for the raaga_output.json file');
        })      
        res.send('File successfully written! - Check your project directory for the raaga_output.json file');   
    })
})
app.listen('3000')
console.log('Web Scrape happens on port 3000');
exports = module.exports = app;

每个人都可以毫无问题地使用它。

您还没有问任何问题,也没有说代码有什么问题。请看。关于在堆栈溢出上使用这些技术删除站点,有很多问题;例如也许您可以对您不理解的内容进行扩展?您没有提出任何问题,也没有说代码有什么问题。请看。关于在堆栈溢出上使用这些技术删除站点,有很多问题;例如也许你可以把你不理解的东西扩展一下?