Ostatnio miałem potrzebę pobrania tabeli z cenami metali( miedź, nikiel, mosiądz).. Znalazłem coś takiego na money –> http://www.money.pl/gielda/surowce/ . Aby wstawić to na swoją stronę musiałem dokonać kilku przeróbek skryptu. Plik skryptu nazywa się: ex_dumpurl.php. Oto jego zawartość wraz z komentarzami aby można go było łatwiej przerobić na swoje potrzeby (pamiętaj że był pisany pod tabelę z linka jak powyżej):
$start=0;
$licznik=0;
include („htmlparser.inc”); //załączenie biblioteki
$parser = HtmlParser_ForURL („http://www.money.pl/gielda/surowce/”); //adres parsowanego pliku
while ($parser->parse()) { // stąd zaczyna się parsowanie każdego znacznika, atrybutu i wartości z pliku html
$licznik++;
if ($parser->iNodeName==”table”) $start+=1; // $start zawiera liczbę wystąpień słowa „table”
if ($start==3){ // w tym przypadku moja tabela zaczyna się od 3-ego wystąpienia 'table’ (przeanalizowałem kod z parsowanej strony)
if (($parser->iNodeName<>”img”) && ($parser->iNodeName<>”Text”) && ($parser->iNodeName<>”tr”)) echo „<„.$parser->iNodeName.”>”; //jeśli znacznik html jest inny niż IMG i TEXT i TR to wypisz go
if (($parser->iNodeName<>”img”) && ($parser->iNodeName<>”Text”) && ($parser->iNodeName==”tr”)) echo „<„.$parser->iNodeName.” bgcolor=#dddddd>”; // jesli znaleziony znacznik to TR – nadaj mu kolor tła szary
if ($parser->iNodeType == NODE_TYPE_TEXT || $parser->iNodeType == NODE_TYPE_COMMENT) {
echo iconv(„ISO-8859-2″,”UTF-8”,$parser->iNodeValue); //wypisuje wartość komórki skonwertowaną z ISO na UTF8
}
if ($parser->iNodeType == NODE_TYPE_ELEMENT) {
$attrValues = $parser->iNodeAttributes;
$attrNames = array_keys($attrValues);
$size = count($attrNames);
for ($i = 0; $i < $size; $i++) {
$name = $attrNames[$i];
// echo $attrNames[$i] . „=\”” . $attrValues[$name] . „\” „;
}
}
echo „\r\n”;
}
}
?>
Gdyby był problem ze skopiowaniem tego kodu, znajdziesz go także w poniższej paczce:
pobierz phphtmlparser
a tutaj żywy przykład działania parsera: przykład