Разбор сайта с использованием HtmlAgilityPack в C# - PullRequest
0 голосов
/ 09 апреля 2020

Например, у меня есть ссылка https://shikimori.one/animes/38256-magia-record-mahou-shoujo-madoka-magica-gaiden-tv/art

Я хочу получить оттуда список классов div по имени "контейнерная упаковка", используя HtmlAgilityPack в C#. (чтобы загрузить изображения со всех ссылок) Но эта часть

var httpClient = new HttpClient();
var html = await httpClient.GetStringAsync(link);

var htmlDocument = new HtmlDocument();
    htmlDocument.LoadHtml(link);

возвращает мне html код с этой страницы https://shikimori.one/animes/38256-magia-record-mahou-shoujo-madoka-magica-gaiden-tv, как я понял. Так что я ничего не могу разобрать из "/ art". Это потому, что следующая часть кода просто возвращает ноль.

var links = htmlDocument.DocumentNode.Descendants("div")
            .Where(node => node.GetAttributeValue("class", "")
            .Equals("menu-slide-outer x199")).ToList();

Что мне не хватает?

Окончательный код:

class Program
{

    static List<string> sources = new List<string>();

    [STAThread]
    static void Main(string[] args)
    {

        var link = "https://shikimori.one/animes/1577-taiho-shichau-zo/art";

        var web = new HtmlWeb();
        web.BrowserTimeout = TimeSpan.FromTicks(0);
        var htmlDocument = web.LoadFromBrowser(link);

        var divlink = htmlDocument.DocumentNode.Descendants("div")
            .Where(node => node.GetAttributeValue("class", "")
            .Equals("container packery")).ToList();

        var alink = htmlDocument.DocumentNode.Descendants("a")
            .Where(node => node.GetAttributeValue("class", "")
            .Equals("b-image")).ToList();

        foreach(var a in alink)
        {
            sources.Add(a.GetAttributeValue("href", string.Empty));
        }

        Console.WriteLine("done");
        Console.ReadKey();

    }

1 Ответ

0 голосов
/ 09 апреля 2020

С HttpClient:

        string html = string.Empty;

        using (var httpClient = new HttpClient())
        {
            html = await httpClient.GetStringAsync(link);
        }

        var htmlDocument = new HtmlDocument();
        htmlDocument.LoadHtml(html); // LoadHtml expects the page source, not the URL.

Или простой способ анализа HTML кода с URL-адреса:

        var web = new HtmlAgilityPack.HtmlWeb();
        var htmlDocument = await web.LoadFromWebAsync(link);

Или загрузка динамического кода c (т.е. Ajax) содержание:

        var web = new HtmlAgilityPack.HtmlWeb();
        var htmlDocument = web.LoadFromBrowser(link);
...