学习编程需要不断实践,最近在学习Go语言,就试着写了一个小demo
package main
import (
"io"
"io/ioutil"
"net/http"
"os"
"regexp"
)
func main(){
url:=getImageUrl() //指定av 号的图片的url
GetImage_1(url) //根据图片的url下载内容
}
func GetImage_1(url string){
filename:=url[50:]
print(filename)
client := &http.Client{}//生成client参数为默认
req,_:=http.NewRequest("GET",url,nil)
resp,_:=client.Do(req)
client.CloseIdleConnections()
f, _:= os.Create(filename)
_,err:=io.Copy(f, resp.Body)
if err!=nil{
print("AWDWD")
}
}
func getImageUrl()string{
client := &http.Client{}//生成client参数为默认
var target string=os.Args[1]
url:="https://www.bilibili.com/video/av"+target
req,_:=http.NewRequest("GET",url,nil)
req.Header.Add("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0")
req.Header.Add("Cookie","_uuid=E5075DE9-ACE2-BEA0-01EE-0C48C8AA521F57398infoc; buvid3=57ABB601-B517-4EBF-B438-FDC1897028AE110264infoc; fts=1563797458; CURRENT_FNVAL=16; stardustvideo=1; rpdid=|(um~JJYRRmY0J'ulYJ~m~l~~; LIVE_BUVID=AUTO6615716738987550; sid=cm6ajuad; UM_distinctid=16def12b7929-0ac2c151039e5a-4c312373-100200-16def12b7931b6; bsource=seo_baidu; INTVER=1")
resp,_:=client.Do(req)
body,_:=ioutil.ReadAll(resp.Body)
reg, _:= regexp.Compile("((http://i[0-9].hdslb.com/bfs/archive/)([a-z0-9]*)(.jpg))") //匹配到一个url
resp.Body.Close()//释放网络资源
url=reg.FindString(string(body))
client.CloseIdleConnections()
resp.Body.Close()
print(url)
return url[:76] //正则匹配不止一条。。慢慢数了url一共76个字符。。
}
编译一下就能用了 (编译后的exe 文件 +av号)
总结:
- 代码不太美观,首先构造一个请求去访问指定av号的视频地址,将响应的html 使用正则表达式提取图片的地址,再次请求图片地址,将响应的内容下载到当前目录下。
- 正则表达式好难写啊。。。以后需要系统的学一下。
- 这个demo貌似没啥卵用。。直接f12找url也行…
- 菜鸡,轻喷