看到有很多python 的,然后写了个go 的,可以抓取高清图片
? getp.go
复制代码 代码如下:
package main
import (
??? "io/ioutil"
??? "log"
??? "net/http"
??? "os"
??? "regexp"
??? "strconv"
??? "strings"
??? "sync"
)
var urlist [4]string
var album chan string
var w sync.WaitGroup
var dir string
func main() {
??? dir = "tmp/"
??? err := os.Mkdir(dir, 0777)
??? if err != nil {
??????? isexist := os.IsExist(err)
??????? log.Println(isexist)
??? }
??? album = make(chan string, 200)
??? urlist = [4]string{"http://me2-sex.lofter测试数据/tag/%E7%BE%8E%E5%A5%B3%E6%91%84%E5%BD%B1?page=", "http://me2-sex.lofter测试数据/tag/%E6%AC%A7%E7%BE%8E?page=", "http://me2-sex.lofter测试数据/tag/%E6%A8%A1%E7%89%B9?page=", "http://me2-sex.lofter测试数据/tag/%E7%BE%8E%E5%AA%9B%E9%A6%86?page="}
??? for _, v := range urlist {
??????? for i := 1; i
??????????? url := v + strconv.Itoa(i)
??????????? w.Add(1)
??????????? go GetAlbum(url)
??????????? w.Wait()
??????? }
??? }
}
func GetAlbum(url string) {
??? data := GetUrl(url)
??? body := string(data)
??? part := regexp.MustCompile(` `)
??? match := part.FindAllStringSubmatch(body, -1)
??? for _, v := range match {
??????? album
??????? w.Add(1)
??????? go GetItem()
??? }
??? w.Done()
}
func GetItem() {
??? url :=
??? defer func() {
??????? ret := recover()
??????? if ret != nil {
??????????? log.Println(ret)
??????????? w.Done()
??????? } else {
??????????? w.Done()
??????? }
??? }()
??? data := GetUrl(url)
??? if len(data) > 10 {
??????? body := string(data)
??????? part := regexp.MustCompile(`bigimgsrc="(.*)"`)
??????? match := part.FindAllStringSubmatch(body, -1)
??????? for _, v := range match {
??????????? str := strings.Split(v[1], "/")
??????????? length := len(str)
??????????? source := GetUrl(v[1])
??????????? name := str[length-1]
??????????? file, err := os.Create(dir + name)
??????????? if err != nil {
??????????????? panic(err)
??????????? }
??????????? size, err := file.Write(source)
??????????? defer file.Close()
??????????? if err != nil {
??????????????? panic(err)
??????????? }
??????????? log.Println(size)
??????? }
??? }
}
func GetUrl(url string) []byte {
??? ret, err := http.Get(url)
??? if err != nil {
??????? log.Println(url)
??????? status := map[string]string{}
??????? status["status"] = "400"
??????? status["url"] = url
??????? panic(status)
??? }
??? body := ret.Body
??? data, _ := ioutil.ReadAll(body)
??? return data
}
以上所述就是本文的全部内容了,希望对大家熟悉go语言能够有所帮助。