» »

[PHP] XML parsanje HTML-ja

[PHP] XML parsanje HTML-ja

Binji ::

No torej... rad bi parsal HTML stran kot XML dokument in iz tega dobil neke podatke. Vem, da se ponavadi to dela z regularnimi izrazi, vendar ne vidim, zakaj tega ne bi mogel narediti tako, saj je html stran v bistvu XML oblikovan dokument.
Nekaj sem se tudi že trudil z uporabo DOMDocument, vendar mi ni čisto uspelo... Tole sem napisal za test:
$web = fopen("http://neka-stran.com", "rb");
$local = fopen("file.txt", "w");
$content = stream_get_contents($web);

$doc = new DOMDocument();
$doc->loadXML($content);

fwrite($local, $doc->saveXML());

vendar v file.txt dobim samo
<?xml version="1.0"?>


podatke sigurno dobim, ker ce izpisem v file.txt kar $content, potem dobim noter html dokument.

Če ima kdo kakršenkoli komentar, bi ga bil zelo vesel. Predvsem zakaj trenutno stvar ne deluje in če ima kdo kakšno boljšo idejo. Parsanje z regularnimi izrazi mi namreč čisto nič ne diši...

Trenutno tudi uporabljam PHPEclipse kot IDE, ki pa izgleda DOMDocument sploh ne prepozna. Vseeno bi morala moja skripta delovati.. vsaj napak mi ne javlja ob izvedbi, pa tudi vsaj header izpiše ob saveXML. V tem primeru.. mi zna kdo priporočiti boljši IDE?
Kdor ne navija ni Slovenc, hej, hej, hej!
  • spremenil: Binji ()

WarpedGone ::

Lol, točno s temle se ubadam zadnje par dni :)
Js se igram v Lazarus/FreePascal.

Moj pristop:
- wget skine html nekam na lokalni disk
- tidy iz tega html-ja nardi XML
- ta xml preberem v mem
ToDo:
- preko XPath filtriram željene reči
- izvoz sfiltriranih podatkov v tab-delimited obliki
Zbogom in hvala za vse ribe

arjan_t ::

imaš tudi metodo loadHTML()

Binji ::

Heh, to je pa to, ko se čisto razvadis z auto-complete... :)
Hvala arjan
Kdor ne navija ni Slovenc, hej, hej, hej!

fiction ::

Vem, da se ponavadi to dela z regularnimi izrazi, vendar ne vidim, zakaj tega ne bi mogel narediti tako, saj je html stran v bistvu XML oblikovan dokument.

Ni res. Regularni izrazi NISO nacin kako se parsa XML niti HTML! Jezik, ki ga opisujejo regularni izrazi je precej omejen. Nekateri, ki se prvic srecajo s tem, mislijo kako lahko vse naredijo samo z regexpi (in vcasih tudi da so prijeli boga za jajca, ker znajo napisati en simpel regexp, ampak pustimo zdaj to), samo to ni cisto res - recimo a^n b^n za poljuben n se ne da zapisati na noben nacin z regularnimi izrazi. Se pa strinjam, da je za vecino uporabnih scenarijev, kjer je treba nekaj "izvleci" iz strani, to cisto dovolj dobra resitev. Se je pa treba zavedati, da je to "hack" in imas vedno lahko primer, ki ne bo dobro delal.

XML je naceloma kontekstno neodvisna gramatika, sicer res da je tagov samo koncno mnogo in tako naprej in bi zato lahko rekli, da je jezik regularen, ampak delo z regexpi rata lahko zaradi tega zelo, zelo mucno (moras nastevati vse moznosti itd.). Torej, ce delas z XML-jem uporabi ali pa napisi svoj XML parser.

Kar se tice HTML-ja. HTML bazira na SGML opisnem jeziku. XML je pa (za lazjo predstavo) ena podmnozica tega, ki specificira, da morajo biti tagi vedno tudi zaprti, pravilno gnezdeni itd.

<br><b><u>Whatever</b></u> je primer veljavnega HTML-ja, ki pa ni istocasno tudi veljaven XML. Br se odpre in nikjer ne zapre pa tudi u in b nista pravilno gnezdena (tisti ki se prvi odpre, bi se moral tudi prvi zapreti). XHTML je tak HTML, ki je razisrljiv in ustreza XML pravilom.

Torej ce imas XHTML stran bo XML parser super, ce ne bos pa zelo verjetno imel probleme, kajti pravi SGML parser (ki bi tisto pogoltnil) je bolj kompleksen. Je pa jasno tudi omejen HTML parser tezko vzeti za XML, ki je razsirljiv.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

kopiranje dela teksta iz večih datotek

Oddelek: Programska oprema
10807 (648) kerrigh
»

[Java] Regularni izraz

Oddelek: Programiranje
81118 (970) jan_g
»

c# regularni izraz

Oddelek: Programiranje
202013 (1711) darkolord
»

kako pobrat iz html kode podatke

Oddelek: Izdelava spletišč
131738 (1408) qshop
»

Regularni izrazi....

Oddelek: Programiranje
352335 (1724) BigWhale

Več podobnih tem