Cum de a analiza HTML

Trebuie să eliminați toate URL-ul de atributele tag-ul în HTML href o pagină. Am încercat să folosesc expresii regulate:

Dar există o mulțime de probleme potențiale:

O expresie regulată este foarte rapid, devenind monstruos și imposibil de citit, iar zonele cu probleme a arătat mai mult și mai mult.

Expresiile regulate sunt proiectate să se ocupe de texte relativ simple, care sunt date de limbi obișnuite. Expresiile regulate din momentul apariției sale este mult mai complexă, mai ales în Perl, punerea în aplicare expresie regulată, care este o sursă de inspirație pentru alte limbi și biblioteci, dar expresii regulate sunt încă prost echipate (și aproape niciodată vor) să se ocupe de limbaje complexe, cum ar fi HTML. HTML de procesare dificultate este, de asemenea, o reguli de prelucrare foarte complex de cod invalid, care au fost moștenite din vremea primelor implementari ale nașterii Internetului, atunci când nu există standarde care nu erau la vedere, iar fiecare producător browsere îngrămădit oportunitate unică și extraordinară.

Deci, în general, expresia obișnuită - nu cel mai bun candidat pentru procesarea HTML. De obicei, mai înțelept să folosiți interpretoare HTML de specialitate.

Unul dintre parser HTML de azi pentru .NET. Baza validator.nu luat parser pentru Java, iar aceasta, la rândul său, este un port al motorului interpretor, Gecko (Firefox). Acest lucru asigură faptul că parserul va procesa codul în același mod ca și browserele moderne.

API-ul se inspiră din jQuery, pentru a selecta elemente folosind limbajul selectori CSS. nume de metode copiate aproape o-la-unu, adică pentru programatori care sunt familiarizați cu jQuery, studiul va fi simplu.

Ea are de înaltă performanță. Pentru HtmlAgilityPack depășește + Fizzler pe interogări complexe de viteză.

Dacă doriți o interogare mai complexă, codul practic nu complicat:

Cea mai veche, și, prin urmare, cel mai popular parserul pentru .NET. Dar vârsta nu înseamnă calitatea, de exemplu, timp de cinci ani (.) Hanging descoperit bug critic de parsare incorectă a HTML4 tag-uri opționale de capăt. ceea ce conduce la manipularea incorectă a tag-uri HTML, tag-uri de închidere, care sunt opționale. API-ul conține ciudățenii, de exemplu, în cazul în care nimic nu este găsit, returnează null. în loc de o colecție goală.

Pentru a selecta elemente folosind limbajul XPath, și nu CSS selectoare. La cerere simplu cod este mai mult sau mai puțin ușor de citit:

Cu toate acestea, dacă aveți nevoie de interogări complexe, XPath nu este foarte adaptat pentru a simula selectori CSS:

Suprastructura la HtmlAgilityPack, permițând utilizarea selectori CSS.

Licență: BSD (3-clauza)

Un nou jucător pe analizatorilor teren. Spre deosebire de CsQuery, scris de la zero de mână în C #. De asemenea, include Derivatoare în alte limbi.

Printre alte ciudatenii - Biblioteca trage Microsoft BCL Portabilitate Pack. Prin urmare, atunci când cepul prin AngleSharp NuGet, nu fi surprins dacă ai găsi atașat trei pachete suplimentare: Microsoft.Bcl, Microsoft.Bcl.Build, Microsoft.Bcl.Async.

HTML Procesare este simplu:

Nu este complicat, și, dacă aveți nevoie de logica mai complexe:

Și teribile, Dreadful expresii regulate. le aplice nu este de dorit, dar este uneori necesar, ca Derivatoare care construiesc DOM, în special vorace decât Regex. și ei consumă mai mult timp CPU și memorie.

Dacă ați ajuns la expresia regulată, atunci trebuie să înțeleagă că nu se poate construi pe ele o soluție versatilă și absolut de încredere. Cu toate acestea, dacă doriți să analizeze un anumit site, problema poate să nu fie atât de critică.

Pentru numele lui Dumnezeu, nu au nevoie pentru a converti expresii regulate mizerie imposibil de citit. Nu scrie cod C # într-o singură linie cu o singură litere nume de variabile sau expresii regulate nu trebuie să se strice. motor expresie regulată în NET este suficient de puternic pentru a fi în măsură să scrie cod de calitate.

De exemplu, aici este un cod puțin modificat pentru a extrage link-uri de la o întrebare:

@Serginio Utilizarea outerHTML. Seleniul este instrumentele de terțe părți pentru HTML și parsarea încă face interpretoare, și despre care există un discurs. Acum, dacă este utilizat în mod direct - da, se dovedește după parserul DOM, două într-o singură. Seleniul poate doar XPath sau CSS-interogări, de asemenea? - Squidward 26 aprilie '16 la 10:56

Utilizați biblioteca CefSharp pentru rezolvarea unor astfel de probleme.

De ce folosesc această abordare?

Dacă proskrollite în jos, veți observa că, în plus față de scris un strat de cod mic și decizia initsialiatsii are una sau două linii:

Ce este?

Acesta a reușit înveliș peste MCE (Chromium Embedded cadru). Asta este, veți obține puterea de crom, care este controlat de software-ul.

De ce MCE / CefSharp?

soiuri CefSharp

Primele două sunt utilizate în cazul în care aveți nevoie pentru a oferi utilizatorilor controlul la „Browser“. Conceptual similar cu WebBrowser în Windows Forms, care este un înveliș pentru controlul IE în loc de crom, la fel ca în cazul nostru.

Prin urmare, vom folosi CefSharp.OffScreen (voiceover) specii.

scris codul

Să presupunem că avem o aplicație consolă, dar depinde de tine.

Nuget-instala versiunea pachet CefSharp.OffScreen 57th:
Instalați-Pachet CefSharp.OffScreen -versiunea 57.0.0

Puteți avea un mod de a trata erorile.

Crearea unei CefSharpWrapper clasă:

În continuare ne numim clasa noastră CefSharpWrapper metoda principală.

De asemenea, setați x64 sau x86 ca platformă. Orice platformă CPU acceptat, dar necesită cod suplimentar.

Tu ar fi neajunsurile abordării, de asemenea, a scris: rula un motor cu drepturi depline browser-ul de 100 de ori mai lent, decât pentru a analiza DOM, și de 1000 de ori mai lent decât analiza sezonul regulat. ) Atât de distractiv cu binarele adăugat. Este logic să utilizeze, cu excepția pe un site complet dinamic, în care să înțeleagă măruntaie lenea, și alte cazuri de hard-core. - Squidward 28 noiembrie '16 la 11:29

nu sunt de acord ferm cu privire la performanță. Nu am observat nici o diferență semnificativă între HtmlAgilityPack parsare, sezonul regulat și în felul meu. - Vadim Ovchinnikov 28 noiembrie '16 la 11:38