Html Agility Pack을 사용하여 img / src 또는 / hrefs를 얻는 방법?

.net c# html html-agility-pack html-parsing

문제

HTML 페이지에서 이미지 및 href 링크를 구문 분석하기 위해 HTML 민첩성 팩을 사용하려고하지만 XML 또는 XPath에 대해 많이 알지 못합니다. 많은 웹 사이트에서 도움말 문서를 찾는 데는 어려움이 있습니다. 또한 Visual Studio 2005에서 C #을 사용합니다. 영어 만 유창하게 말할 수 없으므로 유용한 코드를 작성할 수있어서 진심으로 감사드립니다.

수락 된 답변

홈 페이지의 첫 번째 예 는 매우 유사하지만 다음을 고려합니다.

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm"); // would need doc.LoadHtml(htmlSource) if it is not a file
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    string href = link["href"].Value;
    // store href somewhere
 }

그래서 당신의 img @의 SRC를 들어, 단지 각각 교체 할 것을 상상할 수 a 함께 img , 그리고 hrefsrc . 다음과 같이 단순화 할 수도 있습니다.

 foreach(HtmlNode node in doc.DocumentElement
              .SelectNodes("//a/@href | //img/@src")
 {
    list.Add(node.Value);
 }

상대 URL 처리에 대해서는 Uri 클래스를 참조하십시오.


인기 답변

예와 허용 된 대답이 잘못되었습니다. 최신 버전으로 컴파일되지 않습니다. 나는 다른 것을 시도한다 :

    private List<string> ParseLinks(string html)
    {
        var doc = new HtmlDocument(); 
        doc.LoadHtml(html);
        var nodes = doc.DocumentNode.SelectNodes("//a[@href]");
        return nodes == null ? new List<string>() : nodes.ToList().ConvertAll(
               r => r.Attributes.ToList().ConvertAll(
               i => i.Value)).SelectMany(j => j).ToList();
    }

이것은 나를 위해 작동합니다.




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