摘要:這樣嘗試了之后,網(wǎng)頁中文編碼的問題會解決大部分,但是有的地方還是存在中文亂碼這樣的問題主要是我在進行了轉碼成之后沒有將新插入后的頁面轉碼到初始狀態(tài),一旦被瀏覽器下載之后瀏覽器會無法識別部分的編碼從而導致一部分編碼。
最近做開發(fā)有一個需求需要用cheerio抓取一個網(wǎng)頁,然后將一段js腳本插入到
標簽的末尾。然后還要保證瀏覽器運行正?!,F(xiàn)在把這些遇見過的問題記錄一下。Node.js默認是不支持utf-8編碼的,所以抓取非 utf-8 的中文網(wǎng)頁時會出現(xiàn)亂碼問題,比如網(wǎng)易的首頁編碼是 gb2312,抓取時會出現(xiàn)亂碼,百度下眾大佬們的看法都是使用icon-lite 進行轉碼(有興趣可以自行百度cheerio中文亂碼)。(只是他們說的情況跟我這邊還不太一樣。我需要將網(wǎng)頁返還給瀏覽器)。然后我就開始動手試了一下。思路大概是這樣的:獲取代理層將請求回來的html請求頭header中的content-type 來判斷這個網(wǎng)頁的編碼方式。然后使用iconv.decode將其進行相應的轉碼然后在做js替換。但是這樣的話是有漏洞的,如下圖
有的網(wǎng)站開發(fā)規(guī)范性不夠甚至在content-type 連網(wǎng)頁的編碼方式都不去聲明。所以這條路是不通的只能通過抓取標簽來確定網(wǎng)頁相應的編碼進而轉碼。
var newDataStr = ""; var charset="utf-8"; var arr=responseDetail.response.body.toString().match(/]*?)>/g); if(arr){ arr.forEach(function(val){ var match=val.match(/charsets*=s*(.+)"/); if(match && match[1]){ if(match[1].substr(0,1)==""")match[1]=match[1].substr(1); charset=match[1].trim(); return false; } }) } var html = iconv.decode(responseDetail.response.body, charset); // var html = responseDetail.response.body.toString(); var $ = cheerio.load(html); responseDetail.response.body = newDataStr; return {response: responseDetail.response}
這樣嘗試了之后,網(wǎng)頁中文編碼的問題會解決大部分,但是有的地方還是存在中文亂碼
這樣的問題主要是我在node進行了轉碼成gbk之后沒有將新插入后的頁面轉碼到初始狀態(tài),一旦被瀏覽器下載之后瀏覽器會無法識別部分js xhr的編碼從而導致一部分編碼。所以
newDataStr=iconv.encode($.html(), charset); 將其返回到最初的編碼方式就可以了
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/88979.html
摘要:爬蟲介紹二爬蟲的分類通用網(wǎng)絡爬蟲全網(wǎng)爬蟲爬行對象從一些種子擴充到整個,主要為門戶站點搜索引擎和大型服務提供商采集數(shù)據(jù)。 分分鐘教你用node.js寫個爬蟲 寫在前面 十分感謝大家的點贊和關注。其實,這是我第一次在segmentfault上寫文章。因為我也是前段時間偶然之間才開始了解和學習爬蟲,而且學習node的時間也不是很長。雖然用node做過一些后端的項目,但其實在node和爬蟲方面...
摘要:一前言一直感覺爬蟲是個挺高端的東西大數(shù)據(jù)時代爬蟲顯得尤為重要。 一、前言 一直感覺爬蟲是個挺高端的東西 大數(shù)據(jù)時代 爬蟲顯得尤為重要。經(jīng)過一番探索,終于用node實現(xiàn)了這個功能,還包括對抓取內容的解析 二、正文 1、首先搭建一個http服務,這里使用我們熟悉的koa(這個是非必須的 你也可以使用純node去抓 這里主要為了方便交互、看效果或者給非技術人員使用方便)服務端 index.j...
摘要:使用抓取網(wǎng)頁圖片的使用非常廣泛,可以做通信,做爬蟲,甚至可以做桌面應用程序。今天就利用閑暇時間寫個小小的分享利用爬取百度圖片首頁的圖片。 使用 node 抓取網(wǎng)頁圖片 node 的使用非常廣泛,可以做通信,做爬蟲,甚至可以做桌面應用程序。 今天就利用閑暇時間寫個小小的分享:利用 node 爬取百度圖片首頁的圖片。 對,就是中間那幾張: showImg(https://segmentfa...
摘要:接著上篇爬蟲抓取豆瓣電影網(wǎng)頁數(shù)據(jù)上本篇主要描述將上次抓取的數(shù)據(jù)存入數(shù)據(jù)庫前提百度或谷歌的安裝教程,安裝本地并成功運行推薦一款數(shù)據(jù)庫可視化管理工具。 接著上篇 Nodejs爬蟲--抓取豆瓣電影網(wǎng)頁數(shù)據(jù)(上) 本篇主要描述將上次抓取的數(shù)據(jù)存入mongodb數(shù)據(jù)庫 前提:百度或谷歌mongodb的安裝教程,安裝本地并成功運行 推薦一款mongodb數(shù)據(jù)庫可視化管理工具:Robomongo...
摘要:接著上篇爬蟲抓取豆瓣電影網(wǎng)頁數(shù)據(jù)上本篇主要描述將上次抓取的數(shù)據(jù)存入數(shù)據(jù)庫前提百度或谷歌的安裝教程,安裝本地并成功運行推薦一款數(shù)據(jù)庫可視化管理工具。 接著上篇 Nodejs爬蟲--抓取豆瓣電影網(wǎng)頁數(shù)據(jù)(上) 本篇主要描述將上次抓取的數(shù)據(jù)存入mongodb數(shù)據(jù)庫 前提:百度或谷歌mongodb的安裝教程,安裝本地并成功運行 推薦一款mongodb數(shù)據(jù)庫可視化管理工具:Robomongo...
閱讀 4845·2021-09-22 16:06
閱讀 2149·2021-09-22 15:22
閱讀 1490·2019-08-30 15:54
閱讀 2569·2019-08-30 15:44
閱讀 2404·2019-08-29 16:31
閱讀 2068·2019-08-29 16:26
閱讀 2396·2019-08-29 12:41
閱讀 804·2019-08-29 12:22