2010-04-01 7 views
8

Ciao qualcuno può aiutarmi a selezionare un div specifico dal contenuto di una pagina web.Selezione di un div specifico da una pagina Web esterna utilizzando CURL

Diciamo che voglio ottenere il div con id="wrapper_content" dalla pagina web http://www.test.com/page3.php.

mio codice attuale simile a questa: (non funzionante)

//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; 

così mi piacerebbe sapere come posso usare espressioni reg per trovare una specifica div e come disinserire il resto la pagina Web in modo che $file_content contenga solo il div.

risposta

14

HTML isn't regular, quindi non si dovrebbe usare regex. Invece mi sento di raccomandare un parser HTML, come Simple HTML DOM o DOM

Se si dovesse andare ad utilizzare Simple HTML DOM si farebbe qualcosa di simile al seguente:

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

Anche se si è utilizzato espressione regolare il codice ancora wouldn' t funzionano correttamente. È necessario ottenere il contenuto della pagina prima di poter utilizzare regex.

//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

La funzione str_get_html() non è definita. perché? – huykon225

0

controllare il nostro hpricot, ti permette elegantemente selezionare sezioni

prima si può usare curl per ottenere il documento, quindi utilizzare hpricot per ottenere la parte è necessario

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

Scarica simple_html_dom.php

Problemi correlati