2010-04-01 7 views
8

Witam, czy ktoś może mi pomóc wybrać konkretny element div z treści strony internetowej.Wybieranie określonego elementu div z zewnętrznej strony internetowej przy użyciu CURL

Załóżmy, że chcesz uzyskać wartość div za pomocą id="wrapper_content" ze strony internetowej http://www.test.com/page3.php.

Mój obecny kod wygląda mniej więcej tak: (nie pracuje)

//REG EXP. 
$s_searchFor = '@^/.dont know what to put [email protected]';  

//CURL 
$ch = curl_init(); 
$timeout = 5; // set to zero for no timeout 
curl_setopt ($ch, CURLOPT_URL, 'http://www.test.com/page3.php'); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
if(!preg_match($s_searchFor, $ch)) 
{ 
    $file_contents = curl_exec($ch); 
} 
curl_close($ch); 

// display file 
echo $file_contents; 

więc chciałbym wiedzieć, w jaki sposób można używać wyrażeń reg znaleźć konkretne div i jak rozbrojony reszta strona internetowa, tak aby $file_content zawierał tylko element div.

Odpowiedz

14

HTML isn't regular, więc nie powinieneś używać wyrażeń regularnych. Zamiast tego polecam HTML Parser takich jak Simple HTML DOM lub DOM

Jeśli zamierzali użyć prostego HTML DOM zrobiłbyś coś jak następuje:

$html = str_get_html($file_contents); 
$elem = $html->find('div[id=wrapper_content]', 0); 

Nawet jeśli używane regex kodu nadal wouldn” t działa poprawnie. Zanim skorzystasz z wyrażenia regularnego, musisz pobrać zawartość strony.

//wrong 
if(!preg_match($s_searchFor, $ch)){ 
    $file_contents = curl_exec($ch); 
} 

//right 
$file_contents = curl_exec($ch); //get the page contents 
preg_match($s_searchFor, $file_contents, $matches); //match the element 
$file_contents = $matches[0]; //set the file_contents var to the matched elements 
+0

Funkcja str_get_html() nie jest zdefiniowana. czemu? – huykon225

0

sprawdzić naszą hpricot, pozwala elegancko wybierz sekcje

najpierw należałoby użyć curl dostać dokument, a następnie użyć hpricot dostać część trzeba

4
include('simple_html_dom.php'); 
$html = str_get_html($file_contents); 
$elem = $html->find('div[id=wrapper_content]', 0); 

Pobierz simple_html_dom.php

Powiązane problemy