Очистка экрана, веб-очистка, веб-сбор, извлечение веб-данных и т. Д. С использованием C # и .NET Framework - PullRequest
2 голосов
/ 28 февраля 2012

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

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

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

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

Технические характеристики:

Моя цель - сделать очень удобное в использовании приложение для скачивания и создания щелчков мышью.данные и изображения из Интернета.Я хотел бы загружать 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;

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

Ответы [ 4 ]

3 голосов
/ 28 февраля 2012

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

2 голосов
/ 28 февраля 2012

Для очистки экрана, если вы ищете определенные изображения / формы, вы можете использовать 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;
    }
2 голосов
/ 28 февраля 2012

Я не знаком с HTMLAgilityPack, но один из компонентов, который я использовал в прошлом, это SGMLReader: http://developer.mindtouch.com/SgmlReader.. Он работает как быстрая замена XMLReader и даже конвертирует документ.в XML для вас, если хотите.Вы можете загрузить его в XMLDocument (или даже XDocument), а затем решать, что с ним делать.

Поэтому я бы предложил использовать HTTPWebRequest для получения HTMLи затем загрузите HTML в этот компонент.таким образом, вам не нужно приближаться к элементу управления WebBrowser.

1 голос
/ 24 января 2017

Для разбора HTML-документа

using SHDocVw;//Interop.SHDocVw.dll
using mshtml;//Microsoft.mshtml.dll
InternetExplorer ie= new InternetExplorer();
ie.Navigate("www.example.com");
ie.Visible = true;
Thread.Sleep(5000);//wait until page loads
mshtml.HTMLDocument doc;
doc = ie.Document;//gives the HTML document of the Page

Чтобы получить все элементы тега

IHTMLElementCollection AnchorColl = body.getElementsByTagName("a");//Html element's tag name

И проанализируйте AnchorColl для всех элементов этого тега.

...