C # Raspe los datos de la página wiki (raspado de pantalla)

c# html-agility-pack screen screen-scraping

Pregunta

Quiero raspar una página de Wiki. En concreto, este.

Mi aplicación permitirá a los usuarios ingresar el número de registro del vehículo (por ejemplo, SBS8988Z) y mostrará la información relacionada (que se encuentra en la propia página).

Por ejemplo, si el usuario ingresa SBS8988Z en un campo de texto en mi aplicación, debería buscar la línea en esa página wiki

SBS8988Z (SLBP 192/194*) - F&N NutriSoy Fresh Milk: Singapore's No. 1 Soya Milk! (2nd Gen)

y devuelva SBS8988Z (SLBP 192/194 *) - Leche fresca F&N NutriSoy: ¡la leche de soja número 1 de Singapur! (2ª generación).

Mi código hasta ahora es (copiado y editado de varios sitios web) ...

SBS8988Z (SLBP 192/194*) - F&N NutriSoy Fresh Milk: Singapore's No. 1 Soya Milk! (2nd Gen)

Sin embargo, obtengo una ArgumentException no fue manejada - Caracteres ilegales en la ruta.

¿Qué está mal con el código? ¿Hay alguna forma más fácil de hacer esto? Estoy usando HtmlAgilityPack pero si hay una solución mejor, me complacería cumplir.

Respuesta aceptada

¿Qué hay de malo con el código? Para ser franco, todo. :PAG

La página no está formateada en la forma en que la estás leyendo. No puedes esperar conseguir los contenidos deseados de esa manera.

El contenido de la página (la parte en la que estamos interesados) se ve algo como esto:

<h2>
<span id="Deployments" class="mw-headline">Deployments</span>
</h2>
<p>
    <!-- ... -->
    <b>SBS8987B</b>
    (SLBP 192/194*)
    <br>
    <b>SBS8988Z</b>
    (SLBP 192/194*) - F&amp;N NutriSoy Fresh Milk: Singapore's No. 1 Soya Milk! (2nd Gen)
    <br>
    <b>SBS8989X</b>
    (SLBP SP)
    <br>
    <!-- ... -->
</p>

Básicamente, necesitamos encontrar los elementos b que contienen el número de registro que estamos buscando. Una vez que encontremos ese elemento, obtenga el texto y júntelo para formar el resultado. Aquí está en código:

<h2>
<span id="Deployments" class="mw-headline">Deployments</span>
</h2>
<p>
    <!-- ... -->
    <b>SBS8987B</b>
    (SLBP 192/194*)
    <br>
    <b>SBS8988Z</b>
    (SLBP 192/194*) - F&amp;N NutriSoy Fresh Milk: Singapore's No. 1 Soya Milk! (2nd Gen)
    <br>
    <b>SBS8989X</b>
    (SLBP SP)
    <br>
    <!-- ... -->
</p>



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué