Domanda

Come posso riparare HTML malformato usando C #? Un'ottima risposta sarebbe un esempio di HTML Agility Pack!


Sto raschiando un sito (per uso legittimo). L'HTML del sito è OK ma ci sono alcuni fastidiosi problemi.

Un modo in cui potevo andare sarebbe attraverso le espressioni regolari. Ho usato Expression Web per analizzare i problemi e le espressioni regolari necessarie per correggerli. Quindi un modo sarebbe utilizzare uno strumento come RegexBuddy per generare codice C # per queste espressioni regolari.

Tuttavia, lo strumento consigliato per l'elaborazione di HTML malformato in C # è l' HTML Agility Pack (HAP). Inoltre, ho analizzato solo una manciata di pagine e ho paura che le pagine future conterranno schemi che non ho ancora risolto, e non vorrei inserire "la ricerca degli errori nelle prossime pagine e correggerli" attività commerciale. Quindi, se HAP ha già una soluzione solida e sempre funzionante, sarebbe fantastico. Il problema è che, tranne per alcune menzioni qui in SO, non sono riuscito a trovare alcuna documentazione relativa all'utilizzo di questo strumento, ad eccezione del file di guida dell'API oggetto per oggetto.

Quindi, prima di spendere $ e di imparare il tempo su RegexBuddy (nessuna versione di valutazione gratuita), o di rompere i denti con la documentazione dell'API di HAP, c'è un modo semplice per farlo? Un esempio di HAP potrebbe aiutare ... :-)

Risposta accettata

Quello che ho preso dalle risposte qui: 1) Se stai raschiando un sito web che non controlli, entrerai sempre in una modalità di manutenzione in cui devi aggiustare il raschietto ogni volta che il layout della pagina che stai modificando cambia . 2) Se si è limitati a questo sito conosciuto, perché non scrivere il raschietto per regolare i problemi

Quindi, se devo andare in modalità manutenzione, dovrebbe essere il più semplice possibile. Pertanto, il mio processo è il seguente:

  1. Utilizzo WeExus SWExplorerAutomation per rilevare scene nelle pagine Web. L'idea è che una scena è una raccolta di condizioni definite per IE. Quando viene caricata una pagina Web, IE cerca di vedere quale serie di condizioni è soddisfatta (ad es. Il titolo della pagina è "Accesso all'account", la pagina contiene una casella di testo "Accedi" e una casella di testo "Password"). Se viene rilevato un insieme di condizioni corrispondenti a una scena, IE segnala che la scena è stata rilevata. Questo modello fornisce un livello di astrazione: alcune modifiche nella pagina Web possono essere convertite in modifiche nel file di scena, evitando che il codice debba essere modificato. Inoltre, questo mi protegge dal modello event-driven di IE: chiamo "scena. Sto valutando questo prodotto ma non sono ancora sicuro che lo userò, principalmente perché la documentazione è terribile." Un'altra alternativa è Watin e un'altra motivo per cui non ho ancora acquistato SWEA è questo articolo che accusa il suo autore di spamming contro Watin.
  2. Una volta che la pagina web è stata acquisita, utilizzo Expression Web per eseguire controlli di compatibilità e identificare errori.
  3. Io uso RegexMagic per rimuovere e correggere gli errori. Adoro questo strumento. Certo, a volte ti fa arrabbiare micidialmente perché non ti permette di fare cose che dovrebbero essere veramente facili, ma è uno strumento dolce e dolce, e la documentazione è sorprendente.
  4. Alla fine, dopo che tutti gli errori che ho conosciuto sono stati corretti, uso HTML Agility Pack per convertire in XHTML: cross the ts e dot the is, per così dire: tutte minuscole, virgolette sugli attributi e così via.

Spero che questo ti aiuti!

avi


Risposta popolare

puoi dirmi che tipo di fastidiosi problemi stai avendo?
ma non hai bisogno di usare regex per pulire l'html, HAP ti permetterà di accedere agli elemtents di un html malformato usando Xpath Queries.
e in pratica devi imparare Xpath per sapere come ottenere gli elementi HTML che desideri.
dipende molto dal tipo di html che stai analizzando usando HAP.
ma ci sono diversi modi per ottenere gli elementi.
come per id o classe o anche tu puoi ottenere l'elemento che segue un altro elemento che contiene un dato testo come "nome:" per esempio.
puoi andare alle scuole W3 Xpath Tutorial per un bel tutorial su xpath



Related

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é