У Node.js будут искаженные проблемы с кодом, когда ползают китайские веб-страницы, которые не являются UTF-8. Например, кодирование домашней страницы Netease - GB2312, а искаженные коды будут иметь искаженные коды при ползании.
Кода -копия выглядит следующим образом:
var request = require ('request')
var url = 'http://www.163.com'
запрос (url, function (err, res, body) {
Консоль.log (тело)
})
Вы можете использовать iconv-lite, чтобы решить его
Установить
Кода -копия выглядит следующим образом:
NPM Установите ICONV-LITE
В то же время мы изменим пользовательский агент, чтобы предотвратить блокировку веб-сайта:
Кода -копия выглядит следующим образом:
var OriginRequest = require ('запрос')
var iconv = require ('iconv-lite')
var headers = {
«Пользовательский агент»: 'Mozilla/5.0 (Macintosh; Intel Mac OS x 10_10_1) AppleWebkit/537.36 (khtml, как гекко) Chrome/39.0.2171.65 Safari/537,36'
}
запрос функции (url, обратный вызов) {
var options = {
URL: URL,
кодирование: null,
Заголовки: заголовки
}
OriginRequest (опции, обратный вызов)
}
запрос (url, function (err, res, body) {
var html = iconv.decode (тело, 'GB2312')
Console.log (html)
})
Решить искаженную проблему
Используйте Cheatio для анализа HTML
Cheerio может быть просто и грубо понят как селектор jQuery на стороне сервера. С ним это гораздо более интуитивно понятно, чем обычные
Установить
Кода -копия выглядит следующим образом:
NPM Установите Cheeseio
запрос (url, function (err, res, body) {
var html = iconv.decode (тело, 'GB2312')
var $ = cheese.load (html)
console.log ($ ('h1'). Text ())
console.log ($ ('h1'). html ())
})
Вывод выглядит следующим образом
Кода -копия выглядит следующим образом:
Netease
Netease
Таким образом, вопрос в том, что вывод кода по $ ('H1'). HTML () кодируется Unicode, а Netease стал Netease, что вызвало некоторые проблемы в нашей обработке персонажей.
Решите проблему «искаженного» в creatio.html ()
Глядя на документацию, вы можете отключить функцию преобразования кодировки сущностей.
Кода -копия выглядит следующим образом:
var $ = cheese.load (html)
Изменить на
Кода -копия выглядит следующим образом:
var $ = cheese.load (html, {decodeentities: false})
Правильно, полный код заключается в следующем:
Кода -копия выглядит следующим образом:
var OriginRequest = require ('запрос')
var cheeseio = require ('cheerio')
var iconv = require ('iconv-lite')
var headers = {
«Пользовательский агент»: 'Mozilla/5.0 (Macintosh; Intel Mac OS x 10_10_1) AppleWebkit/537.36 (khtml, как гекко) Chrome/39.0.2171.65 Safari/537,36'
}
запрос функции (url, обратный вызов) {
var options = {
URL: URL,
кодирование: null,
Заголовки: заголовки
}
OriginRequest (опции, обратный вызов)
}
var url = 'http://www.163.com'
запрос (url, function (err, res, body) {
var html = iconv.decode (тело, 'GB2312')
var $ = cheese.load (html, {decodeentities: false})
console.log ($ ('h1'). Text ())
console.log ($ ('h1'). html ())
})