htmlagilitypack 및 동적 콘텐츠 문제

c# dynamic-content html-agility-pack

문제

안녕 모두.

웹 스크래퍼 애플리케이션을 만들고 싶습니다. 웹 브라우저 컨트롤, htmlagilitypack, xpath로 처리하고 싶습니다.

지금은 xpath 생성기 (이 목적을 위해 웹 브라우저 사용), 잘 작동하지만, 가끔 자바 스크립트 또는 아약스 생성 된 콘텐츠를 통해 동적으로 잡을 수 없습니다 만들 수 있었다. 또한 나는 웹 브라우저 컨트롤 (실제로 IE 브라우저)이 "tbody"와 같은 몇 가지 추가 태그를 생성 할 때이를 발견했으며, 다시 htmlagilitypack`htmlWeb.Load (webBrowser.DocumentStream);는 그것을 볼 수 없습니다.

또 다른 메모. 나는 다음 코드가 실제로 현재 웹 페이지 소스를 가져온다는 것을 알았지 만 htmlagilitypack`(mshtml.IHTMLDocument3) webBrowser.Document.DomDocument;를 제공 할 수 없었다.

그걸로 나를 도울 수 있니? 감사

인기 답변

방금 HtmlAgilityPack에 웹 페이지에서 일부 아약스 동적 콘텐츠를 렌더링하려고 시간을 보냈다.이 웹 페이지를 발견 할 때까지 쓸모없는 게시물을 다른 게시물로 이동하려고했다.

대답은 초기 게시물 아래의 주석에 숨겨져 있으며 나는 그것을 바로 잡아야한다고 생각했습니다.

이것은 처음에 사용하고 작동하지 않는 방법입니다.

private void LoadTraditionalWay(String url)
{
    WebRequest myWebRequest = WebRequest.Create(url);
    WebResponse myWebResponse = myWebRequest.GetResponse();
    Stream ReceiveStream = myWebResponse.GetResponseStream();
    Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
    TextReader reader = new StreamReader(ReceiveStream, encode);
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.Load(reader);
    reader.Close();
}

WebRequest는 누락 된 내용을 렌더링하는 ajax 쿼리를 렌더링하거나 실행하지 않습니다.

이것이 효과가있는 해결책입니다.

private void LoadTraditionalWay(String url)
{
    WebRequest myWebRequest = WebRequest.Create(url);
    WebResponse myWebResponse = myWebRequest.GetResponse();
    Stream ReceiveStream = myWebResponse.GetResponseStream();
    Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
    TextReader reader = new StreamReader(ReceiveStream, encode);
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.Load(reader);
    reader.Close();
}

아이디어는 ajax 콘텐츠를 렌더링 할 수있는 WebBrowser를 사용하여로드 한 다음 페이지가 완전히 렌더링 될 때까지 기다린 다음 Microsoft.mshtml 라이브러리를 사용하여 HTML을 민첩성 팩으로 다시 구문 분석하는 것입니다.

이것은 동적 데이터에 액세스 할 수있는 유일한 방법이었습니다.

누군가가 도움이되기를 바랍니다.




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