HtmlAgilityPack HtmlWeb.Load () 에서 gzip을 지원하지 않는 해결 방법
2602 단어 C# 네트워크 프로그래밍
원래 코드는 다음과 같습니다.
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 사용 인스턴스(一)