2011-01-29 5 views
7

HTML 민첩성 팩을 사용하여 HTML 페이지에서 이미지 및 href 링크를 구문 분석하려고하지만 XML 또는 XPath에 대해 많이 알지 못합니다. 많은 웹 사이트에서 도움말 문서를 찾는 데는 어려움이 있습니다. 또한 VisualStudio 2005에서 C#을 사용합니다. 영어 만 유창하게 말할 수 없으므로 유용한 코드를 작성할 수있어서 진심으로 감사드립니다.Html Agility Pack을 사용하여 img/src 또는/hrefs를 얻는 방법은 무엇입니까?

+0

그리고, Html 민첩성 팩은 상대 경로를 해결할 수 있습니까? – iShow

답변

21

홈 페이지의 first example 매우 비슷한 않지만, 고려 :

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를 들어, 단지 srcimgahref를 교체 할 것을 상상할 수있다. Uri 클래스를 보면, 상대 URL 처리를위한

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

: 당신은에 간단하게 할 수 있습니다.

+0

대단히 감사합니다! 그리고 이것은 내 첫 번째 묻는 경험입니다 – iShow

+0

+1 @ 마르크 ... 뛰어난 ... 이것은 내가 찾고있는 것입니다 ... –

+3

오류가 발생합니다 : DocumentElement가 1.4 용 HtmlDocument 객체에 없습니다. 0.0 버전 HtmlAgilitypack foreach (doc.DocumentNode.SelectNodes ("// a [@href]")의 HtmlNode 링크) { HtmlAttribute att = link.Attributes [ "href"]; – Kiquenet

6

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

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(); 
    } 

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

1

어쩌면 내가 대답을 게시하기에 너무 늦었을 것입니다. 다음은 나를 위해 일했다 :

var MainImageString = MainImageNode.Attributes.Where(i=> i.Name=="src").FirstOrDefault(); 
관련 문제