只需要修改myurl这个变量就可以了,这是一个最初级的版本
package main
import (
"fmt"
"io/ioutil"
"net/http"
"regexp"
)
//定义过滤的正则表达式
var temp =`"http?://[\s\S]+?"`
var photo =`https?://[^"]+?(\.((jpg)|(png)|(jpeg)|(gif)|(bmp)))`
var myurl string
var data=make(map[int]string)
var con =`\/`
func MyGet(){
//定义要爬取的网址
myurl="https://www.79xte.com/tupian/85803.html"
//myurl="https://www.baidu.com"
//resq,err:=http.PostForm(myurl,url.Values{"name":{"lisheng"}})
//发送Get请求,保存返回的内容
resq,err:=http.Get(myurl)
if err!=nil{
fmt.Println("Get Testnet statues faile:",err)
}
//当函数结束时关闭资源
defer resq.Body.Close()
//读取返回网页的body部分
bytebody,err:=ioutil.ReadAll(resq.Body)
//将读取的二进制数组转换为string准备使用正则进行筛选。
strbody:=string(bytebody)
//解析成一个正则对象
re:=regexp.MustCompile(photo)
//匹配字符串的内容
res:=re.FindAllStringSubmatch(strbody,-1)
//因为匹配完res是一个[][]string,所以就把内容取出来放到一个全局的map中备用。
for key,_:=range res{
s:=res[key][0]
data[key]=s[0:]
}
}
func Dwonlocd(url string ,filename string)(ok bool){
resq,err:=http.Get(url)
defer resq.Body.Close()
if err!=nil{
fmt.Println("Get Error:",err)
}
bytes,err:=ioutil.ReadAll(resq.Body)
if err!=nil{
fmt.Println("ReadAll Erroe:",err)
}
//filename=`C:\Users\Administrator\Desktop\test\no\`+string(time.Now().Unix())+filename
filename=`C:\Users\Administrator\Desktop\test\no\`+filename
fmt.Println(filename)
err=ioutil.WriteFile(filename,bytes,0666)
if err!=nil{
fmt.Println(err)
return false
}else{
return true
}
}
func main(){
var jishu int
MyGet()
for _,value:=range data{
temp=value
re:=regexp.MustCompile(con)
res:=re.ReplaceAllString(temp,"${n}s")
status:=Dwonlocd(value,res[7:])
fmt.Println(status)
jishu=jishu+1
}
fmt.Println("Success down photo ",jishu)
}
网友评论