HTML-Scraping mit HTML-Agilitätspaket

ajax c# html-agility-pack web-scraping

Frage

Kann mir jemand sagen, der beste Weg, um den Inhalt mit HTMLAgilityPack zu bekommen, die ich unten aus dem HTML erwähnen.

Im HTML-Code muss ich den value der ID "img" abkratzen und die Werte für x und y , damit sie in einer anderen Funktion verwendet werden können.

Das relevante HTML ist

<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" />

Diese Werte werden an die Funktion in dem unten angezeigten Javascript gesendet

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

Kann mir ein Körper helfen, indem ich sage, wie ich weitermachen soll ...

Ich habe den folgenden Code geschrieben, der mir die HTML-Daten für die Seite holt

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;

Nun, da ich die Wurzel habe, wie soll ich nach den Parametern suchen und sie dann mit GET senden.

Akzeptierte Antwort

Wenn Sie oben in Ihrem Beispielcode weitermachen, können Sie die Werte einfach so übernehmen

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");

Wo das erste Beispiel oben im Grunde sagt, finde den ersten Knoten vom Typ "input", der das Attribut "id" hat, das gleich "img" ist und mir den Wert seines Attributs "value" liefert.

Und dann fügen Sie einfach an die Ziel-URL an und senden Sie die Get-Anfrage, wie Sie es getan haben, um den ursprünglichen HTML-Code zu erhalten.


Beliebte Antwort

Ich würde das Html Agility Pack nicht dafür verwenden, weil ich nicht weiß, wie ich es auf die ursprüngliche Website zurückführen kann. Stattdessen würde ich WatiN verwenden . WatiN wurde entwickelt, um einen Browser zu Testzwecken zu betreiben, aber ich fand es sehr nützlich, wenn ich Websites, die außerhalb meiner Kontrolle liegen (wie Facebook oder Wal-Mart), scratzen muss. Nachteil ist , dass es ein tatsächliches Browser - Fenster fährt , so ist es nicht etwas , das man von einem Benutzer verbergen. Upside ist, dass Sie Mausklicks leicht simulieren und Feldtexteinträge bilden können.



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum