Utilizzo di HTMLAgility Pack per estrarre collegamenti

c# html-agility-pack

Domanda

Considerare questo pezzo di codice più semplice:

    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]"))
            {
            }
        }
    }
}

Questo in effetti non fa nulla e viene copiato / ispirato da varie altre domande StackOverflow come questa . Durante la compilazione, c'è un errore di runtime che dice "Riferimento oggetto non impostato su un'istanza di un oggetto". evidenziando la linea di foreach.

Non riesco a capire perché l'ambiente sia diventato irritabile per questo pezzo di codice umile, innocente e inutile.

Mi piacerebbe anche sapere che HTMLAgilityPack accetta classi HTML come nodi?

Risposta accettata

Se vuoi caricare html dal web, devi usare l'oggetto HtmlWeb :

HtmlWeb web = new HtmlWeb();
HtmlDocument doc =web.Load(url);

Risposta popolare

LoadHtml accetta una stringa di HTML effettivo come argomento. È possibile passare a caricare un flusso da WebResponse.GetResponseStream() .

WebRequest req = WebRequest.Create( "http://www.google.com" );
Stream s = req.GetResponse().GetResponseStream();
doc.Load(s);



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché