Foros del Web » Programando para Internet » PHP »

Problema con PARSEADO y CODIFICACIÓN

Estas en el tema de Problema con PARSEADO y CODIFICACIÓN en el foro de PHP en Foros del Web. Hola que tal a todos: Bueno tengo el siguiente problema, estoy sacando noticas de una web, con SIMPLE_HTML_DOM, y pues me funciona bien, el problema ...
  #1 (permalink)  
Antiguo 28/08/2014, 12:28
Avatar de ikaroraul  
Fecha de Ingreso: octubre-2006
Ubicación: La Paz
Mensajes: 391
Antigüedad: 17 años, 7 meses
Puntos: 16
Exclamación Problema con PARSEADO y CODIFICACIÓN

Hola que tal a todos:

Bueno tengo el siguiente problema, estoy sacando noticas de una web, con SIMPLE_HTML_DOM, y pues me funciona bien, el problema esta que en la noticia, ciertos "PARRAFOS" no me los codifica bien y otros si, revizando el CODIGO DE LA PAGINA me di de cuenta que dento del DIV de donde saco la noticia, el texto que NO ESTA DENTRO DE UN TAG <p> me lo saca bien, pero cuando esta dentro de un tag <p> ahí es donde ya comienza los problemas, alguien sabe como puedo solucionar esto? pues cuando le coloco un utf8_decode() lo que estaba mal ya sale bien, pero lo que estaba bien ya se ve mal y viceversa. Tambien intente eliminando los <p>, pero el resultado es el mismo.

Bueno les dejo el codigo que utilizo:

Código PHP:
<?php 
include("simple_html_dom.php"); // Clase para parsear contenido
// PARSEADO PARA PAGINA SIETE
$URL 'http://www.paginasiete.bo/nacional/2014/8/28/vice-subsidio-bajara-cero-2016-producir-gasolina-30675.html';
$html file_get_html($URL);

foreach(
$html->find('h1[itemprop=name]') as $element
$TITULO $element->innertext '<br>'; }

$html file_get_html($URL);
foreach(
$html->find('h3[itemprop=description]') as $element
$CONTENIDO_A $element->innertext '<br>'; }


$html->find('div[class=w300]',-1)->innertext '';

foreach(
$html->find('div [id=noticiaint]') as $element

$CONTENIDO_B strip_tags($element->innertext'<p><b><strong><em><i><br><span>') . '<br>'
}


$CONTENIDO $CONTENIDO_A.$CONTENIDO_B;

echo 
$TITULO;
echo 
$CONTENIDO;

$html->clear();
unset(
$html);
?>

Nota: Les dejo una imagen de como se visualiza el texto, los puntos verdes son los acentos buenos, pero los puntos rojos ya son los malos (cuyo texto esta dentro de un tag <p>)

__________________
Msn: [email protected]
  #2 (permalink)  
Antiguo 29/08/2014, 08:41
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Problema con PARSEADO y CODIFICACIÓN

La próxima vez que subas una imagen, reduce el tamaño para que no pese tanto, no todos tenemos ordenadores potentes jejejeje

El problema de la codificación es sencillo, estás imprimiendo el resultado del parseo directamente dentro del script. Lo que tienes que hacer es eliminar los "echos" y pegarlos dentro del <body></body> de la web.

Ahora, el problema que tienes es que no enfocas bien el trabajo de parseo. (eso implica en que tengas que escribir tantas líneas para apenas sacar una noticia).

1.Toda la noticia está dentro de una etiqueta con la clase "col1", tienes que parsear desde ahí!
2.Hacer un foreach al resultado del parseo a "col1" y vas extrayendo los datos uno por uno:
h1, h3, etc...

Así es cómo debes de hacerlo con todo, fíjate la diferencia de tu código con mi código.

Código PHP:
<?php  
include("simple_html_dom.php"); // Clase para parsear contenido 
// PARSEADO PARA PAGINA SIETE 
$URL 'http://www.paginasiete.bo/nacional/2014/8/28/vice-subsidio-bajara-cero-2016-producir-gasolina-30675.html'
$html file_get_html($URL); 

$columna $html->find('div[class=col1]');

foreach(
$columna as $elemento) {
    
$item['titulo']      = $elemento->find('h1',0)->plaintext;
    
$item['descripcion'] = $elemento->find('h3',0)->plaintext;
    
$item['noticia']     = $elemento->find('div',7)->innertext;    
    
$CONTENIDO = array('titulo' => $item['titulo'], 'desc' => $item['descripcion'], 'noticia'=> $item['noticia']);
}

$html->clear(); 
unset(
$html); 
?>
NOTA: el ('div',7) incluye ya los párrafos <p></p>

Ahora ya solo te falta imprimir en el lugar que quieras dentro de la web tu variable $CONTENIDO

Código PHP:
<?=$CONTENIDO['sección']?>
De nada! ;)

Última edición por Triby2; 29/08/2014 a las 08:46 Razón: fallos de escritura
  #3 (permalink)  
Antiguo 29/08/2014, 10:01
Avatar de ikaroraul  
Fecha de Ingreso: octubre-2006
Ubicación: La Paz
Mensajes: 391
Antigüedad: 17 años, 7 meses
Puntos: 16
Respuesta: Problema con PARSEADO y CODIFICACIÓN

Gracias Triby2 por la ayuda, ahora mismo voy a probarlo, tengo una duda, dentro del resultado que devuelve:

$item['descripcion'] = $elemento->find('h3',0)->plaintext;

hay una IMAGEN, que es la imagen de la noticia, como haria para copiar solo el TEXTO, teniando en cuenta que en ciertas noticias tienen y otras no tienen la imagen.

Gracias!
__________________
Msn: [email protected]

Última edición por ikaroraul; 29/08/2014 a las 10:10 Razón: Correciones
  #4 (permalink)  
Antiguo 29/08/2014, 11:01
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Problema con PARSEADO y CODIFICACIÓN

Cita:
Iniciado por ikaroraul Ver Mensaje
Gracias Triby2 por la ayuda, ahora mismo voy a probarlo, tengo una duda, dentro del resultado que devuelve:

$item['descripcion'] = $elemento->find('h3',0)->plaintext;

hay una IMAGEN, que es la imagen de la noticia, como haria para copiar solo el TEXTO, teniando en cuenta que en ciertas noticias tienen y otras no tienen la imagen.

Gracias!
No lo devuelve esa linea ya que "->plaintext" significa texto plano y es lo que devuelve.

Lo que devuelve las imagenes es el div nº 7 ya que le solicitamos que nos devuelva el texto pero con su formato "->innertext".

Si no quieres que te envie esas imagenes tienes que poner "->plaintext" pero el formato no se traspasará.

Tendrás que formaterlo tú.

Etiquetas: html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:47.