Raspado de HTML con HTML Agility Pack

ajax c# html-agility-pack web-scraping

Pregunta

Alguien puede decirme la mejor manera de obtener los contenidos utilizando HTMLAgilityPack que menciono a continuación en el html.

En el HTML proporcionado, necesito raspar el value del ID "img" y establecer los valores de x e y para que se utilicen en otra función.

El HTML relevante es

<div id="values">
<input type="hidden" id="x" name="x" value='0' />
<input type="hidden" id="y" name="y" value='0' />
<input type="hidden" id="img" name="img" value="86932" />
<input type="hidden" id="source" name = "source" value="center" />

Estos valores se envían a la función en el javascript que se muestra a continuación

submitClick(document.getElementById("img").getAttribute("value"), 
              document.getElementById("x").getAttribute("value"), 
              document.getElementById("y").getAttribute("value"), 
              'tiled'  );

¿Puede algún cuerpo ayudarme diciéndome cómo debo proceder?

He escrito el siguiente código que me da los datos html para la página

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "GET";
using (var stream = request.GetResponse().GetResponseStream())
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
    result = reader.ReadToEnd();
}
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(new StringReader(result));
HtmlNode root = doc.DocumentNode;

Ahora que tengo la raíz, ¿cómo debo buscar los parámetros y luego enviarlos por GET?

Respuesta aceptada

Retomando donde lo dejó en su código de muestra anterior, simplemente puede tomar los valores como este

string imgValue = doc.DocumentNode.SelectSingleNode("//input[@id = \"img\"]").GetAttributeValue("value", "0");
string xValue = doc.DocumentNode.SelectSingleNode("//input[@id = \"x\"]").GetAttributeValue("value", "0");
string yValue = doc.DocumentNode.SelectSingleNode("//input[@id = \"y\"]").GetAttributeValue("value", "0");

Donde el primer ejemplo anterior básicamente dice que se encuentra el primer nodo de tipo "entrada" que tiene el atributo "id" que es igual a "img" y consígame el valor de su atributo "valor".

Y luego simplemente agregue a la URL de destino y envíe la Solicitud de obtención como lo hizo para obtener el HTML inicial.


Respuesta popular

No usaría el Html Agility Pack para esto porque no sé cómo hacer que se envíe al sitio web original. En su lugar, usaría WatiN . WatiN está diseñado para manejar un navegador con fines de prueba, pero lo he encontrado extremadamente útil cuando tengo que eliminar sitios web que están fuera de mi control (como Facebook o Wal-Mart). El inconveniente es que está manejando una ventana de navegador real, por lo que no es algo que se oculte de un usuario. Lo positivo es que puede simular fácilmente los clics del mouse y las entradas de texto del campo de formulario.



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é