获取与 cheerio 问题的链接 - NodeJS

Get links with cheerio issue - NodeJS

为了使用 cheerio 从带有 Node JS 的网页获取所有链接,我使用了这些在 90% 的时间都有效的行:

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());
  });
});

但对于某些网站,它不能正常工作,例如: http://www.sylire.com/ http://www.bernieshoot.fr/

而且我想不通。有人可以给我提示来解决这个问题吗?

请注意,我通常可以使用以下方式在浏览器控制台中获取这些网站的所有链接:

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

此致,

这是因为用户代理的缘故,您需要在请求中发送一个来告诉他们您正在 "an actual browser" 访问。

适合我的示例:

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());
  });
});