go语言实现抓取高清图片
发布时间:2020-12-16 19:32:23 所属栏目:大数据 来源:网络整理
导读:看到有很多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
看到有很多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.com/tag/%E7%BE%8E%E5%A5%B3%E6%91%84%E5%BD%B1?page=","http://me2-sex.lofter.com/tag/%E6%AC%A7%E7%BE%8E?page=","http://me2-sex.lofter.com/tag/%E6%A8%A1%E7%89%B9?page=","http://me2-sex.lofter.com/tag/%E7%BE%8E%E5%AA%9B%E9%A6%86?page="} for _,v := range urlist { for i := 1; i <= 20; 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(`<a class="img" href="(.*)">`) match := part.FindAllStringSubmatch(body,-1) for _,v := range match { album <- v[1] w.Add(1) go GetItem() } w.Done() } func GetItem() { url := <-album 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语言能够有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |