Verwenden von HTMLAgility Pack zum Extrahieren von Links

c# html-agility-pack

Frage

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?

Akzeptierte Antwort

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

Beliebte Antwort

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum