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

Опубликовал Yashazz в раздел Обмен - Интеграция с WEB

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

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

Что умеет:

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

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

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

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

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

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

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

Файлы

Наименование Файл Версия Размер Кол. Скачив.
SFLoader
.epf 31,32Kb
07.02.15
84
.epf 31,32Kb 84 Скачать

См. также

Комментарии

1. Mortiferus (файл скачал) 23.06.2015 12:46
Вот такая куча ошибок вываливается при открытии:
{Форма.ОсновнаяФорма.Форма(93,59)}: Переменная не определена (ЭтотОбъект)
опоп=Новый ОписаниеОповещения("АдресОткрытие_Завершение",<<?>>ЭтотОбъект);
{Форма.ОсновнаяФорма.Форма(115,63)}: Переменная не определена (ЭтотОбъект)
опоп=Новый ОписаниеОповещения("АдресНачалоВыбора_Завершение",<<?>>ЭтотОбъект);
{Форма.ОсновнаяФорма.Форма(182,82)}: Переменная не определена (ЭтотОбъект)
опоп=Новый ОписаниеОповещения("АдресПоляПросмотраВебСтраницыНажатие_Завершение",<<?>>ЭтотОбъект);
{Форма.ОсновнаяФорма.Форма(477,77)}: Переменная не определена (ЭтотОбъект)
опоп=Новый ОписаниеОповещения("ПолеПоискаЗначенияОткрытиеЗавершениеВыбора",<<?>>ЭтотОбъект);
{Форма.ОсновнаяФорма.Форма(794,90)}: Переменная не определена (ЭтотОбъект)
опоп=Новый ОписаниеОповещения("СхемаПромежуточныхДанныхИмяСхемыНачалоВыбора_Завершение",<<?>>ЭтотОбъект,текдан);
{Форма.ОсновнаяФорма.Форма(829,82)}: Переменная не определена (ЭтотОбъект)
опоп=Новый ОписаниеОповещения("ПолеПапкаВременныхФайловНачалоВыбора_Завершение",<<?>>ЭтотОбъект,Элемент);
{Форма.ОсновнаяФорма.Форма(882,73)}: Переменная не определена (ЭтотОбъект)
опоп=Новый ОписаниеОповещения("ИмяТекущейСхемыНачалоВыбора_Завершение",<<?>>ЭтотОбъект);
{Форма.ОсновнаяФорма.Форма(898,74)}: Переменная не определена (ЭтотОбъект)
опоп=Новый ОписаниеОповещения("ИмяТекущейСхемыПриИзменении_Завершение",<<?>>ЭтотОбъект);
{Форма.ОсновнаяФорма.Форма(921,68)}: Переменная не определена (ЭтотОбъект)
опоп=Новый ОписаниеОповещения("ИмяТекущейСхемыОчистка_Завершение",<<?>>ЭтотОбъект);
{Форма.ОсновнаяФорма.Форма(972,66)}: Переменная не определена (ЭтотОбъект)
опоп=Новый ОписаниеОповещения("ЗагрузитьСписокСхем_Завершение",<<?>>ЭтотОбъект);
Ответили: (2)
# Ответить
2. Yashazz 23.06.2015 16:51
(1) Какой релиз платформы?
# Ответить
3. newtech (файл скачал) 11.11.2015 01:18
Все отлично работает! Хотел бы использовать данную обработку для парсинга своих заказов с сайта www.aliexpress.com. В общем как распарсить уже готовый HTML, у меня идея (обработка) есть. Но столкнулся с некоторой проблемой.
1. Прежде чем я смогу попасть на страницу http://trade.aliexpress.com/orderList.htm , нужна авторизация, как это можно реализовать?
2.Сайт выдает только 10 заказов на страницу, чтобы переключиться на следующую страницу задействован javascript,
как его можно запустить из 1с?
Ответили: (5)

Прикрепленные файлы:

AliExpress.txt
# Ответить
4. sancho86 16.11.2015 22:58
Что-то на JD.ru он не раскрывает дерево до цены
Ответили: (5)
# Ответить
5. Yashazz 19.11.2015 12:40
(3) newtech, авторизацию разумно делать средствами jscript или http-запросами, наверняка как-то это предусмотрено.
(4) надо смотреть по ситуации, так ничего сказать не могу.
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016