Парсинг HTML-страниц


Простой парсер HTML с возможностью создания универсальных настроек. Синхронная работа, без использования встроенного браузера 1С. Скачивание файлов средствами http. УФ 8.3, безмодальный.

Я столько раз обещал, что выложу эту наработку, теперь придётся-таки выложить…

Что умеет:

1. Прочитать исходное содержимое страницы сайта. В коде есть закомментированные возможности для com-обращения к объекту MSIE и для асинхронного чтения, но активно используется обычный MSXML2.XMLHTTP, причём в синхронном режиме, т.е. наиболее хорошо будут читаться сайты с минимумом динамических фишек. Уж извините, для всяких навороченных сайтов придётся или через оболочку html-документа и куцый браузер 1С, или ещё как.

2. Разложить html-документ в виде дерева и документа DOM, вплоть до атрибутов каждого узла. По дереву можно искать с помощью XPath и обычного нестрогого поиска. Найдя закономерности, их можно зафиксировать в настройках схемы как шаблоны поиска  XPath, поименованные и называемые в обработке «промежуточными данными». Можно сделать несколько схем, ссылающихся одна на другую, для перехода по гиперссылкам (всё тоже синхронно!). Для промежуточного данного есть 3 роли — текст, картинка и гиперссылка. Можно задать тег, откуда брать данные. Схемы (настройки) можно сохранять в файлы и открывать из файлов; сами схемы в формате xml и интуитивно понятны.

3. Распознать согласно указанной схеме (и её подсхемам) данные в коллекции 1С — соответствие массивов структур и соответствий (специально, чтобы всё было удобно обрабатывать на клиенте), практически все данные в ней — строковые. Файлы (например, изображения) грузит во временные папки или сразу как объект «Картинка» в ту же коллекцию.

4. По-простому просматривать страницу и показывать её исходный текст.

Эта обработка, за исключением скачивания файлов, по сути полуфабрикат, т.к. на выходе выдаётся коллекция — а уж что с ней делать, задача дальнейшей доработки напильником.

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

p.s. История появления публикуемой версии банально проста — мне захотелось распотрошить и выкачать весь контент одного старого порносайта) Таки это удалось)))

5 Comments

  1. Mortiferus

    Вот такая куча ошибок вываливается при открытии:

    {Форма.ОсновнаяФорма.Форма(93,59)}: Переменная не определена (ЭтотОбъект)

    опоп=Новый ОписаниеОповещения(«АдресОткрытие_Завершение»,<<?>>ЭтотОбъект);

    {Форма.ОсновнаяФорма.Форма(115,63)}: Переменная не определена (ЭтотОбъект)

    опоп=Новый ОписаниеОповещения(«АдресНачалоВыбора_Завершение»,<<?>>ЭтотОбъект);

    {Форма.ОсновнаяФорма.Форма(182,82)}: Переменная не определена (ЭтотОбъект)

    опоп=Новый ОписаниеОповещения(«АдресПоляПросмотраВебСтраницыНажатие_Завершение»,<<?>>ЭтотОбъект);

    {Форма.ОсновнаяФорма.Форма(477,77)}: Переменная не определена (ЭтотОбъект)

    опоп=Новый ОписаниеОповещения(«ПолеПоискаЗначенияОткрытиеЗавершениеВыбора»,<<?>>ЭтотОбъект);

    {Форма.ОсновнаяФорма.Форма(794,90)}: Переменная не определена (ЭтотОбъект)

    опоп=Новый ОписаниеОповещения(«СхемаПромежуточныхДанныхИмяСхемыНачалоВыбора_Завершение»,<<?>>ЭтотОбъект,текдан);

    {Форма.ОсновнаяФорма.Форма(829,82)}: Переменная не определена (ЭтотОбъект)

    опоп=Новый ОписаниеОповещения(«ПолеПапкаВременныхФайловНачалоВыбора_Завершение»,<<?>>ЭтотОбъект,Элемент);

    {Форма.ОсновнаяФорма.Форма(882,73)}: Переменная не определена (ЭтотОбъект)

    опоп=Новый ОписаниеОповещения(«ИмяТекущейСхемыНачалоВыбора_Завершение»,<<?>>ЭтотОбъект);

    {Форма.ОсновнаяФорма.Форма(898,74)}: Переменная не определена (ЭтотОбъект)

    опоп=Новый ОписаниеОповещения(«ИмяТекущейСхемыПриИзменении_Завершение»,<<?>>ЭтотОбъект);

    {Форма.ОсновнаяФорма.Форма(921,68)}: Переменная не определена (ЭтотОбъект)

    опоп=Новый ОписаниеОповещения(«ИмяТекущейСхемыОчистка_Завершение»,<<?>>ЭтотОбъект);

    {Форма.ОсновнаяФорма.Форма(972,66)}: Переменная не определена (ЭтотОбъект)

    опоп=Новый ОписаниеОповещения(«ЗагрузитьСписокСхем_Завершение»,<<?>>ЭтотОбъект);

    Reply
  2. Yashazz

    (1) Какой релиз платформы?

    Reply
  3. newtech

    Все отлично работает! Хотел бы использовать данную обработку для парсинга своих заказов с сайта http://www.aliexpress.com. В общем как распарсить уже готовый HTML, у меня идея (обработка) есть. Но столкнулся с некоторой проблемой.

    1. Прежде чем я смогу попасть на страницу http://trade.aliexpress.com/orderList.htm , нужна авторизация, как это можно реализовать?

    2.Сайт выдает только 10 заказов на страницу, чтобы переключиться на следующую страницу задействован javascript,

    как его можно запустить из 1с?

    Reply
  4. sancho86

    Что-то на JD.ru он не раскрывает дерево до цены

    Reply
  5. Yashazz

    (3) newtech, авторизацию разумно делать средствами jscript или http-запросами, наверняка как-то это предусмотрено.

    (4) надо смотреть по ситуации, так ничего сказать не могу.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *