Node.js는 UTF-8이 아닌 중국 웹 페이지를 크롤링 할 때 코드 문제를 해결했습니다. 예를 들어, Netease의 홈페이지 인코딩은 GB2312이며, 크롤링 할 때는 차량 코드가 차량 코드가됩니다.
코드 사본은 다음과 같습니다.
var request = require ( 'request')
var url = 'http://www.163.com'
요청 (url, function (err, res, body) {
Console.log (Body)
})
Iconv-lite를 사용하여 해결할 수 있습니다
설치하다
코드 사본은 다음과 같습니다.
NPM ICONV-LITE 설치
동시에 웹 사이트가 차단되지 않도록 사용자 에이전트를 수정합니다.
코드 사본은 다음과 같습니다.
var originrequest = require ( 'request')
var iconv = require ( 'iconv-lite')
var 헤더 = {
'사용자 에이전트': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebkit/537.36 (Gecko와 같은 KHTML) Chrome/39.0.2171.65 Safari/537.36'
}
함수 요청 (URL, 콜백) {
var 옵션 = {
URL : URL,
인코딩 : NULL,
헤더 : 헤더
}
OriginRequest (옵션, 콜백)
}
요청 (url, function (err, res, body) {
var html = iconv.decode (body, 'gb2312')
Console.log (HTML)
})
멍청한 문제를 해결하십시오
cheatio를 사용하여 HTML을 구문 분석하십시오
Cheerio는 간단하고 대략 서버 측 JQuery 선택기로 이해 될 수 있습니다. 그것으로, 그것은 일반보다 훨씬 직관적입니다
설치하다
코드 사본은 다음과 같습니다.
NPM Cheeseio를 설치하십시오
요청 (url, function (err, res, body) {
var html = iconv.decode (body, 'gb2312')
var $ = Cheeseio.load (html)
console.log ($ ( 'h1'). text ())
console.log ($ ( 'h1'). html ())
})
출력은 다음과 같습니다
코드 사본은 다음과 같습니다.
네테 아스
네테 아스
문제는 $ ( 'h1')에 의한 코드 출력입니다. html ()는 유니 코드 인코딩되었으며 네레 아스는 네테 아스가되어 캐릭터 처리에 약간의 문제가 발생했습니다.
cheatio.html ()에서 "bridble"의 문제를 해결하십시오.
문서를 살펴보면 엔티티 인코딩을 변환하는 기능을 해제 할 수 있습니다.
코드 사본은 다음과 같습니다.
var $ = Cheeseio.load (html)
변경
코드 사본은 다음과 같습니다.
var $ = Cheeseio.load (html, {decodeentities : false})
맞습니다. 전체 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
var originrequest = require ( 'request')
var Cheeseio = 요구 사항 ( 'Cheerio')
var iconv = require ( 'iconv-lite')
var 헤더 = {
'사용자 에이전트': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebkit/537.36 (Gecko와 같은 KHTML) Chrome/39.0.2171.65 Safari/537.36'
}
함수 요청 (URL, 콜백) {
var 옵션 = {
URL : URL,
인코딩 : NULL,
헤더 : 헤더
}
OriginRequest (옵션, 콜백)
}
var url = 'http://www.163.com'
요청 (url, function (err, res, body) {
var html = iconv.decode (body, 'gb2312')
var $ = Cheeseio.load (html, {decodeentities : false})
console.log ($ ( 'h1'). text ())
console.log ($ ( 'h1'). html ())
})