Nem túl gyakori, de azért megeshet, hogy a HTML-ből adatokat kellene kinyerni, például egy másik weboldalról. Szerencsés esetben erre van kész megoldása a kérdéses weboldalnak (pl. xml formában), de ez nem mindig van így és ilyenkor máshogy kell megoldani. A PHP elég jó megoldást ad a HTML forrásokból történő (DOM) adatok kinyerésére. De annál jóval többre is képes, viszont mivel nem túl gyakori, hogy erre szükség van, ezért csak nagyon alapszinten nézzük meg (de azért fontos tudni, hogy van ilyen is).
Először is egy DOMDocument példányt kellene létrehozni:
$dok = new DOMDocument();
Aztán egy HTML kódot kellene betölteni (ami lehet magában a php fájlban, lehet a tárhelyen egy külön fájlban, vagy éppen származhat másik weboldalról is). Erre a loadHTML szolgál:
$dok->loadHTML('
Ha másik weboldalról kell megszerezni a HTML forrást, akkor az megoldható a file_get_contents-el:
$dok->loadHTML(file_get_contents('https://videotanfolyam.hu'));
Most már dolgozhatunk a HTML forrással.
Elem megkeresése azonosító (id) alapján
Ez egy olyan elemet keres meg, aminek az azonosítója az, hogy "valami":
$elem = $dok->getElementById('valami');
Egy HTML elemet ad vissza, amivel különféle műveleteket lehet vele végezni, például a szöveges tartalmát megszerezni:
$elem->nodeValue;
Amit ki lehet íratni, stb.:
echo $elem->nodeValue;
A nodeValue csak a szöveges tartalmat adja vissza, a HTML-t nem.
Érdekel a PHP programozás az alapoktól az adatbázist használó weboldalak készítéséig?
Kattints ide oktató videókért!
Elem(ek) megkeresése tag alapján
Gyűjtsük össze a linkeket és írassuk ki a href tulajdonságaikat:
$linkek = $dok->getElementsByTagName('a');
foreach ($linkek as $link)
{
echo $link->getAttribute('href');
}
Vagyis a getAttribute szolgál a különféle elem tulajdonságok megszerzésére, pl. title, class, id, stb.:
$elem->getAttribute('src');
$elem->getAttribute('id');
$elem->getAttribute('class');
Elem(ek) megkeresése azonosító (class) alapján
Ebben az XPath (XML Path Language) nyújt segítséget, ami egy lekérdező nyelv elemek kiválasztásához valamilyen HTML vagy XML dokumentumból. Sokkal összetettebb feltételek megfogalmazására is ad lehetőséget.
A már korábban betöltött HTML forrásra lesz szükség:
$xpath = new DOMXPath($dok);
"valami" class-szal rendelkező elemek kiválasztása (mindegy, hogy milyen típusú elem):
$elemek = $xpath->query('//*[@class="valami"]');
De lehet szűkíteni elem típusra, például div-re, ilyenkor a csillag helyére kerül az elem:
$elemek = $xpath->query('//div[@class="valami"]');
Viszont ugyanazzal a class-szal több elem is rendelkezhet és egy tömb keletkezik, ezért erre figyelni kell:
foreach ($elemek as $elem)
{
echo $elem->nodeValue;
}
A tömb egyes elemeit közvetlenül is el lehet érni:
$elemek[0]->nodeValue;
Elemben lévő elemek kiválasztása
Egy gyakori eset, hogy egy adott elemben lévő további elemeket kell megkeresni, például egy adott class-szal, id-val rendelkező div-ben lévő linkeket (a):
$elemek = $xpath->query("//div[@class='valami']/a");
A / jelzi, hogy az előtte lévő elemben kell lennie. De lehet id is:
$elemek = $xpath->query("//div[@id='valami']/a");
Nagyon röviden ennyi, a php.net-en bőven található erről leírás.

Termék tesztek, hírek, bemutatók ✦ mobilok, okosórák, médialejátszók, stb. ✦ kattints ide!