O Node.js terá problemas de código iluminados ao rastrear páginas da web chinesas que não são UTF-8. Por exemplo, a codificação da página inicial da NetEase é GB2312, e os códigos ilegais terão códigos ilegais quando se rastreavam.
A cópia do código é a seguinte:
Var Request = requer ('solicitação')
var url = http://www.163.com '
solicitação (url, function (err, res, corpo) {
console.log (corpo)
})
Você pode usar o iconv-lite para resolvê-lo
Instalar
A cópia do código é a seguinte:
NPM Instale o iconv-lite
Ao mesmo tempo, modificaremos o agente do usuário para impedir que o site bloqueie:
A cópia do código é a seguinte:
var origeRequest = requer ('solicitação')
var iconv = requer ('iconv-lite')
VAR cabeçalhos = {
'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'
}
Solicitação de função (URL, retorno de chamada) {
var options = {
URL: URL,
codificação: nulo,
Cabeçalhos: cabeçalhos
}
OriginRequest (opções, retorno de chamada)
}
solicitação (url, function (err, res, corpo) {
var html = iconv.decode (corpo, 'gb2312')
console.log (html)
})
Resolva o problema ilegível
Use Cheatio para analisar html
O Cheerio pode ser simples e aproximadamente compreendido como um seletor de jQuery do lado do servidor. Com ele, é muito mais intuitivo do que regular
Instalar
A cópia do código é a seguinte:
NPM Instale o queijo
solicitação (url, function (err, res, corpo) {
var html = iconv.decode (corpo, 'gb2312')
var $ = Cheeseio.load (html)
console.log ($ ('h1'). text ())
console.log ($ ('h1'). html ())
})
A saída é a seguinte
A cópia do código é a seguinte:
NETEASE
NETEASE
Portanto, a questão é que a saída de código por $ ('H1'). HTML () é codificada Unicode e a NetEase se tornou o NetEase, o que causou alguns problemas em nosso processamento de caráter.
Resolva o problema de "iluminado" em Cheatio.html ()
Olhando para a documentação, você pode desativar a função de converter a codificação da entidade.
A cópia do código é a seguinte:
var $ = Cheeseio.load (html)
Mudar para
A cópia do código é a seguinte:
var $ = Cheeseio.load (html, {decodeentidades: false})
É isso mesmo, o código completo é o seguinte:
A cópia do código é a seguinte:
var origeRequest = requer ('solicitação')
Var Cheeseio = requer ('Cheerio')
var iconv = requer ('iconv-lite')
VAR cabeçalhos = {
'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'
}
Solicitação de função (URL, retorno de chamada) {
var options = {
URL: URL,
codificação: nulo,
Cabeçalhos: cabeçalhos
}
OriginRequest (opções, retorno de chamada)
}
var url = http://www.163.com '
solicitação (url, function (err, res, corpo) {
var html = iconv.decode (corpo, 'gb2312')
var $ = Cheeseio.load (html, {decodeentidades: false})
console.log ($ ('h1'). text ())
console.log ($ ('h1'). html ())
})