Разбор и загрузка данных с любого сайта







Парсинг любых сайтов. Загрузка данных из таблиц и тегов с сайтов. Загрузка картинок. Анализ DOM-структуры HTML-документа, чтение и произвольная обработка данных. Автопереход по ссылкам внутри сайта. Примеры работы с DOM 1С.

Что позволяет обработка: 1) посмотреть структуру HTML-страницы; 2) настроить интерпретацию узлов так, чтобы прочесть данные в таблицу значений; 3) с определённой степенью надёжности делать постоянные настройки чтения; 4) обрабатывать прочитанное произвольным алгоритмом.

Всё началось с необходимости загрузить данные с Яндекс.Маркета. Нашёл было пару обработок, да вот беда — они устарели и нормально не читают, потому что на яндексе уже другие теги, чуть-чуть другая разметка, и всё. И хоть делай заново. Потом я подумал: структура DOM, пусть в самом общем виде, может быть прочитана. И, значит, маркирована так, чтобы дать понять обработке, откуда брать данные. Тут, правда, обнаружился неприятный сюрприз (из-за которого, в общем, полезность моей разработки существенно падает) – уникальная идентификация большинства узлов структуры страницы невозможна. Не по чему их идентифицировать, к сожалению. Поэтому все предлагаемые для примера настройки – с известной степенью точности. Может понадобиться доработка настроек «напильником». Но именно настроек, а не обработки как таковой. Так что теперь, пусть Яндекс.Маркет меняет формат данных хоть раз в неделю. 5 минут подстройки – и можно опять грузить нужные данные.

Обработка – не то чтобы «готовое решение», а инструмент. Позволяет «пристреляться» к странице и сайту. Позволяет малыми усилиями обеспечить разовое, а чуть большими – постоянное чтение данных с сайта. Для примера к публикации прилагаю настройки, демонстрирующие работу с несколькими общеизвестными сайтами.

UPD: Добавлена возможность пакетного чтения и загрузки с нескольких страниц, имеющих однотипные URL. Предусмотрен шаблон или произвольный алгоритм для получения URL, задание границ цикла. Добавлена форма настройки и справка по ней. 

UPD 2: В версии 1.5 добавлена возможность «идти глубже». Если есть ссылка — задайте настройку для чтения той страницы, куда эта ссылка ведёт, и обработка автоматически прочитает и её содержимое тоже. Глубина погружения теоретически любая (на практике 3 уровня работают ОК). Зачем это: например, на том же Яндексе нужна детализация (со страницы конкретного товара), т.е. большая картинка, характеристики и тд. Теперь это возможно без особенных усилий, главное — 1 раз сделать настройки чтения. Результаты представляются как таблицы значений внутри ячеек более «общих» таблиц значений. В архиве ParsInto находятся 3 файла для Яндекс-Маркета — настройка чтения списка товаров, настройка чтения карточки товара (шаг №1, из списка) и настройка чтения характеристик (шаг № 2, из карточки). Ахтунг! Пути, указанные в полях, надо будет переписать под ваш случай, имена файлов можно не менять. В справку обработки внесены сведения о том, как это делается.

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

UPD: Доделал пакетную загрузку по ссылкам, многостраничную загрузку. Сделана возможность ручной «добивки» неудачно загруженных данных по ссылкам. Повышена избирательность загрузки, точность считывания при одинаковых свойствах ветви. В модуль добавлены полезняшки для работы с html. Исправлена пара багов. 

Кто найдёт баги/глюки — пожалуйста, сообщайте, это приветствуется! Буду исправлять оперативно.

UPD: Добавил версию для чтения именно html-таблиц, в ячейках которых маленькие подветки dom-объектов как деревья значений. Всё в виде таблиц значений, структур и прочая, для желающих написать свой механизм настроек интерпретации или просто использовать для прямого чтения, или как пример. В отличие от первой обработки, использует не DOM через ActiveX окна, а штатные средства 1С (построитель DOM).

82 Comments

  1. WaterSmith

    Как-то не универсально.

    {Форма.ОсновнаяФорма.Форма(393,16)}: Переменная не определена (СКДиПостроители)
    мСКДСтруктуры=<<?>>СКДиПостроители.СоздатьСКД(тСтруктурыДляПоиска);
    {Форма.ОсновнаяФорма.Форма(448,7)}: Переменная не определена (СКДиПостроители)
    трез=<<?>>СКДиПостроители.ПоместитьРезультатСКДвТаблицуЗначений(мСКДСтруктуры,фп.КомпоновщикСКД,тСтруктурыДляПоиска);
    
    Reply
  2. Yashazz

    (1) Ох ты ж блин, не ту версию выложил. Ща, поправлю, спасибо!

    Reply
  3. Yashazz

    (1) Залил правильный файл. Ещё раз спасибо.

    Кстати, у обработки есть довольно подробная встроенная справка по F1. Надеюсь, написано удобоваримо.

    Reply
  4. tolyan_ekb

    Парсятся только сайты без авторизации?

    Reply
  5. Yashazz

    (4) По идее да, но если авторизация успешно пройдена и браузер физически отображает страницу, то, насколько знаю, объектная модель доступна. Вот скачивание по ссылкам (например, картинок) может не получиться, т.к. GET-запрос у меня безо всякой авторизации.

    Reply
  6. lushka

    А будет ли она грузить с «закрытого» раздела сайта, необходимо «подпихнуть» сайту сертификат и вылить инфу.

    Reply
  7. DrAku1a

    Если не требуется детальный парсинг, а нужно получить одно-два-три значения из большого HTML, то проще использовать следующую функцию (пример в комментарии):

    // Весьма полезная функция для парсинга, например текста HTML.
    // например, есть в тексте кусок «Progress: 50%»
    // Выполним код:
    //   СловоМежду(ИсходныйТекстHTML, «Progress», «:», «%»);
    //   Сообщить(«Прогресс:»+ТекПрогресс+» %»);
    // В результате получим сообщение: Прогресс: 50%
    //
    Функция СловоМежду(знач Текст, Слово1, КавычкаСлева=»»»», КавычкаСправа=»»»») Экспорт
    Перем п;
    п=Найти(врег(Текст), врег(Слово1));
    Если п<1 Тогда
    Возврат «»;
    КонецЕсли;
    Текст = Сред(Текст, п+СтрДлина(Слово1));
    п=Найти(врег(Текст), врег(КавычкаСлева));
    Если п<1 Тогда
    Возврат «»;
    КонецЕсли;
    Текст = Сред(Текст, п+СтрДлина(КавычкаСлева));
    п=Найти(врег(Текст), врег(КавычкаСправа));
    Если п<1 Тогда
    Возврат «»;
    КонецЕсли;
    Возврат Лев(Текст, п-1);
    КонецФункции
    

    Показать

    Reply
  8. Ibrogim

    Отличный механизм. Ещё бы автоматизировать пакетное считывание )

    чтобы можно было перебирать однотипные страницы автоматом

    Например можно дать возможность пользователю самому формировать код перебора страниц (произвольным алгоритмом)

    например страниц вида infostart.ru/public/167437/files/?fduser=yes#users_download

    АдресХоста=»infostart.ru»;
    Для  к=13934 по 157152 Цикл
    АдресСтраницы=АдресХоста+»/public/»+ Формат(к,»ЧГ=0″)+»/files/?fduser=yes#users_download»;
    Reply
  9. powerpc

    Ошибка при создании СКД: {ВнешняяОбработка.ПолучениеДанныхИзHTML.МодульОбъекта(443)}: Метод объекта не обнаружен (ПревращениеИмениВНаименование)

    Reply
  10. adhocprog

    Классная обработка!

    Reply
  11. spleen

    Нужен был парсер как-то, для сбора инфы и потом выгрузки ее на сайт, написал. Когда рассказал знакомым программерам, что парсер на 1С написан, долго смеялись. Но работало без отказно. Парсер работал месяц без остановки. :)) Новое применение 1С

    Reply
  12. adhocprog

    (11) «долго смеялись» — это явно не программисты 1С.

    1С 8 рулит 🙂

    Скоро будет робот поисковик, написанный на 8-ке 🙂

    Reply
  13. Ibrogim

    (11) spleen, тут всё зависит от задачи. Когда то делал обработку по сравнению различных файлов Excel на 7.7 хотя собственно 1С там была не при делах (просто было быстрее сделать так, а надо было срочно…) А один раз нужно было срочно сделать парсер, а 1С не было… Пришлось сделать на базе Excel и его встроенного VB )

    Reply
  14. spleen

    (13) Ibrogim, Просто сам по себе 1с не для этого. Но, как показывает практика, скорость написания парсера на 1с не больше чем на php. А с учетом отладчика, думаю даже быстрее. Да простят меня php developers. ;)))))

    Reply
  15. Spacer

    Хорошая штука. Самому иногда приходится подобным заниматься.

    Reply
  16. Yashazz

    (8) Делаю, как раз такой механизм листания по страницам.

    (9) Поправил, перезалил. Приношу извинения за невнимательность свою.

    Reply
  17. seermak

    Ошибка ОбщегоНазначения.ПревращениеИмениВНаименование = нет в стандартном модуле Общего назначения такой процедуры…..

    Reply
  18. Yashazz

    (17) Вы файл когда качали? Скачайте заново, давно уж пофиксено.

    Reply
  19. milkers

    Очень нужен видеофайл с примером формирования настроек!!!!

    Reply
  20. Yashazz

    (19) Хммм. Только после Нового Года, к сожалению. А что, справки к обработке всё же недостаточно? 🙁

    Reply
  21. zigomodo

    Очень кстати,спасибо.

    Reply
  22. sbv2005

    Отличная тема. Давно хочу занятся автопоиском в инете. Жирный плюс.

    Reply
  23. Irmo

    Автор молодец, идея обработки хорошая, мыслите в правильном направлении.

    Попробовал настроить скажем для rosohot.ru и salmoru.com, в обоих случаях получились затруднения. Если будет интересно, могу прислать настройки *dst, в которых это видно.

    Оба сайта свёрстаны почти без идентификаторов. На rosohot максимум получается выдрать картинку и таблицу характеристик, а тэг DIV, в котором находится описание товара не попадает в СтрокуТаблицы, в которую входит картинка и негде разместить ещё одну директиву СтрокаТаблицы.

    На salmoru удаётся выдрать опять таки всё кроме описания. Это потому что описание находится в тэге DIV, вложенном в корневой тэг DIV. И негде разместить все три (!) директивы НачалоТаблицы, СтрокаТаблицы и СтроковаяКолонка. Я вижу два пути: либо дать возможность считать НачаломТаблицы весь документ, либо сделать что-то вроде микса СтрокиТаблицы и СтроковойКолонки в одной директиве…

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

    Зато радует гибкость 🙂

    Reply
  24. tolyan_ekb

    Я правильно понимаю, что если нужен переход по ссылкам на странице (переход внутрь элемента), то это пока нельзя сделать?

    Reply
  25. Yashazz

    (23) Да, с такими сайтами беда, очень трудно их однозначно читать. Согласен, сделаю, чтобы без директивы «НачалоТаблицы» и чтобы директивы могли быть смешанными.

    А вот паразитные колонки, если они пусты, должны удаляться сами (когда включён флаг). Или сделать, чтобы всегда удалялись?

    (24) Да, покамест обработка шарит по ссылкам только в случае картинок. Не очень понимаю, какой ещё принцип можно реализовать — ссылок разных много, разве что по расширениям определять, лазить туда или нет…

    Reply
  26. krein

    Было бы отлично, если бы настройки сделать в один архив с обработкой, чтобы только один раз пришлось скачивать,

    ну и если будут доработки указывать версию, чтоб было видно, что есть изменения…

    Reply
  27. dyak84

    По сути идея интересная, нащет универсальности ето врядли. Онним словом появятся деньги посмотрим насколько обработка универсальна. НО удея хорошая, автору спасибо

    Reply
  28. Yashazz

    (28) Универсален только разбор, т.к. модель html-документа везде схожа. Понятно, что с каждым сайтом придётся возиться отдельно.

    Reply
  29. KroVladS

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

    Reply
  30. Stamper

    следующий шаг — DDo1C атака 😉

    Reply
  31. Жолтокнижниг

    Хм, идея конечно хорошая, универсальный механизм, но не люблю я DOM — медленный, не все данные отображет, я больше за регулярки.

    Reply
  32. VasMart

    1С эвернот )

    Reply
  33. noor

    А вот мне интересно, ты получаешь вознаграждения за то, что твою разработку скачивают именно с этого сайта. Ведь с меня за скачивание попросили 800 руб. И я не один такой. Если бы этой разработки не было бы, то и сайт этот мне не нужен был. Обрати внимание на Соглашение, если там нет передачи прав на платное распространение твоего интеллектуального труда, то можем засудить их по Закону об авторских правах. От 10000 до 5000000 руб возмещение.

    Reply
  34. Yashazz

    (34) Во-первых, я ничего не получаю. Плюсы мне, в общем-то, пофигу (принцип, по которому их на ИС раздают, мне по сей день неведом), а ещё-то что? Во-вторых, несколько вышеотписавшихся попросили у меня прислать им на почту, и я прислал. В третьих, мне глубоко безразлично, что там есть в Соглашении и чего нет. В четвёртых, скоро планирую выкладывать обновление, более продвинутую версию.

    Если бы я собирался «наварить» на публикации, то размещал бы в «магазине», поэтому ваш комментарий, уж извините, не по адресу.

    Reply
  35. noor

    Если быть честным, то для нормального парсинга страниц эта обработка не подходит. Нет четко заданных координат данных, которые нужно получать. Так пионэрская разработка. Серьезный парсинг нужен для серьезной агрегации данных и последующей конверсии данных в денежный эквивалент.

    Reply
  36. Yashazz

    (36) Чётко заданные координаты данных, как я выше указывал, для универсала в общем виде невозможны. Эта «пионэрская» разработка уже 2 месяца используется для серьёзного парсинга и конверсии, как вы изволили выразиться, в денежный эквивалент. Если вы можете предложить способ идентификации источника данных в общем случае, в рамках классического DOM, я с большим интересом ознакомлюсь.

    Reply
  37. expert.1c8

    noor странный человек, видимо скачал обработку с оплатой 800 рубасов, а оказалось, что и не подходит она, и нет бесплатной пожизненной поддержки и доработки, да и вообще делает только то, что в описании и не больше )

    Если надо готовую вещь, то мне кажется, стоит предложить автору обработки коммерческое сотрудничество,

    хотя после таких комментариев неудивительно, если он и откажется.

    Reply
  38. Bober777

    Можете ли вы снять видео файл? (Если есть технические проблемы со съемкой, то я помогу.) в котором покажете как выполнять настройку — т.е. как пристреляться к любому сайту. А так механизм супер спасибо +++++.

    Reply
  39. Bober777

    что бы не искать мои контакты то скиньте хотя бы инструкцию на sfedorov777@yandex.ru

    Reply
  40. NeLenin

    Большая просьба поделиться Вашей обработкой по адресу wrkr2 @rambler.ru .

    Reply
  41. Yashazz

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

    Новая версия умеет «идти глубже». По ссылке, упомянутой на одной странице, умеет читать другую страницу. Жду отзывов и замечаний, т.к. подозреваю, что где-то мог и накосячить.

    Reply
  42. krein

    (42) прочитал «UPD 2», что внесены изменения, есть вопрос,

    файл HTMLParsLoad.epf остался такой же и с тем же названием, он обновлен уже или нет?

    Не хотелось бы конечно навязывать что-то,

    но может проще тогда сделать новую публикацию с обновленной версией обработки + инструкцией (возможно даже видео) и примерами настроек в одном архиве (если конечно не ради SM разделены файлы настроек и обработки), а здесь поместить на нее ссылку,

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

    а пока непонятно, стоит скачать, или еще не обновлена версия приложенного файла..

    Еще кстати вначале пытался найти по слову «парсер», но не нашел, т.к. в названии нет этого слова..

    По работе обработки : есть ли общие черты в настройках для работы с сайтами на одинаковых CMS, например Битрикс, Joomla?

    или все же настраивать надо очень индивидуально для каждого сайта?

    Reply
  43. Yashazz

    (43) Подозреваю, что новая публикация как раз и может быть расценена как погоня за SM, поэтому всё выкладываю тут. Но, если вы считаете правильным, можно и отдельно, что сегодня-завтра проделаю. Правда, видео, наверно, не осилю, но встроенную справку поддерживаю актуальной.

    Насчёт настроек в отдельных файлах — просто не сообразил, честно говоря. Взял да приаттачил, как лежали…

    Насчёт слова «парсер» — учту.

    Насчёт Битрикса и Джумлы — честно говоря, не знаю. Наверно, если есть общие черты, можно сделать «заготовку», базовую настройку, и дальше её докручивать при нужде. Например, чтение главной страницы, списка товаров — можно единой настройкой, а вот углубление по ссылкам в детальные данные может потребовать напильника.

    Reply
  44. Bober777

    Я как интегратор со стажем могу предложить помощь в написании php скриптов, которые будут отправлять инфу пропарсеную в Joomla 2.5… Отправлять файлы только post запросом.

    Reply
  45. Muhin555

    конструктивных предложений так и не видно……

    Первый замеченный недостаток:

    Когда несколько уровней списка поиска, при прочтении первого уровня где есть ссылка на второй уровень создается колонка со структурой в «тДанных», если колонка в «тДанных» — «Картинка», то при выборе ячейки с картинкой открывается «ПанельДанныхЯчейки» на странице «Картинка» и видим эту картинку в «КартинкаДанных», а если выбираем ячейку со «структурой» она открывается на «ПанельДанныхЯчейки» в «ВложенныеРезультаты» где тоже присутствует колонка с картинками уже второго уровня и посмотреть ячейку с «Картинкой» из «ВложенныеРезультаты» нет возможности, т.к. «ПанельДанныхЯчейки» отображает страницу «ВложенныеРезультаты» и не может одновременно показать страницу «Картинка»…. тоже самое со структурой третьего уровня — ее просто некуда вообще вывести!

    (!!!)Предлагаю на форме сделать отдельную панель «Картинка» а для отображения структуры последующего уровня создавать новую панель, по типу «Панель пользователя» (http://infostart.ru/public/63867/) где можно добавить новую страничку… тем самым избежать ограничение отображения структуры второго уровня.

    Второй замеченный недостаток:

    При перемещении по страницам на «ПолеОбозревателя» не всегда подтягивается файл настроек dst. Т.е. например на маркете я прочитал список с мобильными телефонами, потом я прошел в список холодильников и после этого структура из dst уже не применяется к новой странице списка… приходится по новой читать структуру новой страницы HTML и загружать настройки dst.

    Добавь кнопку «Развернуть» на закладку «НастройкаЧтения» — ЭлементыФормы.дСтруктуры.Развернуть(стро, Истина);

    Reply
  46. Muhin555

    Так и не понял пока эту фразу «Парсинг любых сайтов. Загрузка данных из таблиц и тегов с сайтов. Загрузка картинок.» куда эти картинки загружаются? Если уж загружать, то хотя бы их грузить в хранилище например так:

    Спр.Хранилище = Новый ХранилищеЗначения(Новый Картинка(мФайл), Новый СжатиеДанных);

    Reply
  47. Muhin555

    «В алгоритме доступна для чтения и записи прочитанная таблица, хранящаяся в переменной ТекущаяТаблица. При установке переменной «Отказ» в Истина таблица изменена не будет.» — не совсем понятен принцип Алгоритма постобработки. Можно какой-нибудь пример….

    Reply
  48. Yashazz

    (46) Ага, попробую эти замечания учесть. Быстро не обещаю, но в фоновом режиме буду делать.

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

    (48) Давайте разберём на Вашей конкретной задаче. Пока не очень понял, что Вас смущает.

    Reply
  49. noor

    Я парсю html твот таким кодом. Главное получше прицелится и все получится. То есть определяем координаты нужных данных методом исключения

    ЭтотОбъект.МассивТегов.Очистить();
    ИмяВременногоФайла=КаталогВременныхФайлов()+»1.html»;
    
    HTTPСервис = Новый HTTPСоединение(ЭтотОбъект.АдресСайта,,,,,);
    
    HTTPСервис.Получить(ЭтотОбъект.ФайлНаСайте, ИмяВременногоФайла);
    ЧтениеHTML = Новый ЧтениеHTML;
    ЧтениеHTML.ОткрытьФайл(ИмяВременногоФайла, ЭтотОбъект.Кодировка);
    ПостроительDOM = Новый ПостроительDOM;
    ДокументDOM = ПостроительDOM.Прочитать(ЧтениеHTML);
    
    
    СписокИмен=ДокументDOM.ПолучитьЭлементыПоИмени(СокрЛП(ЭтотОбъект.Тег),»*»);
    Для l = 0  По СписокИмен.Количество()-1 Цикл
    Если ПустаяСтрока(СписокИмен[l].ТекстовоеСодержимое) тогда
    продолжить;
    КонецЕсли;
    Если Найти(ЭтотОбъект.СписокОбрабатываемыхТегов, «#»+СписокИмен[l].ИмяУзла+»#»)=0 и
    НЕ ПустаяСтрока(ЭтотОбъект.СписокОбрабатываемыхТегов) тогда
    Продолжить;
    КонецЕсли;
    Если Найти(ЭтотОбъект.НеобрабатываемыйКласс, «#»+СписокИмен[l].ИмяКласса+»#»)>0 Тогда
    продолжить
    КонецЕсли;
    
    //и
    Если  Найти(ЭтотОбъект.НеобрабатывемыйРодитель, «#»+СписокИмен[l].РодительскийУзел.ИмяУзла+»#»)>0 Тогда
    Продолжить
    КонецЕсли;
    //и
    Если Найти(ЭтотОбъект.НеобрабатываемыйДочЭлемент, «#»+СписокИмен[l].ПервыйДочерний.ИмяУзла+»#»)>0  тогда
    Продолжить;
    КонецЕсли;
    
    
    Попытка
    Если НЕ ПустаяСтрока(ЭтотОбъект.ОбрабатываемыйКласс) и
    ПустаяСтрока(СписокИмен[l].Гиперссылка) и
    НЕ Найти(ЭтотОбъект.ОбрабатываемыйКласс, «#»+СписокИмен[l].ИмяКласса+»#»)>0 тогда
    Продолжить;
    КонецЕсли;
    Исключение
    КонецПопытки;
    
    НовСтрока=ЭтотОбъект.МассивТегов.Добавить();
    НовСтрока.НомерЭлемента=l;
    НовСтрока.Содержание=СписокИмен[l].ТекстовоеСодержимое;
    НовСтрока.РодительскийЭлемент=СписокИмен[l].РодительскийУзел.ИмяУзла;
    НовСтрока.ДочернийЭлемент=СписокИмен[l].ПервыйДочерний.ИмяУзла;
    НовСтрока.Класс=СписокИмен[l].ИмяКласса;
    
    НовСтрока.Тег=СписокИмен[l].ИмяУзла;
    
    
    Попытка
    //НовСтрока.Ссылка=ЭтотОбъект.АдресСайта+СписокИмен[l].Гиперссылка;
    НовСтрока.Ссылка=СписокИмен[l].Гиперссылка;
    
    Исключение
    КонецПопытки;
    
    
    //КонецЕсли;
    
    
    //КонецЦикла;
    КонецЦикла;
    ЧтениеHTML.Закрыть();
    
    //последующая обработка

    Показать

    И самое странное, работает.

    Reply
  50. Yashazz

    (50) Эх, парсить — это ведь не самое главное. Главное — прочитать осмысленно. При абсолютном совпадении имён классов и имён узлов концептуально нельзя применять никакую настройку чтения. Локально, конкретно, «по месту прицелясь» — да, можно. А универсально — уже нет.

    Вот есть у вас три одинаковых тега и разных текстовых содержимых, в одной подветке DOM. И дальше-то, как программа поймёт, который текст нужен? Только хардкодить…

    Reply
  51. noor

    Это и есть наиболее универсальный механизм. Я настраиваю выборку данных с любого количества сайтов с передачей данных в 1С. Мне без разницы как это работает, правильно или нет. Но это позволяет мне получать именно те данные, которые мне нужны и в дальнейшем их обрабатывать и транслировать как во внутреннюю базу данных так и во внешнюю. Эта проблема возникла. когда мне нужно было получать свежие данные по тендерам и передавать исполнителю с 20 сайтов, чтобы он не лазил по ним и не тратил время и деньги.

    Reply
  52. Yashazz

    (52) Вы не ответили на мой вопрос. Что вы делаете с совершенно неразличимыми, но разными по содержанию узлами?

    Reply
  53. cool.vlad4

    (52) универсальный механизм при любых входных данных, — это сродни искусственному интеллекту. например : я беру 100500 сайтов и убираю из них все тэги, оставляю только текст, а потом говорю получите определенные данные со всех сайтов универсальным механизмом. Ок?

    Reply
  54. Виктори

    Если можно отправьте пожалуйста программный модуль-«Разбор и загрузка данных с любого сайта», на buktoru@yandex.ru, заранее спасибо.

    Reply
  55. Yashazz

    (55) Отправил. Там несколько другая версия, более доработанная. Вот найду время, доведу до ума, выложу её сюды.

    Reply
  56. noor

    Посмотреть результат моей концепции можно на http://www.tender.infopiter.ru/tenders.html?keywords=&bdt=&edt=

    Сбор информации на 20 площадках идет за 5 минут.

    Можно подключить загрузку графики и прочей фигни. Но это будут следующие проекты по агрегации

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

    фишки не открою. Ранее я указал. что основным качеством разбора является определение координат данных.

    Reply
  57. Yashazz

    (57) Результат — это, конечно, супер. Но вы мне на вопрос вторично не ответили — значит, или не знаете, или изобрели ИИ и теперь разумно желаете продать его задорого. Правда, мне вот в принципе неясно, что можно сделать при двух совершенно одинаковых ветвях DOM-дерева, кроме как тупо привязываться к порядку их следования и уже исходя из этого черпать данные. Других «координат данных» в DOM в принципе нет.

    И, пожалуйста, спокойнее, а то у меня возникает нехорошее ощущение, что эта моя бесплатная фиговинка вас волнует как серьёзный конкурент )))

    Reply
  58. noor

    Отвечаю, в двух одинаковых узлах могут быть разные классы, разные родители родителей, разный первый и последний дочерний элемент, покопайте в DOM еще, там много чего интересного есть. А конкуренции я не боюсь, потому что у меня все разработки для домашнего применения. Результаты получаемы при помощи разработок для коммерции.

    Reply
  59. Yashazz

    Кстати, посмотрел я на всё своё творчество… и думаю замутить вообще другую версию, где а) парсинг DOM средствами 1С, б) настройки в виде адекватного xml, а не как сейчас, в) сохранение промежуточного дерева в xml же. Ну и скорость повыше будет.

    Reply
  60. Yashazz

    (59) А вот когда и родитель один, и имён классов нет, и дочерних нет (сами они концевые), тогда что? Или мне конкретный пример привести?

    Reply
  61. Yashazz

    Выложил обновлённую версию. Всерьёз думаю над кардинальной переработкой.

    Reply
  62. noor

    Реально задача достаточно сложная. Особенно если нужно обходить защиту от парсинга, которую любят ставить тупоголовые айтишники госструктур. Но как говориться на любую хитрую ж…. всегда найдется болт с резьбой.

    Reply
  63. ProIT

    Как побороть эту ошибку

    {Форма.ОсновнаяФорма.Форма(393,16)}: Переменная не определена (СКДиПостроители)

    мСКДСтруктуры=<<?>>СКДиПостроители.СоздатьСКД(тСтруктурыДляПоиска);

    {Форма.ОсновнаяФорма.Форма(448,7)}: Переменная не определена (СКДиПостроители)

    трез=<<?>>СКДиПостроители.ПоместитьРезультатСКДвТаблицуЗначений(мСКДСтруктуры,фп.КомпоновщикСКД,тСтруктурыДляПоиска);

    Reply
  64. Yashazz

    (64) Скачать текущую версию. Это у вас, видимо, одна из первых. Или, хотите, вышлю почтой.

    Reply
  65. Muhin555

    (65) ошибка указанная в (64) возникает как-раз после обновления файла для скачивания

    Reply
  66. ProIT

    Вышлите пожалуйста, так как скачивал 30 апреля. Proit@mail.ru

    Reply
  67. Matis
    {Форма.ОсновнаяФорма.Форма(393,16)}: Переменная не определена (СКДиПостроители)
    мСКДСтруктуры=<<?>>СКДиПостроители.СоздатьСКД(тСтруктурыДляПоиска);
    {Форма.ОсновнаяФорма.Форма(448,7)}: Переменная не определена (СКДиПостроители)
    трез=<<?>>СКДиПостроители.ПоместитьРезультатСКДвТаблицуЗначений(мСКДСтруктуры,фп.КомпоновщикСКД,тСтруктурыДляПоиска);
    

    Никак не хочет… 8.2.17.169УТ10.3.21.2

    UPD: Файл скачал сегодня.

    Reply
  68. smir

    та же самая проблема…

    Reply
  69. Matis

    В итоге загуглил название имя файла и нашёл где-то на просторах инета работающий парсер… Уже ноги с руками переломал)))

    Reply
  70. Yashazz

    (66) (68) (69) Перезалил ещё раз. Странное дело, эта бага была убрана ещё полгода назад…

    Reply
  71. Aleskey_K

    Попробую на паре сайтов. Задачи по парсингу всегда актуальны.

    Reply
  72. noor

    (12) adhocprog, Уже есть, и ресурсов много не ест

    Reply
  73. adhocprog

    (74) где можно увидеть? )

    Reply
  74. Yashazz

    (74) (75) Коллеги, просьба всё-таки не оффтопить. Тут — обсуждение моей разработки, а не сравнительный анализ нескольких и уж тем более не площадка для рекламы других решений. Лады?

    Reply
  75. Muhin555

    Какая актуальная версия обработки?

    🙁 А то как-то разбрасываться $$долларом как-то не хочется за примеры настроек для обработки или скачать для того чтоб узнать версию……

    Reply
  76. Yashazz

    (77) Актуальная уже давно под УФ и на эту не похожа ни капли. Всё надеюсь её довинтить и выложить, хотя уже и аналоги от других авторов появились. Если очень горит, могу выслать текущий «полуфабрикат».

    Reply
  77. rebellium

    1С 8.3.5.1098 + УТ 11.1.7.54

    Не открывается обработка. Разворачивается пустая область.

    Версия не подходит, в свежем варианте будет поддержка? =) Оч надо

    Reply
  78. Yashazz

    (79) Буквально на неделе выложу новую версию под УФ, здесь кину ссылку. Там всё будет иначе)

    Reply
  79. rebellium

    (80) Отличные новости! Жду с нетерпением 😉

    Reply
  80. Yashazz
  81. 12345mm

    Добрый вечер! На этой конфигурации УТ будет работать? А пробную версию можно получить st-bt@tut.by?

    Reply
  82. gluker

    при открытии некоторых сайтов вылетает ошибка выполнения скрипта.

    тут http://infostart.ru/public/174856/ можно попробовать избавиться от этого, подключив библиотеку excanvas.js , думаю поможет удалить показ ошибок скриптов

    Reply

Leave a Comment

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