konto usunięte

Temat: [php][pobieranie tekstu z html]

Mam za zadanie pobrać z pliku html o ścisłej i powtarzającej się strukturze kodu dane dotyczące ilości dostępnej (ze znacznika <td class="center">5</td> gdzie 5 oznacza ilość dostępna).

Mój kod powinien robić to tak:
1. odnajduje string CDATA
2. zwraca wartość wiersza o numerze pomniejszonym o 3

Niestety w teoria i praktyka się mijają i program nie zachowuje się jak trzeba:
1. odnajduje tylko niektóre stringi CDATA (a zawsze musi być 25)
2. gdy odejmę nr wiersza -3 to dostaję nie to co trzeba (wartość </td>, więc program odejmuje -2 (wtedy tylko działa)

Gdzie w kodzie php robię błąd? Z góry dziękuję za pomoc.

------------------------------------------------------------
dokument: http://republika.pl/pawlik52/wynik4.htm (wyciąłem niektóre niepotrzebne dane z nagłówków)
------------------------------------------------------------
Wycięty kawałek kodu html z powyższego dokumentu:
</td>
<td class="center">5</td>
<td class="center">
<script type="text/javascript">
//<![CDATA[
------------------------------------------------------------
Kod PHP:

<?php

$filename = 'http://republika.pl/pawlik52/wynik4.htm';
$handle = @fopen($filename, "r");

$i=1;
$j=0;
$needle = "CDATA";

while(!feof($handle)) { //PYTANIE 1: dlaczego pokazuje tylko kilka wartości (tu:14) chociaż zawsze powinno pokazywać 25?
$buffer = fgets($handle, 4096);
$buffer2[$j] = fgets($handle, 4096);

$nr = stripos($buffer, $needle);

if($nr!=0) {
echo $i." ";

//PYTANIE 2: dlaczego pokazuje żądaną wartość tylko wtedy, gdy $buffer2[$j-2], a nie gdy $buffer2[$j-3]?

echo "Ilosc od: ".($buffer2[$j-2])."<br>";

$i++;
}

$j++;

}

fclose($handle);
?>
------------------------------------------------------------
Wynik błędnego kodu (powinien zwracać 25 linii):

1 Ilosc od: pow. 20
2 Ilosc od: 2
3 Ilosc od: 20
4 Ilosc od: 1
5 Ilosc od: 10
6 Ilosc od: 4
7 Ilosc od: 7
8 Ilosc od: 1
9 Ilosc od: pow. 20
10 Ilosc od: pow. 20
11 Ilosc od: 8
12 Ilosc od: pow. 20
13 Ilosc od: pow. 20
14 Ilosc od: pow. 20
Michał Ławicki

Michał Ławicki dostawca zadowolenia

Temat: [php][pobieranie tekstu z html]

najprościej będzie preg_match_all + <td class="center">(\d+)</td>

konto usunięte

Temat: [php][pobieranie tekstu z html]

Dzięki za odzew. Wrzuciłem na szybko tę funkcję preg_match_all.

<?php
$filename = 'http://republika.pl/pawlik52/wynik4.htm';
$handle = @fopen($filename, "r");
$i=1;
while(!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $i." ";

//czy dobrze użyte?
preg_match_all("<td class=\"center\">(\\d+)</td>", $buffer, $matches, PREG_SET_ORDER);

foreach ($matches as $val) {
echo "ilosc: " . $val[3] . "\n";
}

$i++;
}
fclose($handle);
?>

Coś nie działa - czy dobrze jej użyłem?? Ponadto wyrażenie <td class="center">(\d+)</td> zawiera znaki specjalne " oraz /.

Ale najważniejszą rzeczą jest to, że znacznik <td class="center">WARTOŚĆ</td> w podanym dokumencie występuje prawie 150 razy a tylko w 25 przypadkach zawiera on potrzebne mi dane. Dlatego nie mogę się pozbyć szukania po CDATA, ponieważ tylko tak jestem w stanie określić czy znacznik <td class="center"></td> ma to co potrzebuję.

Mógłbyś wrzucić cały kod php? Nie wiem za bardzo w jakim kontekście chciałeś tej funkcji użyć, bo jestem pewien, że nie tak jak ja to zrobiłem :)
Michał Ławicki

Michał Ławicki dostawca zadowolenia

Temat: [php][pobieranie tekstu z html]

$html = file_get_contents( 'adres_strony' );
preg_match_all( '@<td class="center">(\d+)</td>@si', $html, $matches );
var_dump( $matches );

spróbuj czegoś w ten deseń

konto usunięte

Temat: [php][pobieranie tekstu z html]

Działa! Dzięki!!!

Następna dyskusja:

pobieranie tekstu z pliku h...




Wyślij zaproszenie do