寫在前面: 我是「虐貓人薛定諤i」,一個不滿足於現狀,有夢想,有追求的00後
本博客主要記錄和分享自己畢生所學的知識,歡迎關注,第一時間獲取更新。
不忘初心,方得始終。
❤❤❤❤❤❤❤❤❤❤
思路分析
第一次嘗試用Go語言來寫爬蟲,由於自己剛開始學習Go語言,很多東西還沒有搞懂,所以……
抓包分析一下
提取圖片鏈接時,我用的是正則表達式,其實是可以用json解析的
本來打算用併發提高速度的,奈何自己太菜,不會啊……
代碼
package main
import (
"fmt"
"bufio"
"io"
"io/ioutil"
"net/http"
"os"
"regexp"
"strconv"
"strings"
)
var id int
func saveData(str string) {
imgPath := "D:\\Code\\Go\\goStudy\\result\\album\\"
imgName := strconv.Itoa(id) + ".jpg"
resp, err := http.Get(str)
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
reader := bufio.NewReaderSize(resp.Body, 32 * 1024)
imgFile, err := os.Create(imgPath + imgName)
if err != nil {
panic(err)
}
writer := bufio.NewWriter(imgFile)
io.Copy(writer, reader)
fmt.Println(id, ".jpg is ok!")
id ++
}
func parseData(url string) {
response, err := http.NewRequest("GET", url, nil)
if err != nil {
fmt.Println(err)
return
}
response.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36")
client := http.Client{}
resp, err := client.Do(response)
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return
}
data := string(body)
reg, err := regexp.Compile("\"img_src\":\".*?\"")
if err != nil {
fmt.Println(err)
return
}
result := reg.FindAllStringSubmatch(data, -1)
for _, val := range result {
str := strings.Replace(val[0], "img_src", "", -1)
str = strings.Replace(str, "\"", "", -1)[1:]
saveData(str)
}
}
func main() {
url := "https://api.vc.bilibili.com/link_draw/v1/doc/doc_list?uid=6823116&page_num="
id = 0
for i := 0; i < 11; i++ {
pageURL := url + strconv.Itoa(i)
parseData(pageURL)
}
}
結果
總結
個人感覺寫爬蟲還是用Python方便,可能是自己Python用的比較順手的緣故吧!
蒟蒻寫博客不易,加之本人水平有限,寫作倉促,錯誤和不足之處在所難免,謹請讀者和各位大佬們批評指正。
如需轉載,請署名作者並附上原文鏈接,蒟蒻非常感激
名稱:虐貓人薛定諤i
博客地址:https://blog.csdn.net/Deep___Learning