Betrachten Sie dieses einfachste Stück Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;
namespace WebScraper
{
class Program
{
static void Main(string[] args)
{
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("http://www.google.com");
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
}
}
}
}
Dies macht effektiv überhaupt nichts und wird von verschiedenen anderen StackOverflow-Fragen wie diesem kopiert / inspiriert. Beim Kompilieren gibt es einen Laufzeitfehler, der besagt, dass "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt ist". Hervorhebung der foreach Linie.
Ich kann nicht verstehen, warum die Umwelt für diesen bescheidenen, unschuldigen und nutzlosen Code irritiert ist.
Ich würde auch gerne wissen, akzeptiert HTMLAgilityPack HTML-Klassen als Knoten?
Wenn Sie HTML aus dem Internet laden möchten, müssen Sie das HtmlWeb
Objekt verwenden:
HtmlWeb web = new HtmlWeb();
HtmlDocument doc =web.Load(url);
LoadHtml
eine Zeichenfolge aus tatsächlichem HTML als Argument. Sie können stattdessen Stream von WebResponse.GetResponseStream()
.
WebRequest req = WebRequest.Create( "http://www.google.com" );
Stream s = req.GetResponse().GetResponseStream();
doc.Load(s);