Parsen Sie die Webseite mit HtmlAgilityPack und Json

c# html-agility-pack json web-scraping

Frage

Ich versuche, den HTML-Code von Hotpads zu analysieren und bin verwirrt darüber, wie man das Skript-Tag extrahiert und einen Teil davon in ein Json-Objekt mappt. Durch die Verwendung von HTMLAgilityPack habe ich eine Beispiel-URL geladen und es bricht, wo es nach diesem Tag sucht. Ich plane es danach zu deserialisieren

Hauptmethode

   private static void ParseSite()
    {
        var url = "https://hotpads.com/308-s-9th-dr-ponte-vedra-beach-fl-32082-syw3eh/building";
        var web = new HtmlWeb();
        var doc = web.Load(url);

        var link = doc.DocumentNode.SelectSingleNode("//a[contains(.,'window.__PRELOADED_STATE__')]");

        if (link != null)
        {
            Console.WriteLine(link.InnerText);
        }
        Console.ReadLine();
    }

Skript-Tag:

<script>
 window.__PRELOADED_STATE__ = {{SOME JSON HERE}}
<script>

Modell:

public class Contact
{
    public string DATA_MODEL { get; set; }
    public string companyName { get; set; }
    public string contactName { get; set; }
    public string contactPhone { get; set; }
}

Beliebte Antwort

Ich glaube, Sie haben gerade vergessen, das "a" -Tag durch das "script" -Tag in Ihrem xpath-Ausdruck zu ersetzen. Ich kann im Moment nicht im Code überprüfen, aber Sie können Chrome-Dev-Tools verwenden, um diese zu testen, indem Sie sie im Suchfenster erwarten und verwenden.

Ich änderte es, um stattdessen das Skript-Tag zu haben, und es funktionierte für mich mit den Chrome-Dev-Tools. Dies ist der XPath, den ich auf der Seite probiert habe:

//script[contains(.,'window.__PRELOADED_STATE__')]


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