Соскребание экрана с помощью HTMLAgility поможет, пожалуйста - PullRequest
1 голос
/ 17 марта 2011

Прошлой ночью, когда я спросил об очистке экрана, мне дали отличную ссылку на статью, и я понял это.У меня есть несколько вопросов, однако.Я опубликую свой код, а также источник HTML ниже.Я пытаюсь захватить данные между таблицами данных, а затем отправить данные в таблицу SQL.Я нашел успех в захвате Описание Виджет 3.5 и т. Д. Последнее изменение Джо, однако, потому что 1-й 2 / tr также содержит img src = / ...... "alt =" 00721408 "числа не получаются.Я застрял в том, как изменить код, чтобы все данные в таблице были захвачены. 2-й, Что мне нужно сделать дальше, чтобы подготовить данные для отправки в таблицу SQL. Мой код выглядит следующим образом:

using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using HtmlAgilityPack;
        using System.Windows.Forms;

        namespace ConsoleApplication1
        {

        }
        class Program
        {
            static void Main(string[] args)
            {
                // Load the html document
                var webGet = new HtmlWeb();
                var doc = webGet.Load("http://localhost");

                // Get all tables in the document
                HtmlNodeCollection tables = doc.DocumentNode.SelectNodes("//table");

                // Iterate all rows in the first table
                HtmlNodeCollection rows = tables[0].SelectNodes(".//tr");
                for (int i = 0; i < rows.Count; ++i)
                {
                    // Iterate all columns in this row
                    HtmlNodeCollection cols = rows[i].SelectNodes(".//td");
                    for (int j = 0; j < cols.Count; ++j)
                    {

                        // Get the value of the column and print it
                        string value = cols[j].InnerText;

                        Console.WriteLine(value);


                    }
                }

            }
        }





<table class="data">




<tr><td>Part-Num</td><td width="50"></td><td><img src="/partcode/number/072140" alt="072140"/></td></tr>




<tr><td>Manu-Number</td><td width="50"></td><td><img src="/partcode/manu/00721408" alt="00721408" /></td></tr>

<tr><td>Description</td><td></td><td>Widget 3.5</td></tr>



<tr><td>Manu-Country</td><td></td><td>United States</td></tr>

<tr><td>Last Modified</td><td></td><td>26 Jan 2011,  8:08 PM</td></tr>


<tr><td>Last Modified By</td><td></td><td>
Manu

</td></tr>




</table>



<p>


</body></html>

Ответы [ 2 ]

0 голосов
/ 17 марта 2011

Я немного сбит с толку относительно того, какие данные вы пытаетесь получить, однако ...

Вы можете попробовать:

SelectNodes ( "// тд [текст () = 'Описание'] /../ ребенок :: * [3]")

внутренний текст которого должен быть "Widget 3.5"

SelectNodes ( "// тд [текст () = 'Ману-Country'] /../ ребенок :: * [3]")

внутренний текст которого должен быть "Соединенные Штаты"

и т.д.. и т.д.

Кстати, как бесстыдная вилка, вы должны проверить: systemhtml.codeplex.com Это еще один html-парсер.

0 голосов
/ 17 марта 2011

Хотя хрупкое что-то подобное будет работать в вашем случае - в основном, просто включая текстовое содержимое всех атрибутов alt:

// Iterate all rows in the first table
HtmlNodeCollection rows = tables[0].SelectNodes(".//tr");
for (int i = 0; i < rows.Count; ++i)
{
    // Iterate all columns in this row
    HtmlNodeCollection cols = rows[i].SelectNodes(".//td");
    for (int j = 0; j < cols.Count; ++j)
    {
        var images = cols[j].SelectNodes("img");
        if(images!=null)
            foreach (var image in images)
            {
                if(image.Attributes["alt"]!=null)
                    Console.WriteLine(image.Attributes["alt"].Value);
            }
        // Get the value of the column and print it
        string value = cols[j].InnerText;
        Console.WriteLine(value);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...