Preluare date cu php dintr-o pagina HTML

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
MelecaCristian
Mesaje:176

Preluare date cu php dintr-o pagina HTML

Buna prieteni din comunitatea Marplo,
Incerc sa preiau date dintr-un cod, a unei pagini (mainFrame.cgi), mai exact vreau sa preiau doar numarul generat Total: 11162.

Imi returneaza urmatoarea eroare:

Cod: Selectaţi tot

Warning: preg_match(): Unknown modifier '(' in C:\xampp\htdocs\index.php on line 16
Not found
Nu mai inteleg, daca pun ceva simplu gen

Cod: Selectaţi tot

$regex = '<title>(.*?)<\/title>/s';
- merge perfect, dar daca vreau sa preiau nr din acel cod html imi da eroare de mai sus.

Fragment html (daca este nevoie am sa il trimit tot):

Cod: Selectaţi tot

<tbody><tr class="staticProp"><td nowrap=""><img src="/images/settingBullet.gif" alt="" title=""></td><td nowrap="" align="left">Total</td><td nowrap="">:</td><td nowrap="">11162</td><td></td></tr></tbody>
Codul php:

Cod: Selectaţi tot

<?php
$curl = curl_init('http://192.168.1.151/web/guest/en/websys/webArch/mainFrame.cgi');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

$page = curl_exec($curl);

if(curl_errno($curl)) // check for execution errors
{
	echo 'Scraper error: ' . curl_error($curl);
	exit;
}

curl_close($curl);

$regex = '<tr class="staticProp">(.*?)<\/tr>/s';
if ( preg_match($regex, $page, $list) )
    echo $list;
else 
    print "Not found"; 
?>
Multumesc anticipat!
„Uneori o greşeală poate fi tot ce este necesar pentru o realizare valoroasă.” — Henry Ford

misat Mesaje:22
In exemplul care l-ai prezentat, expresia regulara nu este scrisa corect, aceasta tre sa inceapa si sa se termine cu acelasi simbol care nu este cifra, litera si alte simboluri "interzise", de obicei se utilizeaza # (dar nu e obligator - se pot utiliza si altele).
Deasemeni penultimul simbol "/" corect ar fi sa fie "\/" (cu toate ca nu am inteles rostul lui)
Corect ar fi:

Cod: Selectaţi tot

$regex = '#<tr class="staticProp">(.*?)<\/tr>\/s#';
In exemplul de code HTML nu am vazut clasa staticProp, deci nu imi e clar complet "conditiile problemei"...
Utilizind continutul variabilei $page care ai indicat-o expresia regulara tre sa arate cam asa:

Cod: Selectaţi tot

$regex = '#<td nowrap="">(\d+)<\/td>#';

MelecaCristian Mesaje:176
Nu a functionat din pacate.

aceasi eroare imi da:(

Multumesc oricum de ajutor!
„Uneori o greşeală poate fi tot ce este necesar pentru o realizare valoroasă.” — Henry Ford

misat Mesaje:22
Am facut un mic test. In exemplul meu lucreaza bine, codul e mai jos:

Cod: Selectaţi tot

<?php
    $curl = curl_init('http://test.lh');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

    $page = curl_exec($curl);

    if(curl_errno($curl)) // check for execution errors
    {
        echo 'Scraper error: ' . curl_error($curl);
        exit;
    }

    curl_close($curl);

    $regex = '#<td nowrap="">(\d+)<\/td>#';;
    if ( preg_match($regex, $page, $list) )
        print_r( $list );
    else
        print "Not found";
?>
test.lh returneaza:

Cod: Selectaţi tot

<tbody><tr class="staticProp"><td nowrap=""><img src="/images/settingBullet.gif" alt="" title=""></td><td nowrap="" align="left">Total</td><td nowrap="">:</td><td nowrap="">11162</td><td></td></tr></tbody>

MarPlo Mesaje:4343
Salut
Am testat si eu acest cod:

Cod: Selectaţi tot

$page ='<tbody><tr class="staticProp"><td nowrap=""><img src="/images/settingBullet.gif" alt="" title=""></td><td nowrap="" align="left">Total</td><td nowrap="">:</td><td nowrap="">11162</td><td></td></tr></tbody>';
$regex = '#\:\</td\>\<td nowrap=""\>(\d+)\</td\>#';
if(preg_match($regex, $page, $list)){
  var_export($list);
}
else print 'Not found';
Afiseaza:

Cod: Selectaţi tot

array ( 0 => '11162', 1 => '11162', )

Subiecte similare