最近又是打战又是疫情什么的。。
不见得有什么好的新闻
不经让人沮丧。
当社会蛋糕小了之后,整个社会都卷了起来。
让人心神俱杯。
上海真是一个魔幻的城市,不想吐槽上海六院 什么丁丁保卫战。
网上有大把。
package main
import "bufio"
import "net/http"
import "fmt"
import "strings"
import "os"
import "io"
import "sync"
import "time"
import "strconv"
import "path/filepath"
import "github.com/PuerkitoBio/goquery"
// global variable
var picCount int = 0
var catalogue string = "D:/gogo/pic/"
var allPicPageNum int = 41 // 页面的总图片页面数-1
func getHTMLResponse(address string)(*http.Response,error){
// function : 通过一个网址获取该网页的html对象
// param address : 网页链接
// return : 一个http的返回对象
resp,err:=http.Get(address)
if err != nil{
fmt.Println("请求获取html失败 :",err)
}
return resp,err
}
func savePic(url string,savePath string){
// function : 保存图片到本地
// param savePath : 图片保存路径 xxx/xxx.jpg
// param url : 图片网上的地址
imgPath := savePath
imgUrl := url
res, err := http.Get(imgUrl)
if err != nil {
fmt.Println("common function save picture error")
return
}
if strings.Index(res.Status,"200")==-1{
fmt.Println("save pictrue function return status code : ",res.Status)
return
}
defer res.Body.Close()
// 获得get请求响应的reader对象
reader := bufio.NewReaderSize(res.Body, 64 * 1024)
file, err := os.Create(imgPath)
if err != nil {
panic(err)
}
// 获得文件的writer对象
writer := bufio.NewWriter(file)
io.Copy(writer, reader)
}
func getPicLink(pageLink string,pageNum int,saveCate string){
// 获取图片的链接
var tampLink string
var picLink string
for i:=0;i<pageNum;i++{
if i!=0{
tampLink=pageLink+"_"+strconv.Itoa(i+1)+".html"
}else{
tampLink=pageLink
}
resp,err:=http.Get(tampLink)
if err != nil{
fmt.Println("获取页面报错 :",err)
continue
}
// html分析
doc,err:=goquery.NewDocumentFromReader(resp.Body)
if err!=nil{
fmt.Println("HTML错误",err)
continue
}
// 拿图片连接
doc.Find("img").Each(func(i int,s *goquery.Selection){
picLink_,isExist:=s.Attr("src")
if isExist==true{
if strings.Index(picLink_,"d.54mm")==-1 && strings.Index(picLink_,"1.jpg")!=-1{
tamp:=strings.Split(picLink_,"1.")[0]
//fmt.Println("![]("+tamp+")")
for i=1;i<60;i++{
picLink=strings.Join([]string{tamp,".jpg"},strconv.Itoa(i))
savePic(picLink,catalogue+strconv.Itoa(picCount)+".jpg")
picCount+=1
}
}
}
})
}
}
func getLink(pageLink string,pageNum int,saveCate string,wg *sync.WaitGroup){
// 获取图片页面的链接
defer wg.Done()
var tampLink string
var picPageLink string
for i:=0;i<pageNum;i++{
if i!=0{
tampLink=pageLink+"_"+strconv.Itoa(i+1)+".html"
}else{
tampLink=pageLink+".html"
}
resp,err:=http.Get(tampLink)
if err != nil{
fmt.Println("获取页面报错 :",err)
continue
}
// html分析
doc,err:=goquery.NewDocumentFromReader(resp.Body)
if err!=nil{
fmt.Println("HTML错误",err)
continue
}
count:=0
// 拿图片页面连接
doc.Find("a").Each(func(i int,s *goquery.Selection){
picLink_,isExist:=s.Attr("href")
if isExist==true{
if strings.Index(picLink_,".html")!=-1{
if count>allPicPageNum{
return
}
count+=1
picPageLink="http://www.quantuwang.cc"+picLink_
fmt.Println("--------",picPageLink,count)
getPicLink(picPageLink,1,"")
time.Sleep(time.Second * 3)
}
}
})
//savePic(picLink,saveCate+strconv.Itoa(i)+".jpg")
}
}
func main(){
beforeList := map[string]int {
"http://www.quantuwang.cc/t/eaba1ecd7edb60f2":1,
}
var go_sync sync.WaitGroup
dir, _:= filepath.Abs(filepath.Dir(os.Args[0]))
fmt.Println("--------",dir+"/pic")
// var catelogue string = "/lalala"
var i int
i=0
for k,v:=range beforeList{
go_sync.Add(1)
fmt.Println(k)
// err:=os.Mkdir(catelogue+strconv.Itoa(i),os.ModePerm)
// if err!=nil{
// fmt.Println("创建文件夹报错")
// }
// tampPath:=catelogue+strconv.Itoa(i)+"/"
go getLink(k,v,"tampPath",&go_sync)
time.Sleep(time.Second * 1)
i++
fmt.Println(i,"\n")
}
go_sync.Wait()
fmt.Println("爬虫结束")
}