Screen Scraping, Web Scraping, Web Harvesting, Web Data Extraction, ecc. Usando C # e .NET Framework

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

Domanda

Sto lavorando su un'applicazione Microsoft .NET in C # per raccolta Web, Web Scraping, estrazione dati Web, Screen Scraping, ecc. Qualunque cosa tu voglia chiamarla. Per analizzare l'HTML, sto tentando di incorporare HTML Agility Pack, ma non è così semplice come pensavo. Ho incluso alcune specifiche e immagini di ciò che ho finora e speravo di ottenere le tue opinioni su come avrei potuto procedere. in pratica, voglio fare qualcosa di simile al layout usato in Visual Web Ripper ma non ho idea di come lo facciano ... Qualche idea?

Immagini:

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

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

specifiche tecniche:

Il mio obiettivo è creare un'applicazione point-and-click di facile utilizzo per scaricare dati e immagini dal web. Vorrei caricare le pagine HTML utilizzando il browser web e generare i dati analizzati e i collegamenti delle immagini nella casella di testo. L'utente può specificare quali tag HTML desiderano e quindi scaricare i dati nella griglia. Infine, esporta i dati in qualsiasi formato di cui hanno bisogno.

Sto cercando di utilizzare HTML Agility Pack per caricare l'HTML sulla pagina Web e visualizzarlo nella casella di testo.

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

    }

Per: HtmlWindow window = webBrowser.Document.Window;

Ottengo l'errore: il riferimento all'oggetto non è impostato su un'istanza di un oggetto.

Risposta accettata

È possibile che il caricamento della pagina non venga completato quando si fa riferimento alla finestra del browser. Puoi fare in modo che il controllo del browser attivi l'evento di navigazione completa quando è terminato. Vedi questa risposta SO per un esempio: C # come aspettare che una pagina web finisca il caricamento prima di continuare


Risposta popolare

Per lo scraping dello schermo, se stai cercando immagini / forme particolari, puoi utilizzare http://www.emgu.com/wiki/index.php/Main_Page . Potrebbe tornare utile.

Puoi anche "leggere" lo schermo usando WinAPI come tale

    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;
    }



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché