GO-Golang實現的簡單爬蟲

序言

今天在工作上面需要用到爬蟲抓取部分信息,之前用Python實現了CSDN博客的抓取,後想到了目前整天面對的Golang,便摸索了一下,實現了一個簡單的抓取豆瓣排行的爬蟲,主要分爲下面幾個步驟.

- 發起Http請求

- 解析Html元素

- 存儲抓取到的數據

詳細閱讀鏈接

源碼鏈接

發起http請求
在請求方面,直接採用的Golang的"net/http"包來進行開發,步驟如下:
初始化
client := &http.Client{}
req, err := http.NewRequest("GET", swoop.url, nil)
set請求信息
for key, value := range swoop.header {
    req.Header.Add(key, value)
}
發起請求
resp, err := client.Do(req)
if err != nil {
    log.Fatalf("do client err->%v", err)
}
接收響應
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    log.Fatalf("read resp err->%v", err)
}
解析Html元素
設置參數並請求
首先需要定義個設置參數結構體,便於操作:
type Swoop struct {
    url    string
    header map[string]string
}
設置參數後發起請求
url := "https://movie.douban.com/top250?start=" + strconv.Itoa(i*25)
swoop := &Swoop{url, header}
html := swoop.get_html_header()
解析Html元素髮起請求後,接收到Html元素,接下來需要做的就是解析Html元素,將其轉化爲我們想要的格式,解析Html格式需要到頁面瀏覽器查看對應的Html元素後再做操作:
//評價人數
commentCount := `<span>(.*?)評價</span>`
rp2 := regexp.MustCompile(commentCount)
txt2 := rp2.FindAllStringSubmatch(html, -1)

//評分
pattern3 := `property="v:average">(.*?)</span>`
rp3 := regexp.MustCompile(pattern3)
txt3 := rp3.FindAllStringSubmatch(html, -1)

//電影名稱
pattern4 := `img width="(.*?)" alt="(.*?)" src=`
rp4 := regexp.MustCompile(pattern4)
txt4 := rp4.FindAllStringSubmatch(html, -1)
如下Html頁面代碼,其中評價包含在"<\span>"標籤內,所以在解析的時候需要解析<\span>標籤:
<div class="star">
    <span class="rating5-t"></span>
    <span class="rating_num" property="v:average">9.5</span>
    <span property="v:best" content="10.0"></span>
    <span>702861人評價</span>
</div>
如下頁面代碼,包含了width、alt、src三個value,則需要拿到title就需要解析<\img>標籤後讀取第二個value值,即alt
<img width="100" alt="這個殺手不太冷" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg" class="">
- 運行代碼後效果如下
運行中:



運行結束:



### 數據存儲
數據存儲一般根據自己的需要來做,我這裏採用的是csv文件存儲.

如下所示:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章