你们好,我叫谢伟,是一名程序员。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服务端响应的处理方式
存储数据方式
前三种,涉及文件读写;最后者涉及数据库操做
仅供参考: 参考
全文完,我是谢伟,再会。