當我們在寫爬蟲時有時會遇到古老的網站,在當年 UTF-8 還不是標準的年代時繁體中文的網站都是使用 BIG5 作為文字編碼,但現代的解析方式皆預設為 UTF-8。還好 NodeJS 中有 iconv 這樣的工具讓我們可以很方便的使用各種不同的編碼解析二進位檔案。以下是一段程式範例,先使用 node-fetch 將網頁爬取下來後採用 arrayBuffer 的形式傳給 iconv-lite 並同時指定解析編碼為 BIG5,如此一來就能夠順利的解析檔案中的中文字。
const fetch = require('node-fetch')
const cheerio = require('cheerio')
const iconv = require('iconv-lite')
async function main() {
const response = await fetch('https://google.com')
const buffer = await response.arrayBuffer()
const decoded = iconv.decode(Buffer.from(buffer), 'big5')
const $ = cheerio.load(decoded)
const links = $('#contentInner td:nth-child(2) a')
for (const link of links) {
console.log($(link).text())
console.log($(link).attr('href'))
}
}
main()