Node.js tendrá problemas de código confuso al rastrear páginas web chinas que no son UTF-8. Por ejemplo, la codificación de la página de inicio de NetEase es GB2312, y los códigos confusos tendrán códigos confusos cuando se arrastren.
La copia del código es la siguiente:
solicitud var = requirir ('solicitud')
var url = 'http://www.163.com'
Solicitud (URL, function (err, res, cuerpo) {
console.log (cuerpo)
})
Puedes usar iconv-lite para resolverlo
Instalar
La copia del código es la siguiente:
NPM Instalar iconv-lite
Al mismo tiempo, modificaremos el agente de usuario para evitar que el sitio web bloquee:
La copia del código es la siguiente:
var originRequest = requirir ('requirir')
var iconv = require ('iconvv-lite')
encabezados var = {
'User-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebkit/537.36 (khtml, como gecko) Chrome/39.0.2171.65 Safari/537.36'
}
solicitud de función (url, devolución de llamada) {
opciones var = {
URL: URL,
codificación: nulo,
encabezados: encabezados
}
OriginRequest (opciones, devolución de llamada)
}
Solicitud (URL, function (err, res, cuerpo) {
var html = iconv.decode (cuerpo, 'GB2312')
console.log (html)
})
Resuelve el problema confuso
Use truco para analizar html
Cheerio se puede entender simple y aproximadamente como un selector de jQuery del lado del servidor. Con él, es mucho más intuitivo que regular
Instalar
La copia del código es la siguiente:
NPM Instalar CheeseOO
Solicitud (URL, function (err, res, cuerpo) {
var html = iconv.decode (cuerpo, 'GB2312')
Var $ = Cheese.Load (HTML)
console.log ($ ('H1'). Text ())
console.log ($ ('h1'). html ())
})
La salida es la siguiente
La copia del código es la siguiente:
Nucose
Nucose
Entonces, la pregunta es que la salida del código por $ ('H1'). Html () está codificada por Unicode, y NetEase se ha convertido en NetEase, lo que ha causado algunos problemas en el procesamiento de nuestros personajes.
Resuelve el problema de "confundido" en truco.html ()
Mirando la documentación, puede desactivar la función de convertir la codificación de entidad.
La copia del código es la siguiente:
Var $ = Cheese.Load (HTML)
Cambiar
La copia del código es la siguiente:
var $ = quese.load (html, {decodeentities: false})
Así es, el código completo es el siguiente:
La copia del código es la siguiente:
var originRequest = requirir ('requirir')
var queseusio = requirir ('Cheerio')
var iconv = require ('iconvv-lite')
encabezados var = {
'User-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebkit/537.36 (khtml, como gecko) Chrome/39.0.2171.65 Safari/537.36'
}
solicitud de función (url, devolución de llamada) {
opciones var = {
URL: URL,
codificación: nulo,
encabezados: encabezados
}
OriginRequest (opciones, devolución de llamada)
}
var url = 'http://www.163.com'
Solicitud (URL, function (err, res, cuerpo) {
var html = iconv.decode (cuerpo, 'GB2312')
var $ = quese.load (html, {decodeentities: false})
console.log ($ ('H1'). Text ())
console.log ($ ('h1'). html ())
})