Ich möchte das HTML-Agility-Pack verwenden, um Bild- und href-Links von einer HTML-Seite zu analysieren, aber ich weiß einfach nicht viel über XML oder XPath. Obwohl ich auf vielen Websites nach Hilfedokumenten gesucht habe, kann ich das nicht lösen Problem. Außerdem benutze ich C # in VisualStudio 2005. Und ich kann einfach nicht fließend Englisch sprechen, also werde ich mich aufrichtig bei demjenigen bedanken, der einige hilfreiche Codes schreiben kann.
Das erste Beispiel auf der Homepage macht etwas sehr ähnliches, aber bedenken Sie:
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
}
Sie können sich also vorstellen, dass Sie für img @ src jedes a
mit img
und href
mit src
ersetzen. Vielleicht können Sie sogar vereinfachen:
foreach(HtmlNode node in doc.DocumentElement
.SelectNodes("//a/@href | //img/@src")
{
list.Add(node.Value);
}
Betrachten Sie für die relative URL-Behandlung die Uri
Klasse.
Das Beispiel und die angenommene Antwort sind falsch. Es kompiliert nicht mit der neuesten Version. Ich versuche etwas anderes:
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();
}
Das funktioniert für mich.