• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

парсинг Html странички на Asp.

  • Автор темы labas
  • Дата начала
L

labas

Стоит задача:

1,парсинг страницы хххх.html
2, распечатать из нее таблицу <table id="ууу">. Естественно в хххх.html есть много других таблиц, текста и другого мусора.

Помогите разобраться плз!
....... или хотя бы подскажите каким путем это лучше реализовывать :о(

HTML переводить в XML-файл и из них тянуть инфу?...а если парсинг каждый день несколько раз делать надо будет?
Или сохранить текст из файла в ...куда?..... стринг? масив? или еще куда то?
......а может можно ""на лету обрабатывать, без сохранения файла?
 
E

etc

Регулярные вырвжения должны помочь.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
для явы есть куча парсеров которые позволяют работать с html как с xml. поищите анологи для дотнета.
регулярные выражения всме хороши, вот только кривая обучения ну очень крутая=)
 
L

labas

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

а что с кривой обучения?.......На первый взгляд там ничего особенно сложного нет.........или это только на первый взгляд? :(
 
L

LuMee

Делал похожую задачу следующим образом. На просторах инета попадается такая либа как SgmlReaderDll.dll. В ней содержится полезный класс SgmlReader, с помощью которого можно перегонять HTML в XHTML примерно таким путем:
Код:
string inputHtml = ...; // HTML-код распарсиваемой странички

SgmlReader reader = new SgmlReader();
reader.DocType = "HTML";
reader.InputStream = new StringReader(inputHtml);

StringWriter sw = new StringWriter();
XmlTextWriter w = new XmlTextWriter(sw);

reader.Read();
while (!reader.EOF)
{
w.WriteNode(reader, true);
}

w.Flush();
w.Close();

string xhtml = sw.ToString(); // получили XHTML
Далее остается этот XHTML подвергнуть XSLT-преобразованию, которое и выдернет нужную табличку. Сам XSLT можно вынести в какие-нибудь внешние ресурсы/настройки и править в случае изменения структуры анализируемой странички.
Составить XSLT, который просто найдет и выдернет элемент table с определенным id, - задача не слишком сложная, я думаю. Работает сие достаточно шустро (на загрузку странички, во всяк, времени уходило больше).
 
E

etc

LuMee Даже если пойти этим путем, то непонятно зачем XSLT-преобразованию ... xpath нормально должен справится ...
 
L

LuMee

LuMee Даже если пойти этим путем, то непонятно зачем XSLT-преобразованию ... xpath нормально должен справится ...
Ну в принципе да. У меня там просто посложнее обработка делалась малясь. В данном случае XPath'а хватить должно.
 
L

labas

LuMee , за код спасибо..а можно совсем разжевать куда его кидать, как подвергать XSLT-преобразованию и выводить таблицу? :)

Знаю, что вопросы дурацкие, но никогда с этим не пересекалась :о( а одновременно разбираться с несколькими вещами - дело долгое :о/
 
L

LuMee

XSLT, как уже выяснили, не нужен, можно продолжить приведенный мною выше фрагмент так:
Код:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xhtml);
XmlNode node = xmlDoc.SelectSingleNode("descendant::table[@id='yyy']");
Теперь в node содержится узел, соответствующий искомой таблице. Если нужно вывести это добро, скажем, в консоль, то можно сделать так:
Код:
XmlTextWriter writer = new XmlTextWriter(Console.Out);
writer.Formatting = Formatting.Indented;
node.WriteTo(writer);
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!