go 語言爬取百度貼吧中的內容
阿新 • • 發佈:2019-01-07
涉及到的知識點有 通道chan ,切片的使用 ,os,http 包的使用
package main import ( "fmt" "net/http" "os" "strconv" ) func pachong(start, end int) { //明確爬的地址 url := "https://tieba.baidu.com/f?kw=%E6%AE%B5%E5%AD%90&ie=utf-8&pn=" c := make(chan int) for i := start; i < end+1; i++ { go ping(i, url, c) } for v := range c { fmt.Println(v) } } //不同的執行緒去爬不同的檔案 func ping(i int, url string, c chan int) { fmt.Printf("當前爬取第 %d 頁,%s\n", i, url) res, err := curl(url) if err != nil { fmt.Println("你有錯誤:", err) return } name := strconv.Itoa(i) + ".html" //建立檔案 f, err1 := os.Create(name) if err1 != nil { fmt.Println("檔案建立失敗:", err1) return } //內容寫入檔案i f.WriteString(res) //關閉檔案 f.Close() c <- i } //爬取網頁內容 func curl(url string) (reques string, err error) { resq, err1 := http.Get(url) if err1 != nil { err = err1 return } //最後關閉 defer resq.Body.Close() str := make([]byte, 1024*5) //迴圈讀取資料 for { number, _ := resq.Body.Read(str) if number == 0 { fmt.Println("爬取頁面成功!") break } reques += string(str[:number]) } return } func main() { pachong(1, 3) }