成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關(guān)于使用cheerio抓取一個(gè)網(wǎng)頁(yè)遇見的問題以及解決的過程

hedge_hog / 3620人閱讀

摘要:這樣嘗試了之后,網(wǎng)頁(yè)中文編碼的問題會(huì)解決大部分,但是有的地方還是存在中文亂碼這樣的問題主要是我在進(jìn)行了轉(zhuǎn)碼成之后沒有將新插入后的頁(yè)面轉(zhuǎn)碼到初始狀態(tài),一旦被瀏覽器下載之后瀏覽器會(huì)無(wú)法識(shí)別部分的編碼從而導(dǎo)致一部分編碼。

最近做開發(fā)有一個(gè)需求需要用cheerio抓取一個(gè)網(wǎng)頁(yè),然后將一段js腳本插入到標(biāo)簽的末尾。然后還要保證瀏覽器運(yùn)行正?!,F(xiàn)在把這些遇見過的問題記錄一下。
這里面就存在一個(gè)問題就是 :

Node.js默認(rèn)是不支持utf-8編碼的,所以抓取非 utf-8 的中文網(wǎng)頁(yè)時(shí)會(huì)出現(xiàn)亂碼問題,比如網(wǎng)易的首頁(yè)編碼是 gb2312,抓取時(shí)會(huì)出現(xiàn)亂碼,百度下眾大佬們的看法都是使用icon-lite 進(jìn)行轉(zhuǎn)碼(有興趣可以自行百度cheerio中文亂碼)。(只是他們說的情況跟我這邊還不太一樣。我需要將網(wǎng)頁(yè)返還給瀏覽器)。然后我就開始動(dòng)手試了一下。思路大概是這樣的:獲取代理層將請(qǐng)求回來(lái)的html請(qǐng)求頭header中的content-type 來(lái)判斷這個(gè)網(wǎng)頁(yè)的編碼方式。然后使用iconv.decode將其進(jìn)行相應(yīng)的轉(zhuǎn)碼然后在做js替換。但是這樣的話是有漏洞的,如下圖


有的網(wǎng)站開發(fā)規(guī)范性不夠甚至在content-type 連網(wǎng)頁(yè)的編碼方式都不去聲明。所以這條路是不通的只能通過抓取標(biāo)簽來(lái)確定網(wǎng)頁(yè)相應(yīng)的編碼進(jìn)而轉(zhuǎn)碼。

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)頁(yè)中文編碼的問題會(huì)解決大部分,但是有的地方還是存在中文亂碼


這樣的問題主要是我在node進(jìn)行了轉(zhuǎn)碼成gbk之后沒有將新插入后的頁(yè)面轉(zhuǎn)碼到初始狀態(tài),一旦被瀏覽器下載之后瀏覽器會(huì)無(wú)法識(shí)別部分js xhr的編碼從而導(dǎo)致一部分編碼。所以

newDataStr=iconv.encode($.html(), charset); 將其返回到最初的編碼方式就可以了

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88979.html

相關(guān)文章

  • 分分鐘教你用node.js寫個(gè)爬蟲

    摘要:爬蟲介紹二爬蟲的分類通用網(wǎng)絡(luò)爬蟲全網(wǎng)爬蟲爬行對(duì)象從一些種子擴(kuò)充到整個(gè),主要為門戶站點(diǎn)搜索引擎和大型服務(wù)提供商采集數(shù)據(jù)。 分分鐘教你用node.js寫個(gè)爬蟲 寫在前面 十分感謝大家的點(diǎn)贊和關(guān)注。其實(shí),這是我第一次在segmentfault上寫文章。因?yàn)槲乙彩乔岸螘r(shí)間偶然之間才開始了解和學(xué)習(xí)爬蟲,而且學(xué)習(xí)node的時(shí)間也不是很長(zhǎng)。雖然用node做過一些后端的項(xiàng)目,但其實(shí)在node和爬蟲方面...

    fanux 評(píng)論0 收藏0
  • node爬蟲 抓取網(wǎng)頁(yè)實(shí)現(xiàn)

    摘要:一前言一直感覺爬蟲是個(gè)挺高端的東西大數(shù)據(jù)時(shí)代爬蟲顯得尤為重要。 一、前言 一直感覺爬蟲是個(gè)挺高端的東西 大數(shù)據(jù)時(shí)代 爬蟲顯得尤為重要。經(jīng)過一番探索,終于用node實(shí)現(xiàn)了這個(gè)功能,還包括對(duì)抓取內(nèi)容的解析 二、正文 1、首先搭建一個(gè)http服務(wù),這里使用我們熟悉的koa(這個(gè)是非必須的 你也可以使用純node去抓 這里主要為了方便交互、看效果或者給非技術(shù)人員使用方便)服務(wù)端 index.j...

    alighters 評(píng)論0 收藏0
  • 使用 node 抓取網(wǎng)頁(yè)圖片

    摘要:使用抓取網(wǎng)頁(yè)圖片的使用非常廣泛,可以做通信,做爬蟲,甚至可以做桌面應(yīng)用程序。今天就利用閑暇時(shí)間寫個(gè)小小的分享利用爬取百度圖片首頁(yè)的圖片。 使用 node 抓取網(wǎng)頁(yè)圖片 node 的使用非常廣泛,可以做通信,做爬蟲,甚至可以做桌面應(yīng)用程序。 今天就利用閑暇時(shí)間寫個(gè)小小的分享:利用 node 爬取百度圖片首頁(yè)的圖片。 對(duì),就是中間那幾張: showImg(https://segmentfa...

    genedna 評(píng)論0 收藏0
  • Nodejs爬蟲--抓取豆瓣電影網(wǎng)頁(yè)數(shù)據(jù)(下)

    摘要:接著上篇爬蟲抓取豆瓣電影網(wǎng)頁(yè)數(shù)據(jù)上本篇主要描述將上次抓取的數(shù)據(jù)存入數(shù)據(jù)庫(kù)前提百度或谷歌的安裝教程,安裝本地并成功運(yùn)行推薦一款數(shù)據(jù)庫(kù)可視化管理工具。 接著上篇 Nodejs爬蟲--抓取豆瓣電影網(wǎng)頁(yè)數(shù)據(jù)(上) 本篇主要描述將上次抓取的數(shù)據(jù)存入mongodb數(shù)據(jù)庫(kù) 前提:百度或谷歌mongodb的安裝教程,安裝本地并成功運(yùn)行 推薦一款mongodb數(shù)據(jù)庫(kù)可視化管理工具:Robomongo...

    legendaryedu 評(píng)論0 收藏0
  • Nodejs爬蟲--抓取豆瓣電影網(wǎng)頁(yè)數(shù)據(jù)(下)

    摘要:接著上篇爬蟲抓取豆瓣電影網(wǎng)頁(yè)數(shù)據(jù)上本篇主要描述將上次抓取的數(shù)據(jù)存入數(shù)據(jù)庫(kù)前提百度或谷歌的安裝教程,安裝本地并成功運(yùn)行推薦一款數(shù)據(jù)庫(kù)可視化管理工具。 接著上篇 Nodejs爬蟲--抓取豆瓣電影網(wǎng)頁(yè)數(shù)據(jù)(上) 本篇主要描述將上次抓取的數(shù)據(jù)存入mongodb數(shù)據(jù)庫(kù) 前提:百度或谷歌mongodb的安裝教程,安裝本地并成功運(yùn)行 推薦一款mongodb數(shù)據(jù)庫(kù)可視化管理工具:Robomongo...

    techstay 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<