Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde!
Preciso pegar informações que estão contidas em divs em um HTML.
HTML:
<div id="fundo_conteudo_noticia_setor" class="textogeral marrom">
<div id="data_noticia_setor" class="textogeral_bold verde">Data</div>
<div id="conteudo_noticia_setor">
<a href="noticia_interna.asp?id=13692" class="sublinhado verde">
<span class="titulo_destaque_bold verde">Título<br>
<span class="titulo_destaque verde">Categoria</span>
</span>
<br><br>
</a>
Resumo do conteúdo...
</div>
</div>
<div id="seta_noticia_setor"><i class="fa fa-angle-right fa-3x verde"></i></div>
</div>
E este é o PHP que estou utilizando para pegar as informações. Porém, ao pegar o título da notícia, está trazendo o $result['titulo'], está retornando junto os elementos filhos.
if(!$data = file_get_contents("meusiteteste.com.br")){
$results = false;
} $html = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $data);
$doc = new DomDocument();
@$doc->loadHTML($html);
$xpath = new DomXpath($doc);
$entries = $xpath->query("//div[@id=\"conteudo_noticia_setor\"]");
$results = array();
foreach ($entries as $entry){
$node = $xpath->query("a/attribute::href", $entry);
$result['link'] = $node->item(0)->value;
echo $result['link'].'<br>';
$node = $xpath->query("a/span[contains(@class, 'titulo_destaque_bold')]", $entry);
$result['titulo'] = $node->item(0)->nodeValue;
echo $result['titulo'].'<br><br>';
}
}
Está imprimindo: TituloCategoria
Gostaria de tirar o conteúdo do span que consta dentro, porém não sei como proceder. Alguém pode me dar uma força? haha@Maykel-ctba
Conhece esse cara?
http://simplehtmldom.sourceforge.net/
A vantagem dele comparado ao DomDocument() é que funciona mesmo se o HTML está 'quebrado'
Se liga no exemplo da documentação:
<?php
// Create DOM from string
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');
$html->find('div', 1)->class = 'bar';
$html->find('div[id=hello]', 0)->innertext = 'foo';
echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div>
No caso só substituir o str_get_html por:
$html = file_get_html('http://www.google.com/');
(Ou CURL dependendo da complexidade para a requisição)@Vinicius Rangel eu não tenho como manipular o conteúdo de origem. Por isso, não consegui fazer a divisão antes!
@gabrieldarezzo Legal essa variação! Porém, mesmo com essas funções, caio no mesmo problema. Preciso pegar o conteúdo de uma div, e limpar todos os elementos filhos dele...
No caso de uma estrutura assim:
<div id="texto">
Texto
<div id="textoCat">
TextoCat
</div>
</div>
Ao pegar o conteúdo de #texto, ele vai concatenar com o de #textoCat. E preciso que me retorne sem os elementos filhos!De qualquer maneira creio que meu exemplo ainda vale...
$url = 'http://minhaurl.com.br';
$html = file_get_contents_curl($url);
$doc = new DOMDocument();
@$doc->loadHTML($html);
$title = $doc->getElementsById('texto')->item(0)->nodeValue;
testa esse código por favor
Você precisa adicionar alguma tag no conteúdo.. de preferência um P de paragrafo.
No código abaixo eu pego o primeiro elemento P visível no HTML.
Ai é só você estender para as outras tags necessárias.