你們好,我叫謝偉,是一名程序員。css
我寫過不少爬蟲,這是我最後一次在文章中內說起爬蟲。之後都再也不寫了,想要研究其餘領域。html
本節的主題:Golang 爬蟲如何上手。git
主要分下面幾個步驟:程序員
使用原生的 net/http 庫進行請求便可:github
GET正則表達式
func GetHttpResponse(url string, ok bool) ([]byte, error) {
request, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, errors.ErrorRequest
}
request.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36")
client := http.DefaultClient
response, err := client.Do(request)
if err != nil {
return nil, errors.ErrorResponse
}
defer response.Body.Close()
fmt.Println(response.StatusCode)
if response.StatusCode >= 300 && response.StatusCode <= 500 {
return nil, errors.ErrorStatusCode
}
if ok {
utf8Content := transform.NewReader(response.Body, simplifiedchinese.GBK.NewDecoder())
return ioutil.ReadAll(utf8Content)
} else {
return ioutil.ReadAll(response.Body)
}
}
複製代碼
POSTmongodb
func PostHttpResponse(url string, body string, ok bool) ([]byte, error) {
payload := strings.NewReader(body)
requests, err := http.NewRequest("POST", url, payload)
if err != nil {
return nil, errors.ErrorRequest
}
requests.Header.Add("Content-Type", "application/x-www-form-urlencoded")
requests.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36")
client := http.DefaultClient
response, err := client.Do(requests)
if err != nil {
return nil, errors.ErrorResponse
}
fmt.Println(response.StatusCode)
defer response.Body.Close()
if ok {
utf8Content := transform.NewReader(response.Body, simplifiedchinese.GBK.NewDecoder())
return ioutil.ReadAll(utf8Content)
}
return ioutil.ReadAll(response.Body)
}
複製代碼
使用上面兩個函數,無論是遇到的請求是Get 或者是 Post 均可以獲取到網頁源代碼,惟一須要注意的多是Post 請求須要正確的傳遞參數給請求。chrome
使用原生的庫須要寫不少的代碼,那有沒有更簡潔一些的寫法?數據庫
已經有人把原生的 net/http 庫,進一步的進行了封裝,造成了這樣一個庫:gorequest.json
對外暴露的接口很是的簡單:
resp, body, errs := gorequest.New().Get("http://example.com/").End()
複製代碼
一行代碼便可完成一次請求。
Post 的請求也能夠比較簡便的完成:
request := gorequest.New()
resp, body, errs := request.Post("http://example.com").
Set("Notes","gorequst is coming!").
Send(`{"name":"backy", "species":"dog"}`).
End()
複製代碼
上述兩種方式,按照本身喜愛選擇,能夠獲取到網頁源代碼。此爲第一步。
對獲取到的網頁源代碼,咱們須要進行進一步的解析,獲得咱們須要的數據。
依據響應的不一樣類型,咱們能夠選擇不一樣的方法。
通常若是響應是 html 格式的數據,那麼咱們能夠很友好的選擇正則表達式或者Css 選擇器獲取到咱們須要的內容。
但若是是json 數據呢,那麼咱們可使用原生的 encoding/json 庫來進行對得倒的數據反序列化,也能將數據獲取到。
好,知道了具體的方法,那麼咱們的目標就是:
如何獲取網頁源代碼
Web客戶端請求方法
Web服務端響應
Web服務端響應的處理方式
存儲數據方式
前三種,涉及文件讀寫;最後者涉及數據庫操做
僅供參考: 參考
全文完,我是謝偉,再會。