Использование пакета 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 ответа:
Если вы хотите загрузить 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);