utilizzando HtmlAgilityPack per analizzare le informazioni di una pagina Web in C #

c# html html-agility-pack

Domanda

Sto cercando di utilizzare HtmlAgilityPack per analizzare le informazioni di una pagina web. Questo è il mio codice:

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"
            }               
        }
    }
}

Ma quando ho provato ad accedere a doc.DocumentElement.SelectNodes non riesco a vedere DocumentElement nell'elenco. Ho aggiunto HtmlAgilityPack.dll nei riferimenti, ma non so qual è il problema.

Risposta accettata

Ho un articolo che dimostra come raschiare elementi DOM con HAP (HTML Agility Pack) usando ASP.NET. Ti consente semplicemente di seguire l'intero processo passo dopo passo. Puoi dare un'occhiata e provarlo.

Scraping di elementi DOM HTML mediante HtmlAgilityPack (HAP) in ASP.NET

e sul tuo processo sta funzionando bene per me. Ho provato in questo modo come hai fatto con una singola modifica.

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;
}

Ottenuto l'output come previsto. Il problema è che stai richiedendo DocumentElement dall'oggetto HtmlDocument che in realtà dovrebbe essere DocumentNode . Ecco una risposta di uno sviluppatore di HTMLAgilityPack sul problema che stai affrontando.

HTMLDocument.DocumentElement non nel browser degli oggetti


Risposta popolare

Il comportamento che stai vedendo è corretto.

Guarda cosa stai effettivamente facendo: http://htmlagilitypack.codeplex.com/SourceControl/latest#Release/1_4_0/HtmlAgilityPack/HtmlNode.cs .

Stai chiedendo all'elemento superiore di selezionare nodi corrispondenti a xpath. A meno che l'espressione xpath non inizi con // , lo stai chiedendo per i relativi nodi, che sono nodi discendenti. Un elemento del documento non è un discendente di se stesso, perché nessun elemento è un discendente di se stesso.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché