Parsează html folosind C (Programare, Html, C, Regex, Parsing)

utilizator185216 a intrebat.

Am nevoie să preiau niște conținut dintr-o pagină HTML (XHTML valid). Preiau pagina folosind curl și o stochez în memorie.

M-am jucat cu ideea de a folosi regex cu librăria PCRE, dar pur și simplu nu am putut găsi exemple care să o folosească cu C. Apoi am trecut la căutarea de analizoare HTML și din nou nu există o selecție bună. Tot ce am putut găsi a fost un modul slab documentat pentru libxml numit HTMLparser.

Există vreo alternativă? Dacă nu, atunci exemple pentru ceea ce am găsit deja?

Comentarii

  • Legătură obligatorie către avertismentul împotriva parsării HTML cu expresii regulate: stackoverflow.com/questions/1732348/… –  > Por moopet.
  • Referitor la următorul link am scris întreaga soluție folosind librăria C libxml2 pentru platforma Windows. stackoverflow.com/questions/5465965/… -…  > Por Pankaj Vavadiya.
5 răspunsuri
Byron Whitlock

Doriți să utilizați HTML tidy pentru a face acest lucru. Pagina Lib curl are câteva coduri sursă pentru a vă începe. Documente care traversează arborele dom. Nu aveți nevoie de un parser xml. Nu dă greș în cazul unui html prost format.

http://curl.haxx.se/libcurl/c/htmltidy.html

Comentarii

  • Iată ce am sfârșit prin a implementa. Nu am simțit nevoia să scot un parser xml înfometat pentru a lua doar o singură linie de text. Mulțumiri – user185216
Michael Krelin – hacker

Eu aș folosi libhtmltidy + orice parser xml cum ar fi expat sau libxml. Depinde de ceea ce căutați.

Comentarii

  • Doar pentru informarea cititorului… Analizoarele HTML sunt programe pentru analiza automată a limbajului de marcare a hipertextului (HTML). Ele au două scopuri principale: Traversarea HTML: oferă o interfață pentru programatori care să acceseze și să modifice cu ușurință „codul șirului HTML”. Exemplu canonic: Analizatoarele DOM. HTML clean: corectarea HTML-urilor invalide și îmbunătățirea aspectului și a stilului de indentare a marcajelor rezultate. Exemplu canonic: HTML Tidy. –  > Por Pankaj Vavadiya.
Tony Miller

Dacă doriți să analizați XML folosind C, atunci cel mai bun mod de a proceda este, de departe, să utilizați biblioteca LibXML. Pagina principală este la http://xmlsoft.org/. În plus față de descărcările lor, ei au o listă explicită exemple de cod care arată în mod specific cum să gestioneze analizarea. Știu sigur că se pot obține versiuni precompilate pentru Mac și Windows, majoritatea distribuțiilor Linux și BSD îl au deja inclus și, dacă doriți, îl puteți construi din sursă.

Comentarii

  • Bună alegere, dar se va bloca pe html stricat, așa că l-aș trece mai întâi prin libtidy. –  > Por Michael Krelin – hacker.
Anton Kochkov

Google a creat recent o bibliotecă C99 pură pentru analizarea HTML, în special HTML5. Este ușor de utilizat în orice program C și este dezvoltată în mod activ.

https://github.com/google/gumbo-parser

Comentarii

  • Majoritatea modificărilor sunt de acum 2 ani, standardul HTML5 a fost deja definit, nu este codul puțin depășit? –  > Por Lucas Steffen.
EgoPingvina

Analizator rapid C/C++ HTML 5. Folosind fire de execuție.https://github.com/lexborisov/myhtml

Comentarii

  • Proiectul myhtml pare să fie pe sfârșite și propune utilizarea lexbor (github.com/lexbor/lexbor) în schimb. –  > Por Brecht Sanders.
  • Da, aveți dreptate. Ultima actualizare a fost înlocuită în ea. –  > Por EgoPingvina.