刮Node Nodejs

我想用Nodejs来刮页面“ https://www.ukr.net/ua/news/sport.html ”。 我正尝试使用'request'npm模块进行基本的获取请求,例如:

const inspect = require('eyespect').inspector(); const request = require('request'); const url = 'https://www.ukr.net/news/dat/sport/2/'; const options = { method: 'get', json: true, url: url }; request(options, (err, res, body) => { if (err) { inspect(err, 'error posting json'); return } const headers = res.headers; const statusCode = res.statusCode; inspect(headers, 'headers'); inspect(statusCode, 'statusCode'); inspect(body, 'body'); }); 

但在回应身体我只得到

 body: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n<html>\n<head>\n<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">\n<META HTTP-EQUIV=Refresh CONTENT="10">\n<meta HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8">\n<title>www.ukr.net</title>\n</head>\n<body>\n Идет загрузка, подождите .....\n</body>\n</html>' 

如果我从邮差得到请求,我得到我需要的东西:

在这里输入图像说明

请帮帮我吧。

你可能被机器人保护阻止 – 这可以用curl来检查。

curl -vL https://www.ukr.net/news/dat/sport/2/

curl似乎得到了结果,如果curl正在工作,那么在节点的请求中可能会有一些缺失,解决scheme可能是模仿您select的浏览器。

例如,以下是来自developer-tools的类似于Chrome的请求示例:

在这里输入图像说明

为请求导出以下选项:

 const options = { method: 'get', json: true, url: url, gzip: true, headers: { "Host": "www.ukr.net", "Pragma": "no-cache", "Cache-Control": "no-cache", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, sdch, br", "Accept-Language": "en-US,en;q=0.8" } }; 

如果你有jQuery的经验,例如,有一个访问HTML的库。

我们将使用的标记示例:

 <ul id="fruits"> <li class="apple">Apple</li> <li class="orange">Orange</li> <li class="pear">Pear</li> </ul> 

首先你需要加载HTML。 jQuery中的这一步是隐含的,因为jQuery在一个DOM中操作。 使用Cheerio,我们需要传入HTML文件。

 var cheerio = require('cheerio'); $ = cheerio.load('<ul id="fruits">...</ul>'); 

select

 $('ul .pear').attr('class') 

可能你可以做出这样的事情。

 request(options, (err, res, body) => { var $ = cheerio.load(html); }) 

https://github.com/cheeriojs/cheerio