2017-05-30 1 views
1

Afin d'obtenir tous les liens d'une page Web avec nœud JS à l'aide cheerio, j'utilise ces lignes qui fonctionnent 90% du temps:Obtenir des liens avec le numéro de cheerio - NodeJS

const request = require('request'); 
const cheerio = require('cheerio'); 

var url = 'an URL'; 
request(url, function(err, resp, body){ 
    $ = cheerio.load(body); 
    links = $('a'); 
    $(links).each(function(i, link){ 
    console.log($(link).text()); 
    }); 
}); 

Mais pour certains sites, il ne fonctionne pas correctement, par exemple: http://www.sylire.com/ http://www.bernieshoot.fr/

Et je ne peux pas le comprendre. Est-ce que quelqu'un pouvait me donner des conseils pour résoudre ce problème?

Notez que je peux normaly obtenir tous les liens pour ces sites Web dans la console de navigateur en utilisant:

var link = document.querySelectorAll("a"); 
for (var i of link){ 
    console.log(i.text); 
} 

Cordialement,

Répondre

1

Il est à cause de l'agent utilisateur, vous devez envoyer un dans votre demande dites-leur que vous êtes "un navigateur" en train de visiter.

Exemple qui fonctionne pour moi:

const request = require('request'); 
const cheerio = require('cheerio'); 

var url = 'http://www.sylire.com/'; 

var customHeaderRequest = request.defaults({ 
    headers: {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'} 
}) 

customHeaderRequest.get(url, function(err, resp, body){ 
    $ = cheerio.load(body); 
    links = $('a'); 
    $(links).each(function(i, link){ 
    console.log($(link).text()); 
    }); 
}); 
+0

Merci beaucoup pour vous répondre, il fonctionne parfaitement maintenant :-) – Blq56