HtmlAgilityPack HtmlWeb.Load () 에서 gzip을 지원하지 않는 해결 방법

요 며칠 동안 현재 유행하는 Html Agility Pack으로 채집 기능을 다시 쓰고 싶은데, Html Agility Pack의 소개를 보니 매우 쓰기 좋을 것 같고, html 웹을 내장하여 http 요청에 사용하고 있다.그러나 gzip 압축된 웹 페이지를 열었을 때 오류가 발생하는 것을 발견했다.
원래 코드는 다음과 같습니다.
 
1 2
HtmlWeb webClient = new HtmlWeb(); HtmlDocument doc = webClient.Load(this.getUrl());
오류 메시지가 'gzip' 인 것은 지원되는 인코딩 이름이 아닙니다.
구글에서 한참 동안 검색한 끝에 해결 방안을 찾았고 Http Request나 Web Client를 바꾸어 요청할 필요가 없었다.또한 이 방법으로 쿠키,render 위장 등을 설정할 수 있습니다...해결 코드는 다음과 같습니다.
HtmlAgilityPack.HtmlWeb.PreRequestHandler handler = delegate(HttpWebRequest request)
{
       request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
       request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
       request.CookieContainer = new System.Net.CookieContainer();
       return true;
};
webClient.PreRequest += handler;
HtmlDocument doc = webClient.Load(this.getUrl());

 
추가 참조 코드:
                string url = "https://kaijiang.500.com/qxc.shtml";
                HtmlWeb web = new HtmlWeb();
                web.PreRequest += delegate (HttpWebRequest request)
                {
                    request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
                    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                    request.CookieContainer = new System.Net.CookieContainer();
                    return true;
                };
                HtmlDocument doc = web.Load(url);

                HtmlNode table = doc.DocumentNode.SelectSingleNode("/html/body/div[5]/div[3]/div[2]/div[1]/div[2]/table[1]");

                table = HtmlNode.CreateNode(table.OuterHtml);
                HtmlNode strong = table.SelectSingleNode("//strong");
                if (strong == null)
                    throw new Exception("      ,  strong");

                string timeStr = strong.InnerText;
                timeStr = Regex.Replace(timeStr, @"[^0-9]+", "");

                HtmlNode ul = table.SelectSingleNode("//ul");
                if (ul == null)
                    throw new Exception("        ,  ul");
                string val = ul.InnerText;

                //         
                val = Regex.Replace(val, @"[^0-9]+", "");

추가:
C# HTML 해석 도구 HtmlAgilityPack XPath 모호 조회 not () 함수 및 contains () 함수
C# HTML 구문 분석 도구 HtmlAgilityPack 사용 인스턴스(二) - 웹 페이지
C# HTML 구문 분석 도구 HtmlAgilityPack 사용 인스턴스(一)

좋은 웹페이지 즐겨찾기