2011-01-29 5 views
7

HTMLアジリティパックを使用して、HTMLページからイメージとhrefリンクを解析したいのですが、XMLやXPathについてはあまりよく分かりません。多くのWebサイトでヘルプドキュメントを検索していますが、また、私はVisualStudio 2005でC#を使用しています。私は英語を流暢に話すことができないので、役に立つコードを書くことができて本当に感謝します。Html Agility Packを使用してimg/srcまたは/ hrefsを取得するにはどうすればよいですか?

+0

そして、Html Agility Packは相対パスを解決できますか? – iShow

答えて

21

ホームページ上​​は非常によく似た何かを、しかし、考えてみます。

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のために、ちょうどsrcimga、およびhrefを交換することを想像することができます。 Uriクラスを見て、相対URLの取り扱いについて

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

: あなたもに簡素化することができるかもしれません。

+0

ありがとうございました!これは私の最初の尋問経験です – iShow

+0

+1 @Marc ...優秀...これは私が探しているものです... –

+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(); 
関連する問題