golang図は、酸素のsoyoung新しいケースを把持します

非常に多くの年後のコードで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)

}

  

おすすめ

転載: www.cnblogs.com/hcjs/p/11653051.html