用go語言爬取珍愛網 | 第一回
我們來用go語言爬取“珍愛網”使用者資訊。
首先分析到請求url為:
http://www.zhenai.com/zhenghun
接下來用go請求該url,程式碼如下:
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { //返送請求獲取返回結果 resp, err := http.Get("http://www.zhenai.com/zhenghun") if err != nil { panic(fmt.Errorf("Error: http Get, err is %v\n", err)) } //關閉response body defer resp.Body.Close() if resp.StatusCode != http.StatusOK { fmt.Println("Error: statuscode is ", resp.StatusCode) return } body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("Error read body, error is ", err) } //列印返回值 fmt.Println("body is ", string(body)) }
執行後會發現返回體裡有很多亂碼:
在返回體裡可以找到 即編碼為gbk,而go預設編碼為utf-8,所以就會出現亂碼。接下來用第三方庫將其編碼格式轉為utf-8。
由於訪問golang.org/x/text需要梯子,不然報錯:
所以在github上下載:
mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/text.git
然後將gbk編碼轉換為utf-8,需要修改程式碼如下:
utf8Reader := transform.NewReader(resp.Body, simplifiedchinese.GBK.NewDecoder()) body, err := ioutil.ReadAll(utf8Reader)
考慮到通用性,返回的編碼格式不一定是gbk,所以需要對實際編碼做判斷,然後將判斷結果轉為utf-8,需要用到第三方庫golang.org/x/net/html,同樣的在github上下載:
mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/net
那麼程式碼就變成這樣:
package main import ( "fmt" "io/ioutil" "net/http" "golang.org/x/text/transform" //"golang.org/x/text/encoding/simplifiedchinese" "io" "golang.org/x/text/encoding" "bufio" "golang.org/x/net/html/charset" ) func main() { //返送請求獲取返回結果 resp, err := http.Get("http://www.zhenai.com/zhenghun") if err != nil { panic(fmt.Errorf("Error: http Get, err is %v\n", err)) } //關閉response body defer resp.Body.Close() if resp.StatusCode != http.StatusOK { fmt.Println("Error: statuscode is ", resp.StatusCode) return } //utf8Reader := transform.NewReader(resp.Body, simplifiedchinese.GBK.NewDecoder()) utf8Reader := transform.NewReader(resp.Body, determinEncoding(resp.Body).NewDecoder()) body, err := ioutil.ReadAll(utf8Reader) if err != nil { fmt.Println("Error read body, error is ", err) } //列印返回值 fmt.Println("body is ", string(body)) } func determinEncoding(r io.Reader) encoding.Encoding { //這裡的r讀取完得保證resp.Body還可讀 body, err := bufio.NewReader(r).Peek(1024) if err != nil { fmt.Println("Error: peek 1024 byte of body err is ", err) } //這裡簡化,不取是否確認 e, _, _ := charset.DetermineEncoding(body, "") return e }
執行後就看不到亂碼了:
今天先爬到這裡,明天將提取返回體中的地址URL和城市,下一節見。
本公眾號免費提供csdn下載服務,海量IT學習資源,如果你準備入IT坑,勵志成為優秀的程式猿,那麼這些資源很適合你,包括但不限於java、go、python、springcloud、elk、嵌入式 、大資料、面試資料、前端 等資源。同時我們組建了一個技術交流群,裡面有很多大佬,會不定時分享技術文章,如果你想來一起學習提高,可以公眾號後臺回覆【2】,免費邀請加技術交流群互相學習提高,會不定期分享程式設計IT相關資源。
掃碼關注,精彩內容第一時間推給你
相關推薦
用go語言爬取珍愛網 | 第一回
我們來用go語言爬取“珍愛網”使用者資訊。 首先分析到請求url為: http://www.zhenai.com/zhenghun 接下來用go請求該url,程式碼如下: package main import ( "fmt" "io/ioutil" &
用go語言爬取珍愛網 | 第二回
昨天我們一起爬取珍愛網首頁,拿到了城市列表頁面,接下來在返回體城市列表中提取城市和url,即下圖中的a標籤裡的href的值和innerText值。 提取a標籤,可以通過CSS選擇器來選擇,如下: $('#cityList>dd>a');就可以獲取到470個a標籤: 這裡只提供一個思
用go語言爬取珍愛網 | 第三回
前兩節我們獲取到了城市的URL和城市名,今天我們來解析使用者資訊。 用go語言爬取珍愛網 | 第一回 用go語言爬取珍愛網 | 第二回 爬蟲的演算法: 我們要提取返回體中的城市列表,需要用到城市列表解析器; 需要把每個城市裡的所有使用者解析出來,需要用到城市解析器; 還需要把每個使用者的個人資訊解析出來,
爬取珍愛網後用戶資訊展示
golang爬取珍愛網,爬到了3萬多使用者資訊,並存到了elasticsearch中,如下圖,查詢到了3萬多使用者資訊。 先來看看最終效果: 利用到了go語言的html模板庫: 執行模板渲染: func (s SearchResultView) Render (w io.Writer, data mo
go語言爬取椎名真白
regexp highlight defer reg write rul png span link 單任務版: package main import ( "net/http" "regexp" "io/ioutil" "os" "strconv" "ti
go 語言爬取百度貼吧中的內容
涉及到的知識點有 通道chan ,切片的使用 ,os,http 包的使用 package main import ( "fmt" "net/http" "os" "strconv" ) func pachong(start, end int) { //明確爬的地址 url :=
【go語言爬蟲】go語言爬取豆瓣電影top250
抓取欄位:電影名稱、評分、評價人數 二、執行: 正在抓取第0頁…… 肖申克的救贖 9.6 824764人 這個殺手不太冷 9.4 791399人 霸王別姬 9.5 589028人 阿甘正傳 9.4 678850人 美麗人生 9.5 3940
用crawl spider爬取起點網小說信息
models anti arc pub work 全部 see 效率 rand 起點作為主流的小說網站,在防止數據采集反面還是做了準備的,其對主要的數字采用了自定義的編碼映射取值,想直接通過頁面來實現數據的獲取,是無法實現的。 單獨獲取數字還是可以實現的,通過reques
用Python爬蟲爬取廣州大學教務系統的成績(內網訪問)
enc 用途 css選擇器 狀態 csv文件 表格 area 加密 重要 用Python爬蟲爬取廣州大學教務系統的成績(內網訪問) 在進行爬取前,首先要了解: 1、什麽是CSS選擇器? 每一條css樣式定義由兩部分組成,形式如下: [code] 選擇器{樣式} [/code
python之爬蟲的入門05------實戰:爬取貝殼網(用re匹配需要的資料)
# 第二頁:https://hz.zu.ke.com/zufang/pg2 # 第一頁:https://hz.zu.ke.com/zufang/pg1 import urllib.request import random import re def user_ip(): ''
R語言爬取前程無憂網招聘職位
資料的獲取是資料探勘的第一步,如果沒有資料何談資料探勘?有時候在做演算法測試的時候,一個好的資料集也是演算法實驗成功的前提保障。當然我們可以去網上下載大型資料網站整理好的,專業的資料,但是自己動手爬取資料是不是更愜意呢? 說到這裡,給大家推薦一些常用的大型資料集: (1)、Mov
用python來爬取中國天氣網北京,上海,成都8-15天的天氣
2 爬取北京,上海,成都的天氣 from bs4 import BeautifulSoup import random import requests import socket impo
go語言,取linux系統網絡卡MAC和硬碟序列號
利用cgo,實現在go語言中呼叫c語言函式,取MAC和硬碟序列號。cgo中需要注意的:*/和import "C"兩行之間不能有其它內容! package main /* #include <stdio.h> #include <stdlib.h>
用python爬蟲爬取網頁桌布圖片(彼岸桌面網唯美圖片)
今天想給我的電腦裡面多加點桌布,但是嫌棄一個個儲存太慢,於是想著寫個爬蟲直接批量爬取,因為爬蟲只是很久之前學過一些,很多基礎語句都不記得了,於是直接在網上找了個有基礎操作語句的爬蟲程式碼,在這上面進行修改以適應我的要求和爬取的網頁需求 注意:這次爬取的
R語言爬取中國天氣網單個城市實時天氣預報資料
在傳統零售行業,雨天天氣大概會影響晴天30%-40%的銷售業績,所以從網上獲取天氣資料來作分析,並根據天氣資料作出預測,提前做好預防措施和提醒業務人員,把損失減少到最低就顯得十分重要,用R語言的rvest包就可以方便抓取天氣資料: 本文章的例子僅用於學習之用,
用接口爬取今日頭條圖片
b+ req ace nco ext odin api data utf #encoding:utf8import requestsimport jsonimport redemo = requests.get(‘http://www.toutiao.com/api/pc/
scrapy實戰1分布式爬取有緣網:
req 年齡 dict ems arch last rem pen war 直接上代碼: items.py 1 # -*- coding: utf-8 -*- 2 3 # Define here the models for your scraped items
多線程版爬取故事網
實現 exe don comm value obj nco result nic 前言:為了能以更高效的速度爬取,嘗試采用了多線程本博客參照代碼及PROJECT來源:http://kexue.fm/archives/4385/ 源代碼: 1 #! -*- cod
結對-爬取大麥網演唱會信息-設計文檔
.com ref lock beautiful 模塊 有用 pytho spa pil 結對編程成員:閻大為,張躍馨 搭建環境: ?1.安裝python2.7 ?2.安裝beautifulsoup4等相關模塊 編寫程序階段: ?1.分析html代碼以及了解相
結對-爬取大麥網近期演唱會信息-開發過程
quest 程序 ima ref 時間 -1 git 簡單測試 cnblogs Github:https://github.com/atinst/Python/tree/master/Damai 開發過程:1.根據需求分析,安裝並導入BeautifulSoup和reques