我正在尝试对网站进行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);
}
})
答案 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);
}
})