403使用Cheerio时禁止

时间:2019-08-13 17:22:31

标签: javascript node.js npm

我正在尝试对网站进行Web爬网,以便收集项目的一些信息,这是我的代码,它正在控制台403中返回。我正在使用request和cheerio来执行此操作,为什么会这样?请注意,我确实知道大多数状态码的含义。

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


request('http://www.realmeye.com/forum/', function(err, resp, html) {
    if (!err) {
        const gatherInformation = cheerio.load(html);
        console.log(html);
    }
})

1 个答案:

答案 0 :(得分:0)

您应在请求中添加“ User-Agent”标头,以适合某些浏览器(例如chrome)。服务器可能会对其进行检查,以避免不熟悉的客户端。

网络抓取的经验法则: 在尝试在您的框架上重现请求之前,请使用chrome开发工具/提琴手/其他类似工具检查从客户端启动的请求(chrome,firefox等)。(检查标头,cookie等)。

在您遇到的情况下,我在Fiddler上看到的原始请求(在chrome上点击您的网址时):

GET /forum/ HTTP/1.1
Host: www.realmeye.com
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36
Sec-Fetch-Mode: same-origin
Sec-Fetch-Site: same-origin
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,he;q=0.8

大多数服务器会在返回200 OK响应之前检查“ Accept”和“ User-Agent”标头。

固定代码段:

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

let options = {
    url: 'https://www.realmeye.com/forum/',
    headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
    }
};

request(options, function(err, resp, html) {
    if (!err) {
        const gatherInformation = cheerio.load(html);
        console.log(html);
    }
})