我使用nodejs运行一个抓取网站以获取文章,我想使用XMLHttpRequest加载中文网站,而该网站正在使用此meta
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
并且我的网站使用了字符集UTF-8
xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.setRequestHeader('Content-Type','text/html; charset=gbk');
xhr.onreadystatechange = function () {
//DOM Processing
$=cheerio.load(xhr.responseText);
};
xhr.send();
有人知道我必须为标题设置什么吗?我尝试了charset gbk / GB2312也没有用。任何帮助都会很棒。 谢谢
答案 0 :(得分:1)
我认为您正在使用:https://github.com/driverdan/node-XMLHttpRequest
在“已知问题/功能缺失”中: 对于非UTF8文件,本地文件访问可能会产生意外结果
所以我认为这不能通过node-XMLHttpRequest来解决。
这是我使用gbk抓取网站的解决方案,希望这对您有用。
const rp = require('request-promise')
const cheerio = require('cheerio')
const iconv = require('iconv-lite')
const options = {
url: `http://www.duchang.org/`,
transform: function (body) {
let html = iconv.decode(body, 'gbk')
return cheerio.load(html)
},
encoding: null
}
rp(options)
.then(($) => {
// 首页头条
console.log($)
})
.catch(function (err) {
throw Error(err)
})