Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 05.11.2013, 15:27   #1
maxspace
 
Регистрация: 04.01.2012
Сообщений: 6
По умолчанию Помогите с парсингом html

Здравствуйте уважаемые участники форума!
Есть html-код:
Код HTML:
<td style="white-space:nowrap;">Monmore</td><td style="white-space:nowrap;">A8</td><td valign="top" style="white-space:nowrap;">04/11/2013</td><td valign="top" style="white-space:nowrap;">15:07</td><td style="white-space:nowrap;">480m</td><td><a href="resultsRace.aspx?raceID=280383-4&amp;racedate=04/11/2013">View Race</a></td><td><a href="resultsMeeting.aspx?racedate=04/11/2013 00:00:00&amp;track=Monmore">View Meeting</a></td>
    
        <td style="white-space:nowrap;">Swindon</td><td style="white-space:nowrap;">A2</td><td valign="top" style="white-space:nowrap;">04/11/2013</td><td valign="top" style="white-space:nowrap;">14:57</td><td style="white-space:nowrap;">480m</td><td><a href="resultsRace.aspx?raceID=280380-3&amp;racedate=04/11/2013">View Race</a></td><td><a href="resultsMeeting.aspx?racedate=04/11/2013 00:00:00&amp;track=Swindon">View Meeting</a></td>
    
        <td style="white-space:nowrap;">Monmore</td><td style="white-space:nowrap;">A7</td><td valign="top" style="white-space:nowrap;">04/11/2013</td><td valign="top" style="white-space:nowrap;">14:47</td><td style="white-space:nowrap;">480m</td><td><a href="resultsRace.aspx?raceID=280383-3&amp;racedate=04/11/2013">View Race</a></td><td><a href="resultsMeeting.aspx?racedate=04/11/2013 00:00:00&amp;track=Monmore">View Meeting</a></td>
    
        <td style="white-space:nowrap;">Swindon</td><td style="white-space:nowrap;">A4</td><td valign="top" style="white-space:nowrap;">04/11/2013</td><td valign="top" style="white-space:nowrap;">14:37</td><td style="white-space:nowrap;">480m</td><td><a href="resultsRace.aspx?raceID=280380-2&amp;racedate=04/11/2013">View Race</a></td><td><a href="resultsMeeting.aspx?racedate=04/11/2013 00:00:00&amp;track=Swindon">View Meeting</a></td>
    
        <td style="white-space:nowrap;">Monmore</td><td style="white-space:nowrap;">A9</td><td valign="top" style="white-space:nowrap;">04/11/2013</td><td valign="top" style="white-space:nowrap;">14:27</td><td style="white-space:nowrap;">480m</td><td><a href="resultsRace.aspx?raceID=280383-2&amp;racedate=04/11/2013">View Race</a></td><td><a href="resultsMeeting.aspx?racedate=04/11/2013 00:00:00&amp;track=Monmore">View Meeting</a></td>
    
        <td style="white-space:nowrap;">Swindon</td><td style="white-space:nowrap;">A6</td><td valign="top" style="white-space:nowrap;">04/11/2013</td><td valign="top" style="white-space:nowrap;">14:18</td><td style="white-space:nowrap;">480m</td><td><a href="resultsRace.aspx?raceID=280380-1&amp;racedate=04/11/2013">View Race</a></td><td><a href="resultsMeeting.aspx?racedate=04/11/2013 00:00:00&amp;track=Swindon">View Meeting</a></td>
также есть программка кот. производит парсинг:

Код:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
using HtmlAgilityPack;

namespace ConsApp_HtmlParser
{
    class Program
    {
        static void Main(string[] args)
        {
            string htmlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "1.html");
            HtmlDocument doc = new HtmlDocument();
            doc.Load(htmlFile);
            var c = doc.DocumentNode.SelectSingleNode(@"/html/body/table/tbody");
            var tableElements = new List<ReadOnlyCollection<string>>();
            if (c != null)
            {
                var nodes = c.SelectNodes("//td");
                int m = 0;
                do
                {
                    var tableRow = new List<string>();
                    tableRow.Add(nodes[m++].InnerText.Trim());
                    tableRow.Add(nodes[m++].InnerText.Trim());
                    tableRow.Add(nodes[m++].InnerText.Trim());
                    tableRow.Add(nodes[m++].InnerText.Trim());
                    tableRow.Add(nodes[m++].InnerText.Trim());
                    tableRow.Add(nodes[m++].SelectSingleNode("//a").GetAttributeValue("href", ""));
                    tableRow.Add(nodes[m++].InnerText.Trim());
                    tableElements.Add(tableRow.AsReadOnly());
                } while (m < nodes.Count);

                foreach (var row in tableElements)
                {
                    Console.WriteLine("{0} \t {1} \t {2} \t {3} \t {4} \t {5} \t {6}", row[0], row[1], row[2], row[3], row[4], row[5], row[6]);
                }
            }
            Console.ReadKey();
        }
    }
}
результат работы программы:
Изображения
Тип файла: jpg Безымянный.jpg (38.5 Кб, 159 просмотров)

Последний раз редактировалось maxspace; 05.11.2013 в 15:30.
maxspace вне форума Ответить с цитированием
Старый 05.11.2013, 15:29   #2
maxspace
 
Регистрация: 04.01.2012
Сообщений: 6
По умолчанию

подскажите, пожалуйста, почему в каждой строке 6-го столбца выводится одна и та же ссылка?
maxspace вне форума Ответить с цитированием
Старый 05.11.2013, 19:44   #3
simples
Форумчанин
 
Регистрация: 03.10.2013
Сообщений: 142
По умолчанию

Парсер HTML в HtmlAgilityPack похоже отрезает интересующую Вас часть строки.
Попробуйте посвежее версию скачать. Или другой парсер HTML использовать.
simples вне форума Ответить с цитированием
Старый 05.11.2013, 19:49   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

maxspace

подскажите, пожалуйста, почему в каждой строке 6-го столбца выводится одна и та же ссылка?

потому что путь "//a" вытаскивает все ноды "a" начиная с рута
Rififi вне форума Ответить с цитированием
Старый 05.11.2013, 20:08   #5
maxspace
 
Регистрация: 04.01.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
maxspace

подскажите, пожалуйста, почему в каждой строке 6-го столбца выводится одна и та же ссылка?

потому что путь "//a" вытаскивает все ноды "a" начиная с рута
точно, необходимо было так:
Код:
tableRow.Add(nodes[m++].SelectSingleNode("a").GetAttributeValue("href", ""));
maxspace вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с парсингом Ферринос C# (си шарп) 6 24.10.2012 21:38
проблема с парсингом Pein95 Общие вопросы Delphi 3 23.11.2011 06:08
Трабла с парсингом Den7656 Общие вопросы Delphi 2 21.11.2011 17:38
проблема с парсингом Pein95 Общие вопросы Delphi 5 14.07.2011 20:11