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

c# html-agility-pack

Вопрос

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

    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, подобных этому . При компиляции это происходит ошибка времени выполнения, в которой говорится: «Ссылка на объект не установлена ​​в экземпляр объекта». выделяя линию foreach.

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

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

Принятый ответ

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

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

Популярные ответы

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

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



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему