非常に多くの年後のコードでADOをたくさん感じて
パッケージのメイン インポート( "暗号/ MD5" "エンコーディング/進" "エンコーディング/ jsonの" "IO / ioutil" "ログイン" "ネット/ HTTP" "OS" "ランタイム" "文字列" "github.com/PuerkitoBio/goquery" "github.com/axgle/mahonia" ) //字符转换 FUNC ConvertToString(SRC列、srcCode列、tagCode列)列{ srcCoder:= mahonia.NewDecoder(srcCode) srcResult:= srcCoder.ConvertString(SRC) tagCoder:= mahonia .NewDecoder(tagCode) _、CDATA、_:= tagCoder.Translate([]バイト(srcResult)、TRUE) 結果:=文字列(CDATA) リターン結果 } GbkToUtf8(SRC列)列{FUNC ConvertToString(SRC、 "GBK"、 "UTF-8")を返します } //下载图片 FUNC downloadImg(img_urlストリング、ファイル名の文字列、リファラー列){ REQ、_:= http.NewRequest( "GET"、img_urlを、ゼロ) req.Header.Add( "ユーザーエージェント"、 "Mozillaの/ 5.0(Windows NTの6.1; Win64の、x64の)のAppleWebKit / 537.36(KHTML、ヤモリなど)クローム/ 68.0.3440.75サファリ/ 537.36") req.Header.Add( "リファラー"、リファラー) クライアント:=&http.Client {} 応答、ERR:= client.Do(REQ) ERR = nilの{場合! log.Println( "img_urlが失敗します:"、ERR) リターン } response.Bodyを延期.Close() データ、ERR:= ioutil.ReadAll(response.Body) !誤る場合= nilの{ log.Println(」データ読み込みに失敗しました:」、img_url、ERR) リターン } = os.Create(ファイル名):画像、ERR ERR場合!=ゼロ{ log.Println( "ファイルを作成できませんでした:"、ファイル名、ERR) リターン } 延期image.Close() image.Write(データ) } //抓取图片ID目录名の FUNCのGetJokes(URL文字列、ID列)マップ[文字列]文字列{ //ページ1 baseUrlに:= URL クライアント:=&http.Client {} のreq、ERR:= http.NewRequest( "GET"、baseUrlにはnil) req.Header.Add( "ユーザーエージェント"、 "Mozillaの/ 5.0(Windows NTの6.1; Win64の、x64の)のAppleWebKit / 537.36(KHTML、ヤモリなど)クローム/ 77.0.3865.90サファリ/ 537.36") req.Header.Add( "リファラー"、「HTTPS://www.soyoung .COM / ") req.Header.Add( "クッキー"、「__order_time __ =未定義; msg_time =未定義; back_order_time =未定義; complain_time =未定義; __usersign __ = 1570614910876417305; _ga = GA1.2.2061581476.1570614904; _gid = GA1.2.1666843180.1570614904; PHPSESSID = 5001a7796cc83a8255b33284a3a30dd7 ; cityId = 1; Hm_lvt_b366fbb5465f5a86e1cc2871552e1fdb = 1570614904,1570693381; __p_t __ = 15706935958294; __postion __ =%3A4%の3Aの%7bs上の%3A6%の3A%22cityId%22%3BSの%3A3%の3A%22207パーセント22%の3BS%3A8%の3Aの%の22cityName %22%3BS%3A9%の3Aの%22%E6%でのB3の%89%E5%以下のB7%9E%E5%以下のB8%82%22%3BSの%3A8%の3A%22cityCode%22%の3BS%3A3%の3A%22134% 22 %3BS%3A3%3A%22jwd%22%3Bi%3A0%3B%の7D; _gat = 1; Hm_lpvt_b366fbb5465f5a86e1cc2871552e1fdb = 1570694344" ) RES、ERR = client.Do(REQ) ERRなら=ゼロ{! log.Fatal(ERR ) } )(res.Body.Closeを延期 DOC、ERR:= goquery.NewDocumentFromResponse(RES) !もし誤る= nilの{ log.Fatal(ERR) } //获取术前图片链接 VAR beforImgs []の文字列 doc.Find( "ビッグ・写真。")それぞれの(。 FUNC(iはINT、goquery.Selection * S){ imgUrl、_:= s.Attr( "HREF") (imgUrl、beforImgs)beforImgs =追加 }) ERR = os.MkdirAll( "./"+ ID +" /前」os.ModePerm) !誤る場合=ゼロ{ log.Println(ERR) }他{ _ため、V:=レンジbeforImgs { //下载图片 H:= md5.New() h.Write([]バイト( V)) ファイル名:= hex.EncodeToString(h.Sum(ゼロ))+ ".JPG" downloadImg(V、」./"+id+"/before/"+filename、baseUrlに) } } //获取术后文字和图片链接ページ1 ( "日記項目")。doc.Findは、各(funcが(私は、int型* goquery.Selection){ タイトル:"。日" = s.Find()。テキスト() os.Mkdir( "./"+ ID + "/" +タイトル、os.ModePerm) s.Find("。フォトリストのli IMG」)。各(FUNC(k個のint型、S2の* goquery.Selection) { imgUrl、_:= s2.Attr( "データIMG") imgUrl = strings.Replace(imgUrl、 "_301_301"、 ""、-1) imgUrl = strings.Replace(imgUrl、 "顔/"、 ""、 -1) H:= md5.New() h.Write([]バイト(imgUrl)) ファイル名:= hex.EncodeToString(h.Sum(NIL))+ ".JPG" downloadImg(imgUrl、」./"+ ID + "/" +タイトル+ "/" +ファイル名、baseUrlに) }) }) //ページ2 baseUrl2:= URL + "/ P2 /" REQ2は、ERR:= http.NewRequest( "GET"、baseUrl2、ゼロ) req2.Header.Add( "ユーザーエージェント"、「Mozillaの/ 5.0(Windows NTの6.1; Win64の、x64の)のAppleWebKit / 537.36(KHTML、ヤモリのように)クローム/ 77.0.3865.90サファリ/ 537.36 ") req2.Header.Add("リファラー」、baseUrlに) req2.Header.Add( "クッキー"、「__order_time __ =不定; msg_time =不定; back_order_time =不定; complain_time =不定; __usersign __ = 1570614910876417305; _ga = GA1.2.2061581476.1570614904; _gid = GA1.2.1666843180.1570614904; PHPSESSID = 5001a7796cc83a8255b33284a3a30dd7; cityId = 1; Hm_lvt_b366fbb5465f5a86e1cc2871552e1fdb = 1570614904,1570693381; __p_t __ = 15706935958294; __postion __ =%3A4%の3A%7bs上%3A6%3A%22cityId%22%3BS%3A3%3A%22207パーセント22%3BS%3A8%3A%22cityName%22%3BS%3A9 %の3A%22%E6%以下のB3%89%E5%でのB7の%9E%E5%以下のB8%82%22%の3BS%3A8%の3A%22cityCode%22%3BSの%3A3%の3A%22134パーセント22%3BSの%3A3%の3A %22jwd%22%3Biの%3A0%3B%の7D; _gat = 1; Hm_lpvt_b366fbb5465f5a86e1cc2871552e1fdb = 1570694344") RES2、ERR = client.Do(REQ2) もしERR = nilの{! log.Fatal(ERR) } )(res2.Body.Closeを延期 DOC2、ERR:= goquery.NewDocumentFromResponse(RES2) の場合誤る= nilの{! log.Fatal(ERR) } //获取术后文字和图片链接ページ2 doc2.Find( "日記項目。")、各(FUNC。 {(iはINT、* goquery.Selection S) NUM:= s.Length() もしNUM> 0 { タイトル:= s.Find(」日")テキスト() os.Mkdir(" ./"+ ID + "/" +タイトル、os.ModePerm) s.Find(」フォトリストのLi IMG ")それぞれ(FUNC(k個の整数、S2の*のgoquery.Selection。){ imgUrl、_:= s2.Attr(" DATA- IMG」) imgUrl = strings.Replace(imgUrl、 "_301_301"、 ""、-1) imgUrl = strings.Replace(imgUrl、 "顔/"、 ""、-1) H:= md5.New() H。書き込み([]バイト(imgUrl)) ファイル名:= hex.EncodeToString(h.Sum(ゼロ))+ ".JPG" downloadImg(imgUrl、」./"+id+"/"+title+"/"+filename、baseUrlに) }) } }) //对应IDの 情報:=作る(地図[ストリング]列) インフォ[ "ID"] = GbkToUtf8(ID) 情報[ "picUrl"] = "成功" の戻り先 } //http://127.0.0.1:1024/?id=dpg8426968 FUNCメイン(){ runtime.GOMAXPROCS(runtime.NumCPU()) HTTP。 HandleFunc( "/"、indexHandler) http.ListenAndServe( "1024"、ゼロ) } indexHandler FUNC(W http.ResponseWriter、R * http.Request){ 延期r.Body.Close() r.ParseForm() ID: = r.FormValue( "ID")+ IDの 情報:=のGetJokes(URL、ID)FormValue( "ID") VaRのURL文字列 URL = "https://www.soyoung.com/" + IDの S、_:= json.Marshal(情報) w.Write(S) }