HtmlAgilityPack.NETCore를 사용하여 웹 페이지 가져 오기

.net-core c# html-agility-pack

문제

HtmlAgilityPack 을 html 페이지 작업에 사용했습니다. 이전에 나는 이것을했다 :

HtmlWeb web = new HtmlWeb();
HtmlDocument document = web.Load(url);
var nodes = document.DocumentNode.SelectNodes("necessary node");

하지만 지금은 HtmlAgilityPack.NETCore를 HtmlWeb 이없는 곳에서 사용해야합니다. 같은 결과를 HtmlWeb 려면 HtmlWeb 대신 무엇을 사용해야합니까?

수락 된 답변

http를 통해 원격 리소스와 상호 작용하는 새로운 방법으로 HttpClient 를 사용하십시오.

솔루션에 .Result.Result 사용 대신 스레드를 비 블로킹하는 데 async 메소드를 사용해야 할 수도 있습니다. 또한 HttpClient .Net 4.5 부터 다른 스레드에서 사용하기위한 것이므로 다음과 같이 매번 다시 작성하면 안됩니다.

// instance or static variable
HttpClient client = new HttpClient();

// get answer in non-blocking way
using (var response = await client.GetAsync(url))
{
    using (var content = response.Content)
    {
        // read answer in non-blocking way
        var result = await content.ReadAsStringAsync();
        var document = new HtmlDocument();
        document.LoadHtml(result);
        var nodes = document.DocumentNode.SelectNodes("Your nodes");
        //Some work with page....
    }
}

비동기 / 대기에 관한 훌륭한 기사 : 비동기 / 대기 - 비동기 프로그래밍의 모범 사례 @StephenCleary | 2013 년 3 월


인기 답변

netcoreapp1.0 Visual Studio 코드에서 동일한 문제가있었습니다. 대신 HtmlAgilityPack 버전 1.5.0-beta5를 사용하여 종료되었습니다.

Remenber :

using HtmlAgilityPack;
using System.Net.Http;
using System.IO;

나는 이것을 이렇게했다 :

HttpClient hc = new HttpClient(); 
HttpResponseMessage result = await hc.GetAsync($"http://somewebsite.com"); 
Stream stream = await result.Content.ReadAsStreamAsync(); 
HtmlDocument doc = new HtmlDocument(); 
doc.Load(stream); 
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@class='whateverclassyouarelookingfor']");


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.