>웹 프론트엔드 >JS 튜토리얼 >Node.js는 중국어 웹페이지의 잘못된 문제와 Solutions_node.js를 크롤링합니다.

Node.js는 중국어 웹페이지의 잘못된 문제와 Solutions_node.js를 크롤링합니다.

WBOY
WBOY원래의
2016-05-16 16:14:491873검색

Node.js가 utf-8이 아닌 중국어 웹 페이지를 크롤링하면 잘못된 문자가 나타납니다. 예를 들어 NetEase의 홈페이지 인코딩은 gb2312이고 크롤링할 때 잘못된 문자가 나타납니다.

코드 복사 코드는 다음과 같습니다.

var 요청 = require('요청')
var url = 'http://www.163.com'

request(url, function (err, res, body) {
console.log(본문)
})


iconv-lite를 사용하여 을 해결할 수 있습니다.

설치

코드 복사 코드는 다음과 같습니다.

npm 설치 iconv-lite

동시에 웹사이트가 차단되는 것을 방지하기 위해 사용자 에이전트를 수정해 보겠습니다.
코드 복사 코드는 다음과 같습니다.

var OriginRequest = require('요청')
var iconv = require('iconv-lite')
var 헤더 = {
'사용자 에이전트': 'Mozilla/5.0(Macintosh, Intel Mac OS) }
함수 요청(url, 콜백) {

var 옵션 = {
url: url,
인코딩: null,
헤더:헤더
}
OriginRequest(옵션, 콜백)
}

request(url, function (err, res, body) {

var html = iconv.decode(body, 'gb2312')
console.log(html)
})

깨진 코드 문제 해결

cherio를 사용하여 HTML 구문 분석

cheerio 는 간단하고 대략적으로 서버 측 jQuery 선택기로 이해될 수 있으며 이를 사용하면 정규 표현식보다 훨씬 직관적입니다

설치


코드 복사 코드는 다음과 같습니다.
npm install Cherio
request(url, function (err, res, body) {
var html = iconv.decode(body, 'gb2312')
var $ =cherio.load(html)
console.log($('h1').text())
console.log($('h1').html())
})

출력은 다음과 같습니다

코드 복사 코드는 다음과 같습니다.
넷이즈
넷이즈

그러면 $('h1').html()의 코드 출력이 유니코드로 인코딩되어 NetEase가 되어 문자 처리에 문제가 발생합니다.

cherio .html()의 "깨진" 문제 해결
엔터티 인코딩 변환 기능을 끌 수 있는지
문서를 확인하세요

코드 복사 코드는 다음과 같습니다.
var $ =cherio.load(html)


로 변경
코드 복사 코드는 다음과 같습니다.
var $ = cheatio.load(html, {decodeEntities: false})

이상, 전체 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

var OriginRequest = require('request') 
var Cherio = require('cheerio') 
var iconv = require('iconv-lite') 
var 헤더 = { 
  '사용자 에이전트': 'Mozilla/5.0(Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36(KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36'
}

함수 요청(URL, 콜백) { 
  var 옵션 = {
    url: url,
    인코딩: null,
    헤더:헤더
  }
  OriginRequest(옵션, 콜백)
}

var url = 'http://www.163.com'

request(url, function (err, res, body) { 
    var html = iconv.decode(body, 'gb2312')
    var $ = cheatio.load(html, {decodeEntities: false})
    console.log($('h1').text())
    console.log($('h1').html())
})

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.