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