随笔3 世界很糟糕怎么办

最近又是打战又是疫情什么的。。

不见得有什么好的新闻

不经让人沮丧。

当社会蛋糕小了之后,整个社会都卷了起来。

让人心神俱杯。

上海真是一个魔幻的城市,不想吐槽上海六院 什么丁丁保卫战。

网上有大把。

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("爬虫结束")
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值