ottenendo tag html utilizzando C #
-
19-09-2019 - |
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
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.