Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Web Lucas Oliveira

Usar Expressão Regular pra pegar conteudo de tag

Recommended Posts

Fala ae pessoal.

 

Estou com uma dificuldade.

 

Estou começando a mexer com expressões regulares e encontrei um problema.

 

Usando cURL eu pego todo o html de uma página e quero pegar o conteúdo das tags de h2.

 

Mas não to conseguindo não sei porque.

 

Ele pega os conteúdos junto. Só retira algumas coisas.

 

Dêem uma olhada no código:

 

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.site.com.br");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FILETIME, true);

$output = curl_exec($ch);

$nao_existe = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if($nao_existe == '404'){
echo 'Erro no script. Página não existe.';
}else{
if(ereg('(<[hH][2]>.*</[hH][2]>)', $output, $conteudo)){
	print_r($conteudo);
}else{
	echo 'Nao foi achado.';
}
}
?>

 

Acho que consegui mas ele só ta pegando a primeira tag <h2>

 

As outras ele não pega.

 

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://br.kekanto.com/cat/rj/rio-de-janeiro");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FILETIME, true);

$output = curl_exec($ch);

$nao_existe = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if($nao_existe == '404'){
echo 'Erro no script. Página não existe.';
}else{
if(ereg('<[hH][2]>[^>]+</[hH][2]>', $output, $conteudo)){
	$conta = count($conteudo);
	$i = 0;
	while($i <= $conta){
		echo $conteudo[$i];			
		$i++;
	}
}else{
	echo 'Nao foi achado.';
}
}
?>

 

Acho que consegui mas ele só pega o primeiro <h2>

 

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://br.kekanto.com/cat/rj/rio-de-janeiro");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FILETIME, true);

$output = curl_exec($ch);

$nao_existe = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if($nao_existe == '404'){
echo 'Erro no script. Página não existe.';
}else{
if(ereg('<[hH][2]>[^>]+</[hH][2]>', $output, $conteudo)){
	$conta = count($conteudo);
	$i = 0;
	while($i <= $conta){
		echo $conteudo[$i];			
		$i++;
	}
}else{
	echo 'Nao foi achado.';
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode utilizar algum parser, tais como SimpleXML, DOMDocument ..

<?php
$cURL = curl_init ( ) ;

curl_setopt ( $cURL , CURLOPT_URL , 'http://br.kekanto.com/cat/rj/rio-de-janeiro' ) ;
curl_setopt ( $cURL , CURLOPT_RETURNTRANSFER , true ) ;
curl_setopt ( $cURL , CURLOPT_FOLLOWLOCATION , true ) ;
curl_setopt ( $cURL , CURLOPT_FILETIME , true ) ;

$output = curl_exec ( $cURL ) ;
$httpCode = curl_getinfo ( $cURL , CURLINFO_HTTP_CODE ) ;

if ( $httpCode !== 404 ) {

	libxml_use_internal_errors ( true ) ;
	$dom = new DOMDocument ( ) ;


	$dom->preserveWhiteSpace = false ;
	$dom->loadHTML ( $output ) ;

	foreach ( $dom->getElementsByTagName ( 'h2' ) as $node ) {
		$nodes [ ] = utf8_decode ( $node->nodeValue ) ; 
	}

	echo '<pre>';
		var_dump ( $nodes ) ;
	echo '</pre>';
}

 

Saída:

array(21) {
 [0] => string(70) "Veja onde ir em Rio de Janeiro: Melhores lugares  - Rio de Janeiro/RJ "
 [1] => string(27) "Cristo Redentor - Corcovado"
 [2] => string(17) "Praia do Arpoador"
 [3] => string(15) "Jardim Botânico"
 [4] => string(43) "Fundação Teatro Municipal do Rio de Janeiro"
 [5] => string(13) "Delirium Café"
 [6] => string(16) "Roberta Sudbrack"
 [7] => string(11) "Mundo Verde"
 [8] => string(10) "Mil Frutas"
 [9] => string(6) "LecadÔ"
 [10] => string(31) "Batata Inglesa-Shopping Rio Sul"
 [11] => string(22) "Pista Claudio Coutinho"
 [12] => string(6) "Mr Lam"
 [13] => string(27) "Stuzzi - Bar de Stuzzichini"
 [14] => string(15) "Praia do Leblon"
 [15] => string(27) "Churrascaria Estrela do Sul"
 [16] => string(22) "Restaurante Via Farani"
 [17] => string(30) "Salão de Beleza Lenes Coiffeur"
 [18] => string(12) "Boate Papa G"
 [19] => string(19) "Outback Steak House"
 [20] => string(18) "Pampa Grill-Centro"
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evite usar a função ereg, ela é obsoleta. Para pegar todos as tags que casam com sua ER use a função preg_match_all.

 

A solução que o Andrey apresentou também é bem interessante. natal_happy.gif

 

Vou dar uma olhada na função do Andrey mas queria saber como fazer com preg_match também.

 

Eu usei essa função e ele não me retorna nada.

 

Mesmo eu botando '/' barra em volta da ER...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.