Screen Scraping, Web Scraping, Web Harvesting, Web-Datenextraktion, etc. mit C # und dem .NET Framework

.net c# html-agility-pack visual-studio web-scraping

Frage

Ich arbeite an einer Microsoft .NET Anwendung in C # für Web Harvesting, Web Scraping, Web Datenextraktion, Screen Scraping, etc., wie auch immer Sie es nennen wollen. Zum Analysieren von HTML versuche ich HTML Agility Pack zu integrieren, aber es ist nicht so einfach, wie ich dachte. Ich habe einige Spezifikationen und Bilder von dem, was ich bisher hatte, aufgenommen und hoffte, Ihre Meinung darüber zu erhalten, wie ich fortfahren könnte. Im Grunde möchte ich etwas Ähnliches wie das in Visual Web Ripper verwendete Layout machen, aber ich habe keine Ahnung, wie sie das machen ... Irgendwelche Ideen?

Bilder:

http://img69.imageshack.us/img69/8880/webharvester1.png

http://img198.imageshack.us/img198/9563/webharvester2.png

Spezifikationen:

Mein Ziel ist es, eine sehr benutzerfreundliche Point-and-Click-Anwendung zum Herunterladen von Daten und Bildern aus dem Internet zu erstellen. Ich möchte HTML-Seiten mit dem Webbrowser laden und die analysierten Daten und Bildlinks in das Textfeld ausgeben. Der Benutzer kann angeben, welche HTML-Tags sie möchten und dann die Daten in das Raster herunterladen. Schließlich exportieren Sie die Daten in das Format, das sie benötigen.

Ich versuche HTML Agility Pack zu verwenden, um den HTML-Code auf der Webseite zu laden und in der Textbox anzuzeigen.

    // Load Web Browser
    private void Form6_Load(object sender, EventArgs e)
    {
        // Navigate to webpage
        webBrowser.Navigate("http://www.webopedia.com/TERM/H/HTML.html");

        // Save URL to memory
        SiteMemoryArray[count] = urlTextBox.Text; 

        // Load HTML from webBrowser
        HtmlWindow window = webBrowser.Document.Window; 
        string str = window.Document.Body.OuterHtml;

        // Extract tags using HtmlAgilityPack and display in textbox
        HtmlAgilityPack.HtmlDocument HtmlDoc = new HtmlAgilityPack.HtmlDocument();
        HtmlDoc.LoadHtml(str);

        HtmlAgilityPack.HtmlNodeCollection Nodes = HtmlDoc.DocumentNode.SelectNodes("//a");

        foreach (HtmlAgilityPack.HtmlNode Node in Nodes)
        {
            textBox2.Text += Node.OuterHtml + "\r\n";
        }

    }

Für: HtmlWindow window = webBrowser.Document.Window;

Ich bekomme den Fehler: Objektverweis nicht auf eine Instanz eines Objekts festgelegt.

Akzeptierte Antwort

Möglicherweise haben Sie das Laden der Seite nicht abgeschlossen, wenn Sie auf das Browserfenster verweisen. Sie können veranlassen, dass das Browser-Steuerelement das Ereignis navigationcomplete auslöst, wenn es fertig ist. Ein Beispiel finden Sie in dieser Antwort: C # Wie Sie warten, bis eine Webseite fertig geladen ist, bevor Sie fortfahren


Beliebte Antwort

Wenn Sie nach bestimmten Bildern / Formen suchen, können Sie http://www.emgu.com/wiki/index.php/Main_Page verwenden . Könnte sich als nützlich erweisen.

Sie können den Bildschirm auch mit WinAPI als "lesen"

    private Bitmap Capture(IntPtr hwnd)
    {
        return Capture(hwnd, GetClientRectangle());
    }

    private Bitmap Capture(IntPtr hwnd, Rectangle zone)
    {
        IntPtr hdcSrc = GetWindowDC(hwnd);

        IntPtr hdcDest = CreateCompatibleDC(hdcSrc);

        IntPtr hBitmap = CreateCompatibleBitmap(hdcSrc, zone.Width, zone.Height);

        IntPtr hOld = SelectObject(hdcDest, hBitmap);

        BitBlt(hdcDest, 0, 0, zone.Width, zone.Height, hdcSrc, zone.X, zone.Y, SRCCOPY);


        SelectObject(hdcDest, hOld);

        DeleteDC(hdcDest);
        ReleaseDC(hwnd, hdcSrc);

        Bitmap retBitmap = Bitmap.FromHbitmap(hBitmap);

        DeleteObject(hBitmap);
        return retBitmap;
    }


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow