Uso de HTMLAgility Pack para extraer enlaces

c# html-agility-pack

Pregunta

Considera este simple código:

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

Esto efectivamente no hace nada en absoluto, y se copia / inspira de varias otras preguntas de StackOverflow como esta . Al compilar esto, hay un error de tiempo de ejecución que dice "Referencia de objeto no establecida en una instancia de un objeto". resaltando la línea foreach.

No puedo entender por qué el medio ambiente se ha vuelto irritable con este código de código humilde, inocente e inútil.

También me gustaría saber si HTMLAgilityPack acepta clases HTML como nodos.

Respuesta aceptada

Si desea cargar html desde la web, necesita usar el objeto HtmlWeb :

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

Respuesta popular

LoadHtml toma una cadena de HTML real como un argumento. En su lugar, puede pasar Cargar una secuencia desde WebResponse.GetResponseStream() .

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


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow