首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >403使用Cheerio时禁止

403使用Cheerio时禁止
EN

Stack Overflow用户
提问于 2019-08-14 01:22:32
回答 1查看 811关注 0票数 1

我正在尝试网络抓取一个网站,这样我就可以为一个项目收集一些信息,这是我的代码,它在控制台403中返回。我正在使用request和cheerio来做这件事,为什么会这样呢?注意:我知道大多数状态码是什么意思。

代码语言:javascript
复制
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);
    }
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-14 01:45:42

你应该在请求中添加一个"User-Agent“头,它适用于某些浏览器(例如chrome)。服务器可能会检查它以避免不熟悉的客户端。

web抓取的一个经验法则:在尝试在你的框架上重现请求之前,使用chrome dev tools / fiddler /其他类似的工具来检查从你的客户端(chrome,firefox等)触发的请求(检查头文件,cookie等)。

我在你的案例中在Fiddler上看到的原始请求(当在chrome上点击你的url时):

代码语言:javascript
复制
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

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

修复的代码片段:

代码语言:javascript
复制
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);
    }
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57482563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档