Domanda

ok Ive ha ottenuto questo codice:

public static string ScreenScrape(string url)
    {
        System.Net.WebRequest request = System.Net.WebRequest.Create(url);
        // set properties of the request
        using (System.Net.WebResponse response = request.GetResponse())
        {
            using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
            {
                return reader.ReadToEnd();
            }
        }
    }

Ora voglio filtrare il testo per ottenere la classe div = "commento" quelli c'è un'altra opzione diversa utilizzando le espressioni regolari? o è che l'unico modo?

grazie

È stato utile?

Soluzione

È necessario utilizzare il HTML Agility pacchetto .

Ad esempio:

var doc = new HtmlWeb().Load(url);
var comments = doc.Descendants("div")
                  .Where(div => div.GetAttributeValue("class", "") == "comment");

Si noti che questo non troverà <div class="OtherClass comment">; se siete alla ricerca di che, è possibile chiamare IndexOf.

Altri suggerimenti

HtmlAgilityPack è solo un pacchetto, che consente di manipolare i file html, se si vuole fare schermo raschiare selenio WebDriver con PhantomJS è la soluzione migliore. PhantomJS è senza testa browser web, quindi è veramente veloce. Inoltre, ha di gran lunga migliore funzionalità rispetto al pacchetto di agilità html. C'è un breve corso su questo argomento.

Si shoulnd't utilizzare espressioni regolari per analizzare HTML - sono lo strumento sbagliato per il lavoro, come HTML è troppo complessa per loro
. Si dovrebbe usare un parser HTML.
Guarda anche: ricerca di C # parser HTML

È primo porto di scalo dovrebbe essere il HTML Agility pacchetto .

Le espressioni regolari sono il modo classico per analizzare questo tipo di input per le lingue non NET.

Additionaly, se è possibile normalizzare questo per una variante XML (cioè XHTML), è possibile utilizzare XPath per interrogare e recuperare i nodi necessari.

Quello che non si vuole fare è implementare il proprio parser.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top