private static List <WebtoonListSpecificPageInformations> GetInternalWebtoonListPageInformations(string url, int page) { try { url += "&page=" + page; HttpWebRequest request = ( HttpWebRequest )WebRequest.Create(url); request.Method = "GET"; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"; using (HttpWebResponse response = ( HttpWebResponse )request.GetResponse( )) { using (Stream responseStream = response.GetResponseStream( )) { //using ( StreamReader reader = new StreamReader( responseStream, Encoding.UTF8 ) ) //{ // string html = reader.ReadToEnd( ); HtmlDocument document = new HtmlDocument( ); document.Load(responseStream, Encoding.UTF8); List <WebtoonListSpecificPageInformations> specificPageInformations = new List <WebtoonListSpecificPageInformations>( ); int index = 1; foreach (HtmlNode node in document.DocumentNode.SelectNodes("//tr/td[@class!=\"title\"]")) { WebtoonListSpecificPageInformations specificPageData = new WebtoonListSpecificPageInformations( ); HtmlNode thumbnailImageNode = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td/a/img"); HtmlNode thumbnailImageClickerANode = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td/a"); HtmlNode starRateNode = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td/div/strong"); HtmlNode uploadDateNode = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td[@class=\"num\"]"); HtmlNode bgmAvaliable = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td[@class=\"title\"]/span[@class=\"ico_bgm\"]"); Console.WriteLine(index + " >PAGE : " + thumbnailImageNode.GetAttributeValue("src", "") + " / " + thumbnailImageClickerANode.GetAttributeValue("href", "") + " / " + thumbnailImageNode.GetAttributeValue("title", "")); Console.WriteLine(starRateNode.InnerText); Console.WriteLine(uploadDateNode.InnerText); Console.WriteLine("BGM : " + (bgmAvaliable != null).ToString( )); specificPageData.title = HttpUtility.HtmlDecode(thumbnailImageNode.GetAttributeValue("title", "")); specificPageData.thumbnail = thumbnailImageNode.GetAttributeValue("src", ""); specificPageData.starRate = double.Parse(starRateNode.InnerText); specificPageData.uploadDate = uploadDateNode.InnerText; specificPageData.url = "http://comic.naver.com" + thumbnailImageClickerANode.GetAttributeValue("href", ""); specificPageData.num = int.Parse(HttpUtility.ParseQueryString((new Uri(specificPageData.url)).Query).Get("no")); if (bgmAvaliable != null) { specificPageData.bgm = GetPageBGMUrl(specificPageData.url); } else { specificPageData.bgm = ""; } specificPageInformations.Add(specificPageData); index++; } return(specificPageInformations); } } } catch (Exception ex) { Console.WriteLine(ex); return(null); } }
private static List <WebtoonListSpecificPageInformations> GetInternalWebtoonListPageInformations(string url, int page) { List <WebtoonListSpecificPageInformations> specificPageInformations = new List <WebtoonListSpecificPageInformations>( ); url += "&page=" + page; HttpWebRequestHelper.GetHttpRequest(url, GlobalVar.DefaultUserAgent, "http://comic.naver.com", null, (HttpWebRequest request, Stream stream) => { HtmlDocument document = new HtmlDocument( ); document.Load(stream, Encoding.UTF8); int index = 1; while (true) // 위험할 수 있음 테스트가 필요함 { HtmlNode checkIsBanner = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td"); // 리스트가 없으면 전체를 탐색한 것 if (checkIsBanner == null) { break; } if (checkIsBanner != null && checkIsBanner.GetAttributeValue("colspan", "") == "4") // 게임 웹툰 또는 스토어 웹툰 배너 체크 { index++; continue; } WebtoonListSpecificPageInformations specificPageData = new WebtoonListSpecificPageInformations( ); HtmlNode thumbnailImageNode = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td/a/img"); // 썸네일 노드 HtmlNode thumbnailImageClickerANode = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td/a"); // 썸네일 a 노드 HtmlNode starRateNode = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td/div[@class=\"rating_type\"]/strong"); // 별점 노드 HtmlNode uploadDateNode = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td[@class=\"num\"]"); // 업로드 일 노드 HtmlNode bgmAvaliable = document.DocumentNode.SelectSingleNode("//tr[" + index + "]/td[@class=\"title\"]/span[@class=\"ico_bgm\"]"); // BGM 있음? specificPageData.title = HttpUtility.HtmlDecode(thumbnailImageNode.GetAttributeValue("title", "")); specificPageData.thumbnail = thumbnailImageNode.GetAttributeValue("src", ""); specificPageData.starRate = double.Parse(starRateNode.InnerText); specificPageData.uploadDate = uploadDateNode.InnerText; specificPageData.url = "http://comic.naver.com" + thumbnailImageClickerANode.GetAttributeValue("href", ""); specificPageData.num = int.Parse(HttpUtility.ParseQueryString((new Uri(specificPageData.url)).Query).Get("no")); specificPageData.contents = GetDetailPageImageContentsOnly(specificPageData.url); if (bgmAvaliable != null) // BGM 있으면 BGM 주소 가져옴 { specificPageData.bgm = GetPageBGMUrl(specificPageData.url); } else { specificPageData.bgm = ""; } specificPageInformations.Add(specificPageData); index++; Thread.Sleep(30); } }); return(specificPageInformations); }