Использование пакета HTMLAgility для извлечения ссылок


Рассмотрим этот простейший фрагмент кода:

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

Это эффективно ничего не делает вообще, и копируется/вдохновляется из различных других вопросов StackOverflow, таких как this. При компиляции этого, существует ошибка времени выполнения, которая говорит: "ссылка на объект не установлена на экземпляр объекта.- выделение линии переднего края.

Я не могу понять, почему окружающая среда стала раздражительной к этому скромному, невинному и бесполезному куску кода.

Я бы тоже хотел ... знаете, принимает ли HTMLAgilityPack HTML-классы в качестве узлов?

2 2

2 ответа:

Если вы хотите загрузить html из интернета, вам нужно использовать объект HtmlWeb:

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

LoadHtml принимает строку фактического HTML в качестве аргумента. Вы можете передать нагрузку потоку от WebResponse.GetResponseStream() вместо этого.

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