在编写微博爬虫的时候,稍微学习了一下网页编码的知识,主要来自于 W3C 官方文档的 5.2.2 小节。
To sum up, conforming user agents must observe the following priorities when determining a document’s character encoding (from highest priority to lowest):
首先看 http 头信息中的 Content-Type 字段,如果没有的话,会查看 Meta 信息,如果还没有的话,会查看一些外部资源的信息,比如css或者JavaScript的charset字段。 如果以上信息依然不能确定编码的话,就采用默认的 ISO-8859-1 字符集去解析网页。
在爬取 “珠海市人力资源和社会保障局” 的网站的时候,遇到中文编码 gb2312,使用 iconv-lite 对其进行处理,代码如下:
"use strict";
const request = require('request');
const cheerio = require('cheerio');
const iconv = require('iconv-lite');
let req = request('http://www.zhrsj.gov.cn/xinxi/gzzk/');
req.on('error', (err)=> {
console.log('error', err);
});
let chunks = [];
req.on('data', (res)=> {
chunks.push(res);
});
req.on('end', ()=> {
let decodedBody = iconv.decode(Buffer.concat(chunks), 'gb2312');
let $ = cheerio.load(decodedBody);
$("table[width='96%']").find('tr').each((index, e)=> {
let a = $(e).children();
console.log(a.eq(1).text());
});
});