Foros del Web » Programando para Internet » PHP »

PHP para novatos: Simple HTML DOM Parser

Estas en el tema de PHP para novatos: Simple HTML DOM Parser en el foro de PHP en Foros del Web. Hola a todos. Hoy he decidido aventurarme a PHP. He estado leyendo y tal y ya voy consiguiendo sacar mis cosillas....Ahora me he planteado con ...
  #1 (permalink)  
Antiguo 04/06/2013, 15:44
 
Fecha de Ingreso: agosto-2008
Mensajes: 89
Antigüedad: 16 años, 3 meses
Puntos: 1
Desacuerdo PHP para novatos: Simple HTML DOM Parser

Hola a todos.
Hoy he decidido aventurarme a PHP. He estado leyendo y tal y ya voy consiguiendo sacar mis cosillas....Ahora me he planteado con ¿cómo parsear un html?

He indagado, y he encontrado el HTML DOM Parser. El tema es que con esta librería es muy fácil encontrar datos si todos tienen un id o class distintos...que pasa si tengo todo el rato lo mismo¿?

Por ejemplo, quiero parsear una web entera de resultados de precios de gasolina. Para el ejemplo usaré mejor un pueblo pequeño que solo de un resultado....

Query Ministerio de industria

Código:
<div id="divDataResultsTable">
		<table cellpadding="3" cellspacing="0" class="tableData">
			<tbody><tr class="trHeader">
				
					<th class="thMedium" onclick="orderBy('c')">Province</th>
				
				
					<th class="thMedium" onclick="orderBy('e')">Town/City</th>
				
				
					<th class="thXLong" onclick="orderBy('g')">Address</th>
				




				
					<th class="thXShort" onclick="orderBy('i')">Margin</th>
				









				
					<th class="thShort" onclick="orderBy('k')">Date</th>
				

				
					<th class="thXShort" onclick="orderBy('m')">Price</th>
				

				
					<th class="thMedium" onclick="orderBy('o')">Label</th>
				

				
					<th class="thXShort" onclick="orderBy('r')">Sale</th>
				


				
					<th class="thXShort" onclick="orderBy('t')">Ref</th>
				


				
					<th class="thMedium" onclick="orderBy('v')">Hours</th>
				

				<th class="thFin">Map</th>
			</tr>
			
							<tr class="trWhite">
								<td class="tdMediumBorderLeftTable">TOLEDO</td>
								<td class="tdMedium">MENTRIDA                 </td>
								<td class="tdXLong">CARRETERA CM-610 KM. 6,700</td>

  								 <td class="tdXShort"> I</td>

								<td class="tdShort">04/06/2013</td>
								<td class="tdXShort">1,442</td>
								<td class="tdMedium">CAMPSA</td>
								<td class="tdXShort">P</td>
								<td class="tdXShort">dm</td>
								<td class="tdMedium">L: 07:00-22:30</td>
						
							<td class="tdFin">
						
								<img title="Centre station on map" style="cursor: pointer;" src="../img/button_recenter_tb.png" alt="+" onclick="centrar(-4.189056,40.242528,12)">
						
							</td>
						</tr>
						
			<tr>
				<td colspan="10" class="tdPaginator">
					
							<div class="paginatorSquare">&lt;&lt; first</div>
							<div class="paginatorSquare">&nbsp;&nbsp;&nbsp;&lt; previous&nbsp;&nbsp;</div>
					
								<div class="paginatorSquareN">1</div>
					
							<div class="paginatorSquare">&nbsp;&nbsp;&nbsp;next &gt;</div>
							<div class="paginatorSquare">&nbsp;&nbsp;&nbsp;last &gt;&gt;</div>
					
					<input type="hidden" id="inputPosicion" value="0">
					<input type="hidden" id="inputLongitudTotal" value="1">
				</td>
			</tr>
		</tbody></table>
	</div>
Me podeís ayudar por favor, a sacar el precio de ahí? El tema es que tengo varias etiquetas con clase tdXShort, y no se como descartar datos hasta donde quiero.

Lo siento por ser novato. Prometo he intentado buscar.

Si me ayudais a sacar este ejemplito, cuando lo saque posteo como sacar para versiones de más de una respuesta del query!!!! :)

Gracias!
  #2 (permalink)  
Antiguo 05/06/2013, 02:02
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 9 meses
Puntos: 67
Respuesta: PHP para novatos: Simple HTML DOM Parser

Te dejo un pequeño ejemplo que me e echo adaptado a tu caso:
Código PHP:
<?php
$Url 
'http://geoportal.mityc.es/hidrocarburos/eess/searchAddress.do?nomProvincia=&nomMunicipio=Yuncos&tipoCarburante=1&rotulo=&tipoVenta=&nombreVia=&numVia=&codPostal=&economicas=true&tipoBusqueda=0&Ordenacion=P&posicion=0&tipoCons=2';
$html file_get_html($Url);
foreach(
$html->find('td[class=tdXShort]') as $element)
$Listado[] = $element->innertext;
for(
$C=1$C <= count($Listado);$C=$C+4){
    echo 
$Listado[$C].'<br>';
}
?>
$C: Es la posición de la primera ocurrencia
$C=$C+4: Aquí como recibimos 4 "Columnas" que coinciden con lo buscado, le sumamos la posición inicial (Recuerda que los arrays empiezan en 0) + las 4 columnas, para que después se muestre esas posiciones.

Ejemplo en marcha: http://fdw.lohacemosweb.net/Kamita.php

Pd.: Seguramente haya una manera mas fácil de hacerlo, pero es la primera vez que pruebo el Simple HTML DOM Parser.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net

Última edición por bookmaster; 05/06/2013 a las 02:12
  #3 (permalink)  
Antiguo 11/08/2014, 23:37
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 10 años, 4 meses
Puntos: 30
Respuesta: PHP para novatos: Simple HTML DOM Parser

Yo lo utilizo desde hace varios meses ese sistema, tu problemática es sencilla:

Código PHP:
Ver original
  1. <?php
  2. $Url = 'http://geoportal.mityc.es/hidrocarburos/eess/searchAddress.do?nomProvincia=&nomMunicipio=Yuncos&tipoCarburante=1&rotulo=&tipoVenta=&nombreVia=&numVia=&codPostal=&economicas=true&tipoBusqueda=0&Ordenacion=P&posicion=0&tipoCons=2';
  3. $html = file_get_html($Url);
  4. $precio =$html->find('td[class=tdXShort]')->plaintext;
  5. ?>
Esa solución se aplica para ir directamente al dato a extraer.

También se puede hacer de una manera más larga, en el siguiente código lo que hacemos es acceder a la fila de datos (desde ahi puedes extraer toda la fila o bien la columna en cuestión, en este caso, el precio:
Código PHP:
Ver original
  1. $html = file_get_html($Url);
  2. foreach($html->find('tr[class=trWhite]') as $element) {
  3.    item['precio'] = $element->find('td',5)->plaintext;
  4.    $precio = $item['precio'];
  5. }?>
El número 5 es el índice de la columna.

Última edición por Triby2; 12/08/2014 a las 00:27 Razón: Error al responder
  #4 (permalink)  
Antiguo 12/08/2014, 02:01
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 9 meses
Puntos: 67
Respuesta: PHP para novatos: Simple HTML DOM Parser

Triby2 has reabierto un post de hace 1 año, lo mismo en todo este tiempo lo a conseguido aunque no lo pusiera como solucionado.

Pd.: El ejemplo dejó de funcionar porque cambiaron la página.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net

Etiquetas: dom, html, parsear
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




La zona horaria es GMT -6. Ahora son las 23:18.