htmlagilitypack xpath가 작동하지 않습니다.

c# html-agility-pack xpath

문제

내 xpath가 작동하지 않는 문제가 있습니다.

하단의 Google.com의 다음 링크 URL을 얻으려고합니다.

하지만 Xpath를 사용하여 URL에 연결할 수 없습니다.

내 xpath 수정에 도와주세요. 또한 나에게 무엇이 있어야하는지 말해줘 ??

HtmlWeb hw = new HtmlWeb();

HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=seo");
HtmlNodeCollection linkNodes = doc.DocumentNode.SelectNodes("//*[@id='pnnext']");

foreach (HtmlNode linkNode in linkNodes)
{
    HtmlAttribute link = linkNode.Attributes["href"];
    MessageBox.Show(link.Value );
}

수락 된 답변

여기서 이상한 것은 HtmlAgilityPack이 "다음"링크의 id 속성을 인식하지 못한다는 것입니다.

이것은 HtmlAgilityPack의 버그 일 수 있습니다. HAP Issue Tracker 에 게시 할 수 있습니다.

그러나 그 동안 나는이 해결 방법을 발견 :

  • 페이징 요소 ( id="nav" 가있는 테이블)를 포함하는 테이블을 찾습니다. 이 요소의 경우 ID가 올바르게 인식됩니다.
  • 테이블에서 첫 번째 (그리고 유일한 tr )를 가져 와서 ( last() 함수 인 XPath를 사용하여) 테이블의 마지막 tdtd
  • 테이크 내부 요소 a td 우리가 이전 단계에서 얻을 수 있습니다.

긴 이야기를 짧게 요약하면 다음과 같습니다.

var doc = new HtmlWeb().Load("http://www.google.com/search?q=seo");

var nextLink = doc.DocumentNode
    .SelectSingleNode("//table[@id='nav']/tr/td[last()]/a");

Console.WriteLine(nextLink.GetAttribute("href", "err"));

최신 정보

Simon의 의견을 읽은 후에 다시 확인한 결과, 이것은 HTML Agility Pack의 버그가 아니라는 결론에 도달했습니다. id="pnnext" 속성은 브라우저에서 요청한 경우에만 표시됩니다 (아마도 UserAgent 헤더 값에 따라 다름). 코드에서 HttpWebRequest 를 수행 할 때 출력에 "다음"링크가 표시됩니다.

var doc = new HtmlWeb().Load("http://www.google.com/search?q=seo");

var nextLink = doc.DocumentNode
    .SelectSingleNode("//table[@id='nav']/tr/td[last()]/a");

Console.WriteLine(nextLink.GetAttribute("href", "err"));



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