Соскоб с NodeJS - PullRequest
       46

Соскоб с NodeJS

0 голосов
/ 07 февраля 2019

Мне нужно извлечь ссылки из 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'));
    }
   )
})

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

В результате мы будем получать ссылки внутри каждой из них.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Это должно выглядеть примерно так:

let links = $('a').get().map(a => $(a).attr('href'))
0 голосов
/ 09 февраля 2019

Я делюсь своим решением, как вопрос, но с разными изменениями.

Я не извлекаю все ссылки, только ссылку, которую я перехожу по 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;

Каждый может использоватьэто без проблем.

0 голосов
/ 07 февраля 2019
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)
}

Если вы спрашиваете, как извлечь URL из ссылок, полученных от cheerio, вы уже делаете это.Если вы хотите использовать их в другом месте после завершения запроса (например, для повторной очистки), сохраните их в массиве и вызовите функцию, которая будет использовать этот массив после итерации по последней ссылке.

...