Screen Scraping, веб-скребок, веб-урожай, извлечение веб-данных и т. Д. С использованием C # и .NET Framework

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

Вопрос

Я работаю над Microsoft .NET Application в C # для веб-уборки, веб-скрепок, удаления веб-данных, скрипирования экрана и т. Д., Что вы хотите назвать. Для разбора HTML я пытаюсь включить HTML Agility Pack, но это не так просто, как я думал. Я включил некоторые спецификации и изображения того, что у меня есть, и надеялся получить ваше мнение о том, как я могу продолжить. в основном, я хочу сделать что-то похожее на макет, используемый в Visual Web Ripper, но я понятия не имею, как они это делают ... Любые идеи?

Изображений:

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

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

Характеристики:

Моя цель - сделать очень удобное приложение «точка-и-click» для загрузки данных и изображений из Интернета. Я хотел бы загружать HTML-страницы с помощью веб-браузера и выводить анализируемые данные и ссылки изображений в текстовое поле. Пользователь может указать те теги HTML, которые они хотят, а затем загрузить данные в сетку. Наконец, экспортируйте данные в любой формат, в котором они нуждаются.

Я пытаюсь использовать HTML Agility Pack для загрузки HTML на веб-странице и отображения его в текстовом поле.

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

    }

Для: HtmlWindow window = webBrowser.Document.Window;

Я получаю сообщение об ошибке: Ссылка на объект не установлена ​​в экземпляр объекта.

Принятый ответ

Возможно, у вас не было загрузки страницы, когда вы ссылаетесь на окно браузера. Вы можете активировать управление браузером, когда оно будет завершено. См. Этот ответ SO для примера: C #, как ждать, пока веб-страница закончит загрузку, прежде чем продолжить


Популярные ответы

Для очистки экрана, если вы ищете специальные изображения / фигуры, вы можете использовать http://www.emgu.com/wiki/index.php/Main_Page . Может пригодиться.

Вы также можете «читать» экран, используя WinAPI как таковой

    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

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow