используя HtmlAgilityPack для анализа информации веб-страницы в C #

c# html html-agility-pack

Вопрос

Я пытаюсь использовать HtmlAgilityPack для анализа информации веб-страницы. Это мой код:

using System;
using HtmlAgilityPack;

namespace htmparsing
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            string url = "https://bugs.eclipse.org";
            HtmlWeb web = new HtmlWeb();
            HtmlDocument doc = web.Load(url);
            foreach(HtmlNode node in doc){
                //do something here with "node"
            }               
        }
    }
}

Но когда я попытался получить доступ к doc.DocumentElement.SelectNodes я не вижу DocumentElement в списке. Я добавил HtmlAgilityPack.dll в ссылки, но я не знаю, в чем проблема.

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

У меня есть статья, которая демонстрирует очистку элементов DOM с помощью HAP (HTML Agility Pack) с использованием ASP.NET. Он просто позволяет вам пройти весь процесс шаг за шагом. Вы можете посмотреть и попробовать.

Скремблирование элементов HTML DOM с использованием HtmlAgilityPack (HAP) в ASP.NET

и о вашем процессе он работает отлично для меня. Я пробовал это так же, как и с одним изменением.

string url = "https://www.google.com";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//a")) 
{
    outputLabel.Text += node.InnerHtml;
}

Получил результат, как ожидалось. Проблема в том, что вы запрашиваете DocumentElement из объекта HtmlDocument, который на самом деле должен быть DocumentNode . Вот ответ от разработчика HTMLAgilityPack о проблеме, с которой вы сталкиваетесь.

HTMLDocument.DocumentElement не в браузере объектов


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

Поведение, которое вы видите, является правильным.

Посмотрите, что вы на самом деле делаете: http://htmlagilitypack.codeplex.com/SourceControl/latest#Release/1_4_0/HtmlAgilityPack/HtmlNode.cs .

Вы запрашиваете верхний элемент для выбора узлов, соответствующих некоторым xpath. Если ваше выражение xpath не начинается с // , вы запрашиваете его для относительных узлов, которые являются потомками. Элемент документа не является потомком самого себя, потому что ни один элемент не является потомком.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow