GoLang 爬蟲 資料清洗(goquery)

2021-09-26 15:46:34 字數 2609 閱讀 3663

當我們成功向**傳送http請求的時候,**會給回我們響應的網頁內容。網頁內容以html**形式表示,因此我們需要從html**中提取目標資料。

資料清洗方式大致分為三種:字串操作(擷取,替換等操作)、正規表示式和html解析。字串操作和正規表示式就不再詳細講述,這屬於golang的基礎語法,本文重點講述golang的html解析。

golang常用的html解析有第三包goquery,在cmd視窗輸入安裝指令即可。

go get github.com/puerkitobio/goquery
goquery定義多種方法從html裡獲取目標資料,本文只講述最常用的資料清洗提取方法,其他的資料清洗提取方法可以參考官方文件

我們將上一節的響應內容作為源資料,詳情參考:golang—爬蟲入門基礎—模擬傳送http請求。為了區分上一節的內容,我們將模擬傳送http請求改為函式sendhttp傳送,資料清洗寫在main函式,整段**如下所示。

)//使用第三方mahonia實現網頁內容的轉碼

func converttostring(src string, srccode string, tagcode string) string

// 使用對映傳遞函式引數,requestmode作為http的請求方式

} //設定**ip,**ip必須以為fun形式表示

//在client物件設定引數transport即可實現**ip

client.transport = transport

} //執行http請求

resp, _ := client.do(req)

//讀取響應內容

body, _ := ioutil.readall(resp.body)

//將響應內容轉換utf-8編碼

result := converttostring(string(body), "gbk", "utf-8")

//輸出網頁內容

return result

//輸出響應內容的cookies資訊

// 使用第三包goquery讀取html**,讀取方式有多種,如下所示:

// newdocumentfromreader:讀取字串的html**

// newdocumentfromresponse:讀取html**物件,即net/http生成的響應內容resp.body

dom, _ := goquery.newdocumentfromreader(strings.newreader(result))

// find函式是查詢html裡面所有符合要求的標籤。

// 如果查詢class="t1"的標籤,則find(".t1");如果查詢id="t1"的標籤,則find("#t1")

// 如果有多個標籤使用同乙個class,比如div和p標籤使用class="t1",若只需定義div標籤,可以使用find("div[class=t1]")

dom.find(".t1 ").each(func(i int, selection *goquery.selection) )

// 通過多層html標籤查詢,只需在find裡面設定多層標籤的class屬性即可

// 首先查詢class="el"的標籤,然後在class="el"的標籤裡查詢class="t2"的標籤

// 再從class="t2"的標籤查詢標籤a,因此查詢方式為find(".el .t2 a"),每個標籤之間使用空格隔開

dom.find(".el .t2 a").each(func(i int, selection *goquery.selection) )

}在main函式中,呼叫函式sendhttp,函式的返回值為result,這是網頁的html**,並以字串的形式表示。然後使用goquery.newdocumentfromreader解析網頁的html**,生成dom物件。最後由dom物件呼叫find函式實現目標資料的定位。find函式呼叫each函式可以將符合條件的標籤進行遍歷,整個使用方式如下

dom.find(".t1 ").each(func(i int, selection *goquery.selection) )

爬蟲資料清洗之html標籤的清洗

我們平常爬取資料時,會經常有多餘的html便簽,下面我們就來清洗一下這些標籤 1,只清洗標籤,可以用正則,也可以用remove remove tags 函式 資料 雲計算 物聯網等工程技術人員,也有電子競技員 無人機駕駛員等新穎工種 你心動了嗎?哪些學校開設了相關專業值得關注?戳圖了解 轉給正在求學...

Python爬蟲(一) 資料清洗與提取

re模組的使用 提取,匹配,替換 提取 findall 匹配 match 替換 sub 例子 sub 正規表示式 替換的字元 需要替換的字元 html re.sub n html findall 正規表示式 要替換的字元 ret re.findall pattern 1,html match 正規表...

資料清洗之資料清洗概述

從廣泛的意義上來講,資料是乙個寬泛的概念,包括但不限於 我們要了解資料清洗,就需理解資料的內涵和外延 常見的資料有 其中,比較重要比較常見的分析資料是 資料。這裡重點介紹一些關於 資料的內容。資料 資料物件由屬性 attributes 及其值 value 構成 資料的特徵 什麼是資料清洗 資料清洗是...