T&R splet blog o spletnih storitvah. Razgaljamo tehnologijo!

reference spletnih strani
10th October

Parse podatkov s spletne strani – php DomDocument

Na forumih prebiram veliko vprašanj kako iz določene spletne strani ali določenega spletnega servisa dobiti določene podatke in v večini programerji uporabijo regex (regular expressions). V večini primerov se zaradi zapletenosti regex izrazov tako zapletejo, da obupajo ali pa uporabijo regex izraz na spletu, ki ga ne razumejo popolno in le delno ustreza njihovim željam. Veliko bolj elegantna rešitev je uporaba PHP DOM knjižnice.

Katere podatke zna prebrati DOM knjižnica

Document Object Model podpira branje podatkov iz HTML ali XML vira. Dodatna prednost je v tem, da zna prebrati tudi spletne strani, ki niso popolnoma validirane oz. imajo kar precej ne validirane kode, kar zna biti pri regex izrazih problem, saj je težko vključiti vse izjeme, ki se pojavijo zaradi ne standardne kode.

DOM XPath

S pomočjo XPath jezika lahko preko DOM Xpath modula iz HTML/XML vira pridobimo točno določene node. Rezultat XPath kljica je DOMNodeList, kar pomeni, da lahko uporabimo foreach.

Preprost primer pridobivanja vseh povezav

PHP:
  1. $html = new DOMDocument();
  2. $html->loadHtmlFile( 'http://www.trsplet.si/blog/index.php' );
  3.  
  4. // Pridobimo vse linke
  5. $xpath = new DOMXPath( $html );
  6. $links = $xpath->query( '//a' );
  7.  
  8. // Izpišemo vse linke
  9. foreach ( $links as $link ) {
  10.    echo $link->getAttribute( 'href' ), "\n";
  11. }

Izpis vseh cell elementov iz XML vira

PHP:
  1. $doc = new DOMDocument();
  2. @$doc->loadXML(file_get_contents('xml_match_prices/prices.xml'));
  3. $tables = $doc->getElementsByTagName("Table");
  4.  
  5. foreach($tables as $table) {
  6.     $prices = $table->getElementsByTagName("Cell");
  7.  
  8.     for ($i=0; $i <$prices->length; $i++) {
  9.         echo $prices->item($i)->nodeValue."\n";
  10.     }
  11. }

Primer, kako lahko enostavno izpišemo DomNodeList

PHP:
  1. function createNewDomFromNodes($nodeList) {
  2.     // Kreiramo nov DomDocument
  3.     $newDom = new DOMDocument('1.0','UTF-8');
  4.     $root = $newDom->createElement('root');
  5.     $root = $newDom->appendChild($root);
  6.    
  7.     // Dodamo vse elemente v root node
  8.     foreach ($nodeList as $domElement){
  9.         $domNode = $newDom->importNode($domElement, true);
  10.         $root->appendChild($domNode);
  11.     }
  12.    
  13.     // izpis kreirane DOM strukture v XML formatu
  14.     return $newDom->saveXML());
  15. }
  16.  
  17. // Izpis vseh linkov, ki smo jih pridobili pri prvem primeru
  18. echo createNewDomFromNodes($links);

Zanimivosti

DOM knjižnica je del PHP core, kar jo naredi še bolj uporabno saj jo lahko uporabimo na vseh strežnikih, kjer teče PHP5+. Podpira malo morje nastavitev, lahko izključimo javljanje napak pri ne validirani kodi.

Dodatne informacije

Upam, da se boste sedaj namesto uporabe regex izrazov raje odločili za uporabo DOM knjižnice. Ker bi bil vodič predolg bom naslednjič dodal še nekaj funkcij, ki jih boste zagotovo potrebovali pri kakšnih bolj zapletenih operacijah.

Deli s skupnostjo:

  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Podobni članki:

  1. DOMDocument – uporabne funkcije
  2. Postopek izdelave spletne strani
  3. Vpis nove internetne (spletne) strani
  4. Optimizacija spletne strani – zastrupljanje spleta?
  5. Optimizacija spletne strani za iskalnike – iskalniku prijazna spletna stran – SEO
  6. Omejitev dostopa do spletne strani preko apache .htaccess in .htpasswd datoteke
  7. PHP – izpis podatkov – dump – razhroščevanje – debugiranje
  8. MySQL dupliciranje podatkov z INSERT INTO SELECT stavkom
  9. Hitri vnos/uvoz podatkov v MySQL preko LOAD DATA INFILE
  10. Kako dodati novega root uporabnika – cPanel – centOS – whm

1 komentar na “Parse podatkov s spletne strani – php DomDocument”

  1. DOMDocument – uporabne funkcije | .: TRSplet - internetne storitve :. je napisal:

    [...] blog > DOMDocument - uporabne funkcije « Parse podatkov s spletne strani – php DomDocument 11th [...]

Dodaj komentar