Go语言 简单的爬虫示例(1)

abv123456789 · · 2393 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

例子1:获得百度首页的html源文件: 

package main

 import(

    "fmt"

    "io/ioutil"

    "net/http"

)

func main(){

    response,_:=http.Get("http://www.baidu.com")

    defer response.Body.Close()

    body,_:=ioutil.ReadAll(response.Body)

    fmt.Println(string(body))

}


例子2,增加了一些错误验证

代码来自:https://gist.github.com/ijt/950790

package main

 import(

"fmt"

    "io/ioutil"

    "net/http"
    "os"
)
 
func main(){
    response,err:=http.Get("http://www.baidu.com/")
    if err!=nil{
        fmt.Printf("%s",err)
        os.Exit(1)
    }else{
        defer response.Body.Close()
        contents,err:=ioutil.ReadAll(response.Body)
        if err!=nil{
            fmt.Printf("%s",err)
            os.Exit(1)
        }
        fmt.Printf("%s\n",string(contents))
    }
}

http下有Get,Post,PostForm三个函数。这三个函数直接实现了简单的http客户端

下一个简单的例子增加了log, http://gameor.com/archives/178/golang%E5%8F%96%E9%93%BE%E6%8E%A5%E4%B8%8Ephp%E6%AF%94%E8%BE%83%E4%B8%8B/

package main
 
import(
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)
 
func main(){
    res,err:=http.Get("http://www.ghj1976.net/")
    if err!=nil{
        log.Fatal(err)
    }
    defer res.Body.Close()
    robots,err:=ioutil.ReadAll(res.Body)
    if err!=nil{
        log.Fatal(err)
    }
    fmt.Printf("%s",robots)
}

例子3:把百度的网页存在本地一个文件:

http://david-je.iteye.com/blog/1602774

package main
 import(
    "fmt"
    "log"
    "net/http"
    "os"
)
 func main(){
    resp,err:=http.Get("http://www.baidu.com")
    if err!=nil{
        //handleerror
        fmt.Println(err)
        log.Fatal(err)
    }
    defer resp.Body.Close()
    if resp.StatusCode==http.StatusOK{
        fmt.Println(resp.StatusCode)
    }
 
    buf:=make([]byte,1024)
    //createfile
    f,err1:=os.OpenFile("baidu.html",os.O_RDWR|os.O_CREATE|os.O_APPEND,os.ModePerm)
    if err1!=nil{
        panic(err1)
        return
    }
    defer f.Close()
 
    for{
        n,_:=resp.Body.Read(buf)
        if 0==n{
            break
        }
        f.WriteString(string(buf[:n]))
    }
 
}
 其他可以借鉴的
 
golang 批量检查页面
http://www.simonzhang.net/?p=1346

 

除了使用Get、Post、PostForm 这三个函数来建立一个简单客户端,还可以使用:
http.Client和http.NewRequest来模拟请求

例子:指定公共头的请求百度页面

http://www.cnblogs.com/yjf512/archive/2012/06/18/2554066.html

package main
 
import(
    "fmt"
    "io/ioutil"
    "net/http"
)
 
func main(){
    client:=&http.Client{}
    reqest,_:=http.NewRequest("GET","http://www.baidu.com",nil)
 
    reqest.Header.Set("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    reqest.Header.Set("Accept-Charset","GBK,utf-8;q=0.7,*;q=0.3")
    reqest.Header.Set("Accept-Encoding","gzip,deflate,sdch")
    reqest.Header.Set("Accept-Language","zh-CN,zh;q=0.8")
    reqest.Header.Set("Cache-Control","max-age=0")
    reqest.Header.Set("Connection","keep-alive")
 
    response,_:=client.Do(reqest)
    if response.StatusCode==200{
        body,_:=ioutil.ReadAll(response.Body)
        bodystr:=string(body)
        fmt.Println(bodystr)
    }
}


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:abv123456789

查看原文:Go语言 简单的爬虫示例(1)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2393 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传