獲取初始頁(yè)面的內(nèi)容

我們之前說(shuō)過(guò)了,我們先從單任務(wù)版開始進(jìn)行。蕾管。。。。
這里我們先給單任務(wù)版爬蟲定一個(gè)小目標(biāo)

  • 獲取并打印所在城市第一頁(yè)用戶的詳細(xì)信息
stevendeAir:js_crawler steven$ pwd
/Users/steven/learngo/src/learn/js_crawler
stevendeAir:js_crawler steven$ ls
main.go

我們首先給這個(gè)項(xiàng)目建一個(gè)文件夾,名字為js_crawler,之后建了一個(gè)main.go文件

// main.go
package main

import (
    "net/http"
    "io/ioutil"
    "fmt"
)

func main() {
    // 首先我們使用get請(qǐng)求这刷,拿到響應(yīng)的結(jié)果resp
    resp, err := http.Get(
        "http://www.zhenai.com/zhenghun")
    // 對(duì)錯(cuò)誤的處理,go就是這么處理的不像其他的語(yǔ)言應(yīng)try
    if err != nil{
        panic(err)
    }
    // 請(qǐng)求完成以后我們需要把這個(gè)流關(guān)上
    defer resp.Body.Close()
    // 如果請(qǐng)求不是200我們把狀態(tài)碼打出來(lái)
    if resp.StatusCode != http.StatusOK{
        fmt.Println("Error: Status code",
            resp.StatusCode)
        return
    }
    // 讀取Body里面的內(nèi)容
    all, err := ioutil.ReadAll(resp.Body)
    if err != nil{
        panic(err)
    }
    fmt.Printf("%s\n", all)
}

first_page.png

很好,我們的頁(yè)面打印出來(lái)了但是我們發(fā)現(xiàn)它是亂碼啼县,這個(gè)是為什么呢?應(yīng)該怎么辦呢窑睁?
這是因?yàn)镚o語(yǔ)言都是utf8編碼吓著,但是我們這個(gè)網(wǎng)頁(yè)的是gbk編碼所以就出現(xiàn)了亂碼惕耕,沒(méi)關(guān)系我們解決它挤安。剿干。撰洗。。
我們只需要把gbk轉(zhuǎn)成utf8就可以了,這里我們需要下載兩個(gè)包看下面

stevendeAir:js_crawler steven$ gopm get -g -v golang.org/x/text
[GOPM] 05-27 12:14:41 [ INFO] App Version: 0.8.8.0307 Beta
[GOPM] 05-27 12:14:41 [ INFO] Local repository path: /Users/steven/.gopm/repos
[GOPM] 05-27 12:14:41 [ INFO] Indicated GOPATH: /Users/steven/learngo
[GOPM] 05-27 12:14:41 [ INFO] /Users/steven/.gopm/repos/golang.org/x/text
[GOPM] 05-27 12:14:41 [DEBUG] Skipped installed package: golang.org/x/text@branch:<UTD>
[GOPM] 05-27 12:14:41 [ WARN] Package in GOPATH has version control: golang.org/x/text
[GOPM] 05-27 12:14:41 [ INFO] 0 package(s) downloaded, 0 failed
它說(shuō)Skipped installed package西轩,這說(shuō)明我已經(jīng)安裝過(guò)了注服,現(xiàn)在可以直接使用了

我們把之前的resp.Body改成轉(zhuǎn)碼以后的就可以了

    utf8Reader := transform.NewReader(
        resp.Body, simplifiedchinese.GBK.NewDecoder())
    
    // 讀取Body里面的內(nèi)容
    all, err := ioutil.ReadAll(utf8Reader)
gbk_solve.png

ok,到此呢我們的問(wèn)題解決了苇本,但是呢這么做并不通用裳凸,因?yàn)橐院笪覀兛赡軙?huì)有其它的編碼也會(huì)出現(xiàn)亂碼梦湘,那么怎么才能通用呢倦逐,我們可以去獲取網(wǎng)頁(yè)上面的charset然后轉(zhuǎn)成utf8是不是就可以了呢?其實(shí)有時(shí)候會(huì)有變態(tài)的網(wǎng)頁(yè)連meta也沒(méi)有我們?cè)趺醋瞿兀科鋵?shí)這里我們用到了Go語(yǔ)言的一個(gè)包可以直接獲取網(wǎng)頁(yè)的編碼看下面筑辨。楚昭。。。

stevendeAir:js_crawler steven$ gopm get -g -v golang.org/x/net/html
[GOPM] 05-27 12:23:05 [ INFO] App Version: 0.8.8.0307 Beta
[GOPM] 05-27 12:23:05 [ INFO] Local repository path: /Users/steven/.gopm/repos
[GOPM] 05-27 12:23:05 [ INFO] Indicated GOPATH: /Users/steven/learngo
[GOPM] 05-27 12:23:05 [ INFO] /Users/steven/.gopm/repos/golang.org/x/net
[GOPM] 05-27 12:23:05 [DEBUG] Skipped installed package: golang.org/x/net/html@branch:<UTD>
同樣的我也安裝好了珍促,直接用一把。。
// 定義一個(gè)解析的函數(shù)
func determineEncoding(r io.Reader) encoding.Encoding{
        // 我們可以把它放到Peek里面下回繼續(xù)讀
        // 如果我們不用Peek,它讀完1024以后就不會(huì)在讀這1024個(gè)字節(jié)了
        // Peek 返回緩存的一個(gè)切片带膀,該切片引用緩存中前 n 字節(jié)數(shù)據(jù)
        bytes, err := bufio.NewReader(r).Peek(1024)
        if err != nil{
            panic(err)
        }
        e, _, _ := charset.DetermineEncoding(bytes, "")
        return e
}

然后把上面的resp.Body處理一下喂击。。。。

e := determineEncoding(resp.Body)
utf8Reader := transform.NewReader(
    resp.Body, e.NewDecoder())

為了讓大家可以清楚的看到我的目錄結(jié)構(gòu)润绎,我會(huì)在代碼的上面放上這段代碼所在的文件位置,方便你的查看巡李。比如說(shuō)上面這段代碼在main.go文件里面,在開發(fā)的過(guò)程中我也會(huì)把代碼層次結(jié)構(gòu)發(fā)給大家与涡,不用擔(dān)心跟不上。恳守。。蛮寂。骄恶。你真實(shí)寫代碼的時(shí)候,上面的main.go就不需要加了:瞿酢8猜摹!竞慢!
怎么樣這一節(jié)看完了,你跟著操作了嘛沟饥,成功了嘛!P谧濉J匚省K砸恰!相种!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市镀岛,隨后出現(xiàn)的幾起案子椭豫,更是在濱河造成了極大的恐慌,老刑警劉巖低淡,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異戒傻,居然都是意外死亡不翩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門烁试,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)雇初,“玉大人减响,你說(shuō)我怎么就攤上這事≈荆” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵颂鸿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嘴纺,道長(zhǎng),這世上最難降的妖魔是什么栽渴? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮熔萧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佛致。我一直安慰自己,他們只是感情好俺榆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罐脊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪萍桌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天恃逻,我揣著相機(jī)與錄音,去河邊找鬼寇损。 笑死凸郑,一個(gè)胖子當(dāng)著我的面吹牛矛市,可吹牛的內(nèi)容都是我干的芙沥。 我是一名探鬼主播浊吏,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卿捎!你這毒婦竟也來(lái)了径密?” 一聲冷哼從身側(cè)響起午阵,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤享扔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后惧眠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氛魁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捶码。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惫恼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祈纯,到底是詐尸還是另有隱情,我是刑警寧澤叼耙,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站筛婉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拦惋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一安寺、第九天 我趴在偏房一處隱蔽的房頂上張望厕妖。 院中可真熱鬧挑庶,春花似錦言秸、人聲如沸迎捺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至岖瑰,卻和暖如春叛买,著一層夾襖步出監(jiān)牢的瞬間蹋订,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工露戒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人智什。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像撩鹿,于是被迫代替她去往敵國(guó)和親谦炬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子节沦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 可以看我的博客 lmwen.top 或者訂閱我的公眾號(hào) 簡(jiǎn)介有稍微接觸python的人就會(huì)知道,python中...
    ayuLiao閱讀 3,094評(píng)論 1 5
  • 編碼問(wèn)題一直困擾著開發(fā)人員吼鳞,尤其在 Java 中更加明顯,因?yàn)?Java 是跨平臺(tái)語(yǔ)言叫搁,不同平臺(tái)之間編碼之間的切換...
    x360閱讀 2,465評(píng)論 1 20
  • 前段時(shí)間公司內(nèi)部博客上凱哥分享了一篇關(guān)于mysql字符集編碼的文章,之前我對(duì)mysql字符集一塊基本沒(méi)有深究過(guò),看...
    __七把刀__閱讀 6,413評(píng)論 14 18
  • 有時(shí)候總以為自己還有揮霍的能力,卻忽略了揮霍的資本疾党。 傍晚剛回到家音诫,就接到老媽的電話雪位,讓我回家吃飯去竭钝,說(shuō)是...
    拾荒軸閱讀 156評(píng)論 0 0
  • 一級(jí)標(biāo)題 二級(jí)標(biāo)題 三級(jí)標(biāo)題 有序列表 1.文本2.文本3.文本 無(wú)序列表 java php c++ 超級(jí)連接 百...
    蛋炒飯_By閱讀 153評(píng)論 0 0