none
Extraer datos de web Interpol RRS feed

  • Pregunta

  • Hola a todos!

    Nunca he trabajado con datos desde web y es por eso que vengo con esta consulta. Necesito extraer los datos de personas buscadas por interpol desde vb.net y poder almacenarlos en una bd sql.

    La web no expone estos datos más que en su front page y en varias páginas, no RSS, XML, etc...

    Leyendo el source de "una persona", pude localizar estos datos

    <ul class="ss_menu ss_menu_result_datasheet">
    					<li>
    																																								<img width="190" class="photo" src="/var/interpol/cache/ws/2017-171393/wanted-GetPicture-60031893.jpg;pv739e59e7728c0484" alt="" />
    					</li>
    				</ul>
    
    				<div class="col_gauche2_result_datasheet">
    					
    																																																					<div id="intitule">
    						<img class="img_margin picto_nom_fugitif" src="/extension/design_sqli/design/design_sqli/images/fiche/w_icone_grande.png;pvaf069325bbb389a5" alt="" style="width: 23px"/>
    													<div class="nom_fugitif_wanted">GORBACHYK, SERGIY</div>
    												<div class="clear"></div>
    												<span class="nom_fugitif_wanted_small">Wanted by the judicial authorities of Polonia</span>
    					    					</div>
    
    					
    					<div class="rubrique width780">
    						<div class="title small title_fugitive_datasheet">
    							<div class="container"><h3>Identity particulars</h3></div>
    						</div>
    					</div>
    					<div class="clear"></div>
    
    					<div class="bloc_detail">
    						<table class='table_detail_profil table_detail_profil_result_datasheet'>
    												<tr><td class='col1'>Present family name:</td><td class='col2 strong'>GORBACHYK</td></tr>
    																		
    						<tr><td class='col1'>Forename:</td><td class='col2 strong'>SERGIY</td></tr>
    																		<tr><td class='col1'>Sex:</td><td class='col2 strong'>Masculino</td></tr>												<tr><td class='col1'>Date of birth:</td><td class='col2 strong'>31/07/1972 (45 years old)</td></tr>																		<tr><td class='col1'>Language spoken:</td>
    						<td class='col2 strong'>
    													</td></tr>												<tr><td class='col1'>Nationality:</td>
    						<td class='col2 strong'>
    							Ucrania						</td></tr>						</table>
    					</div>
    
    
    					
    										<div class="bloc_detail">
    		                            <table class='table_detail_profil table_detail_profil_result_datasheet'>
    																																										</table>
    					</div>
    
    																																																																																													
    					
    										
    					<div class="rubrique width780">
    						<div class="title small title_fugitive_datasheet">
    							<div class="container"><h3>Charges <span class="subtitle">Published as provided by requesting entity</span></h3></div>
    						</div>
    					</div>
    					<div class="clear"></div>
    					<div class="bloc_detail">
    							
    						<table class='table_detail_profil table_detail_profil_result_datasheet'>
    						<tr><td class='col1'>Charges:</td>
    							<td class='col2 strong'>
    								<p class="charge">I. An offence against public order
    II. An offence against counteracting drug addiction</p>
    							</td>
    						</tr>
    												</table>
    					</div>
    					
    					
    										<div class="rubrique width780">
    						<div class="title small title_fugitive_datasheet">
    							<div class="container"><h3>Photos</h3></div>
    						</div>
    					</div>
    					<div class="clear"></div>
    					<div class="bloc_detail">
    																										<a class="popin_img" href="/var/interpol/cache/ws/2017-171393/wanted-GetPicture-60031893.jpg" ><img height="200" src="/var/interpol/cache/ws/2017-171393/wanted-GetPicture-60031893.jpg;pv739e59e7728c0484" /></a>					</div>

    Alguna sugerencia sobre como extraer los datos referentes a la persona así como también su foto así como también poder recorrer todas las páginas del sitio?

    lunes, 4 de diciembre de 2017 13:36

Respuestas

  • Empieza por descargar el texto de la página en un string, por ejemplo, usando la clase WebClient.

    Después, analizas ese string troceando las partes que tengan los datos que te interesan. Por ejemplo, fijándote en este segmento: "<td class='col1'>Forename:</td><td class='col2 strong'>SERGIY</td>" puedes usar expresiones regulares (Regex) o funciones de manipulación de strings (IndexOf, SubString) para buscar el primer <td que haya detrás de otro <td seguido de Forename, y de ahí separar desde > hasta </td. Eso te permitiría extraer "SERGIY" y guardarlo como Forename. Repite lo mismo para otros datos que tengas que guardar.

    Para las imágenes, usa la misma técnica (Regex o manipulación de cadenas) para buscar el "src" del "<img" (no lo he visto en el html que presentas, pero en algún sitio estará si en la página es visible). Una vez que tengas el src, si es una url relativa en lugar de absoluta concaténala con la dirección desde la que inicialmente descargaste la página, y usa de nuevo el WebClient para descargar el contenido de esa url (en binario, no como string). Ese es el contenido de la imagen.

    Y para recorrer todas las páginas haz lo mismo con los "<a" para sacar la url, y navega a esa url. Tendrás que llevar un histórico de las que ya hayas recorrido para no volver a ellas en un bucle infinito. Nota: esto solo funcionará si los enlaces están en el html en etiquetas <a ...>. Si la navegación la hacen por javascript este mecanismo no será viable.

    • Marcado como respuesta Alesx de Souza martes, 5 de diciembre de 2017 1:18
    lunes, 4 de diciembre de 2017 20:11

Todas las respuestas

  • Empieza por descargar el texto de la página en un string, por ejemplo, usando la clase WebClient.

    Después, analizas ese string troceando las partes que tengan los datos que te interesan. Por ejemplo, fijándote en este segmento: "<td class='col1'>Forename:</td><td class='col2 strong'>SERGIY</td>" puedes usar expresiones regulares (Regex) o funciones de manipulación de strings (IndexOf, SubString) para buscar el primer <td que haya detrás de otro <td seguido de Forename, y de ahí separar desde > hasta </td. Eso te permitiría extraer "SERGIY" y guardarlo como Forename. Repite lo mismo para otros datos que tengas que guardar.

    Para las imágenes, usa la misma técnica (Regex o manipulación de cadenas) para buscar el "src" del "<img" (no lo he visto en el html que presentas, pero en algún sitio estará si en la página es visible). Una vez que tengas el src, si es una url relativa en lugar de absoluta concaténala con la dirección desde la que inicialmente descargaste la página, y usa de nuevo el WebClient para descargar el contenido de esa url (en binario, no como string). Ese es el contenido de la imagen.

    Y para recorrer todas las páginas haz lo mismo con los "<a" para sacar la url, y navega a esa url. Tendrás que llevar un histórico de las que ya hayas recorrido para no volver a ellas en un bucle infinito. Nota: esto solo funcionará si los enlaces están en el html en etiquetas <a ...>. Si la navegación la hacen por javascript este mecanismo no será viable.

    • Marcado como respuesta Alesx de Souza martes, 5 de diciembre de 2017 1:18
    lunes, 4 de diciembre de 2017 20:11
  • Gracias Alberto!

    Era jústo la idea/camino que necesitaba!

    martes, 5 de diciembre de 2017 1:18