gifts2017

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

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

Парсинг любых сайтов. Загрузка данных из таблиц и тегов с сайтов. Загрузка картинок. Анализ 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).

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
HTMLParsLoad.epf
.epf 108,03Kb
16.05.13
681
.epf 108,03Kb 681 Скачать
Настройка_КаталогИнфостарт
.dst 79,96Kb
24.12.12
92
.dst 79,96Kb 92 Скачать
Настройка_ЯндексМаркетСписком
.dst 41,49Kb
24.12.12
100
.dst 41,49Kb 100 Скачать
Настройка_РасписаниеЭлектричек
.dst 209,67Kb
24.12.12
54
.dst 209,67Kb 54 Скачать
Настройка_Баш
.dst 1,64Kb
24.12.12
56
.dst 1,64Kb 56 Скачать
Пакет_Настроек_ЯндексМаркет
.rar 2,87Kb
30.01.13
71
.rar 2,87Kb 71 Скачать
ВерсияДляЧтенияТаблиц
.epf 15,15Kb
22.10.13
45
.epf 15,15Kb 45 Скачать

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
Сергей Федоров (Bober777) (2.00 $m)
Подписаться Добавить вознаграждение

Комментарии

1. Сергей Водаков (WaterSmith) 24.12.12 17:46
Как-то не универсально.
{Форма.ОсновнаяФорма.Форма(393,16)}: Переменная не определена (СКДиПостроители)
	мСКДСтруктуры=<<?>>СКДиПостроители.СоздатьСКД(тСтруктурыДляПоиска);
{Форма.ОсновнаяФорма.Форма(448,7)}: Переменная не определена (СКДиПостроители)
	трез=<<?>>СКДиПостроители.ПоместитьРезультатСКДвТаблицуЗначений(мСКДСтруктуры,фп.КомпоновщикСКД,тСтруктурыДляПоиска);
...Показать Скрыть
2. Яков Коган (Yashazz) 24.12.12 17:48
(1) Ох ты ж блин, не ту версию выложил. Ща, поправлю, спасибо!
3. Яков Коган (Yashazz) 24.12.12 18:36
(1) Залил правильный файл. Ещё раз спасибо.
Кстати, у обработки есть довольно подробная встроенная справка по F1. Надеюсь, написано удобоваримо.
4. Анатолий Бычин (tolyan_ekb) 24.12.12 20:47
Парсятся только сайты без авторизации?
5. Яков Коган (Yashazz) 24.12.12 21:13
(4) По идее да, но если авторизация успешно пройдена и браузер физически отображает страницу, то, насколько знаю, объектная модель доступна. Вот скачивание по ссылкам (например, картинок) может не получиться, т.к. GET-запрос у меня безо всякой авторизации.
6. Ершова Ольга (lushka) 25.12.12 06:16
А будет ли она грузить с "закрытого" раздела сайта, необходимо "подпихнуть" сайту сертификат и вылить инфу.
7. Андрей Акулов (DrAku1a) 25.12.12 09:37
Если не требуется детальный парсинг, а нужно получить одно-два-три значения из большого HTML, то проще использовать следующую функцию (пример в комментарии):
// Весьма полезная функция для парсинга, например текста HTML.
// например, есть в тексте кусок "Progress: 50%"
// Выполним код:
//   СловоМежду(ИсходныйТекстHTML, "Progress", ":", "%");
//   Сообщить("Прогресс:"+ТекПрогресс+" %");
// В результате получим сообщение: Прогресс: 50%
//
Функция СловоМежду(знач Текст, Слово1, КавычкаСлева="""", КавычкаСправа="""") Экспорт
    Перем п;
    п=Найти(врег(Текст), врег(Слово1));
    Если п<1 Тогда
        Возврат "";
    КонецЕсли;
    Текст = Сред(Текст, п+СтрДлина(Слово1));
    п=Найти(врег(Текст), врег(КавычкаСлева));
    Если п<1 Тогда
        Возврат "";
    КонецЕсли;
    Текст = Сред(Текст, п+СтрДлина(КавычкаСлева));
    п=Найти(врег(Текст), врег(КавычкаСправа));
    Если п<1 Тогда
        Возврат "";
    КонецЕсли;
    Возврат Лев(Текст, п-1);
КонецФункции
...Показать Скрыть
8. Иван Титов (Ibrogim) 25.12.12 10:26
Отличный механизм. Ещё бы автоматизировать пакетное считывание )
чтобы можно было перебирать однотипные страницы автоматом
Например можно дать возможность пользователю самому формировать код перебора страниц (произвольным алгоритмом)

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

АдресХоста="infostart.ru";
Для  к=13934 по 157152 Цикл			        
  АдресСтраницы=АдресХоста+"/public/"+ Формат(к,"ЧГ=0")+"/files/?fduser=yes#users_download";
9. Олег Крапивный (powerpc) 25.12.12 12:07
Ошибка при создании СКД: {ВнешняяОбработка.ПолучениеДанныхИзHTML.МодульОбъекта(443)}: Метод объекта не обнаружен (ПревращениеИмениВНаименование)
10. Владимир Гусев (adhocprog) 25.12.12 12:15
11. spleen - (spleen) 25.12.12 13:10
Нужен был парсер как-то, для сбора инфы и потом выгрузки ее на сайт, написал. Когда рассказал знакомым программерам, что парсер на 1С написан, долго смеялись. Но работало без отказно. Парсер работал месяц без остановки. :)) Новое применение 1С
12. Владимир Гусев (adhocprog) 25.12.12 13:22
(11) "долго смеялись" - это явно не программисты 1С.
1С 8 рулит :)
Скоро будет робот поисковик, написанный на 8-ке :)
13. Иван Титов (Ibrogim) 25.12.12 13:30
(11) spleen, тут всё зависит от задачи. Когда то делал обработку по сравнению различных файлов Excel на 7.7 хотя собственно 1С там была не при делах (просто было быстрее сделать так, а надо было срочно...) А один раз нужно было срочно сделать парсер, а 1С не было... Пришлось сделать на базе Excel и его встроенного VB )
14. spleen - (spleen) 25.12.12 13:39
(13) Ibrogim, Просто сам по себе 1с не для этого. Но, как показывает практика, скорость написания парсера на 1с не больше чем на php. А с учетом отладчика, думаю даже быстрее. Да простят меня php developers. ;)))))
15. Владимир Насыров (Spacer) 25.12.12 13:40
Хорошая штука. Самому иногда приходится подобным заниматься.
16. Яков Коган (Yashazz) 25.12.12 15:16
(8) Делаю, как раз такой механизм листания по страницам.
(9) Поправил, перезалил. Приношу извинения за невнимательность свою.
17. Сергей (seermak) 26.12.12 10:32
Ошибка ОбщегоНазначения.ПревращениеИмениВНаименование = нет в стандартном модуле Общего назначения такой процедуры.....
18. Яков Коган (Yashazz) 26.12.12 12:52
(17) Вы файл когда качали? Скачайте заново, давно уж пофиксено.
19. Олег Молочников (milkers) 26.12.12 14:02
Очень нужен видеофайл с примером формирования настроек!!!!
expert.1c8; +1 Ответить 1
20. Яков Коган (Yashazz) 26.12.12 18:22
(19) Хммм. Только после Нового Года, к сожалению. А что, справки к обработке всё же недостаточно? :(
21. fhn iyg (zigomodo) 27.12.12 12:23
22. sbv2005 (sbv2005) 27.12.12 18:18
Отличная тема. Давно хочу занятся автопоиском в инете. Жирный плюс.
23. Irmo Dono (Irmo) 29.12.12 08:06
Автор молодец, идея обработки хорошая, мыслите в правильном направлении.

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

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

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

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

Зато радует гибкость :)
24. Анатолий Бычин (tolyan_ekb) 29.12.12 13:01
Я правильно понимаю, что если нужен переход по ссылкам на странице (переход внутрь элемента), то это пока нельзя сделать?
25. Яков Коган (Yashazz) 31.12.12 00:48
(23) Да, с такими сайтами беда, очень трудно их однозначно читать. Согласен, сделаю, чтобы без директивы "НачалоТаблицы" и чтобы директивы могли быть смешанными.
А вот паразитные колонки, если они пусты, должны удаляться сами (когда включён флаг). Или сделать, чтобы всегда удалялись?

(24) Да, покамест обработка шарит по ссылкам только в случае картинок. Не очень понимаю, какой ещё принцип можно реализовать - ссылок разных много, разве что по расширениям определять, лазить туда или нет...
27. krein (krein) 07.01.13 09:53
Было бы отлично, если бы настройки сделать в один архив с обработкой, чтобы только один раз пришлось скачивать,
ну и если будут доработки указывать версию, чтоб было видно, что есть изменения...
expert.1c8; +1 Ответить
28. andrey dyak (dyak84) 07.01.13 17:02
По сути идея интересная, нащет универсальности ето врядли. Онним словом появятся деньги посмотрим насколько обработка универсальна. НО удея хорошая, автору спасибо
29. Яков Коган (Yashazz) 07.01.13 20:33
(28) Универсален только разбор, т.к. модель html-документа везде схожа. Понятно, что с каждым сайтом придётся возиться отдельно.
30. KV1s (KroVladS) 09.01.13 16:39
Неплохо бы было добавить видео инструкцию с примером, а то ковырял-ковырял, так до конца и не разобрался. что-то вытаскивает, что-то нет.
31. Stamper (Stamper) 10.01.13 13:27
следующий шаг -- DDo1C атака ;)
32. Алексей Ко (Жолтокнижниг) 10.01.13 16:32
Хм, идея конечно хорошая, универсальный механизм, но не люблю я DOM - медленный, не все данные отображет, я больше за регулярки.
33. Эдуард Зелинский (VasMart) 11.01.13 09:26
34. Noor -- (noor) 18.01.13 13:55
А вот мне интересно, ты получаешь вознаграждения за то, что твою разработку скачивают именно с этого сайта. Ведь с меня за скачивание попросили 800 руб. И я не один такой. Если бы этой разработки не было бы, то и сайт этот мне не нужен был. Обрати внимание на Соглашение, если там нет передачи прав на платное распространение твоего интеллектуального труда, то можем засудить их по Закону об авторских правах. От 10000 до 5000000 руб возмещение.
35. Яков Коган (Yashazz) 21.01.13 16:23
(34) Во-первых, я ничего не получаю. Плюсы мне, в общем-то, пофигу (принцип, по которому их на ИС раздают, мне по сей день неведом), а ещё-то что? Во-вторых, несколько вышеотписавшихся попросили у меня прислать им на почту, и я прислал. В третьих, мне глубоко безразлично, что там есть в Соглашении и чего нет. В четвёртых, скоро планирую выкладывать обновление, более продвинутую версию.

Если бы я собирался "наварить" на публикации, то размещал бы в "магазине", поэтому ваш комментарий, уж извините, не по адресу.
starik-2005; expert.1c8; +2 Ответить
36. Noor -- (noor) 21.01.13 16:36
Если быть честным, то для нормального парсинга страниц эта обработка не подходит. Нет четко заданных координат данных, которые нужно получать. Так пионэрская разработка. Серьезный парсинг нужен для серьезной агрегации данных и последующей конверсии данных в денежный эквивалент.
37. Яков Коган (Yashazz) 21.01.13 18:48
(36) Чётко заданные координаты данных, как я выше указывал, для универсала в общем виде невозможны. Эта "пионэрская" разработка уже 2 месяца используется для серьёзного парсинга и конверсии, как вы изволили выразиться, в денежный эквивалент. Если вы можете предложить способ идентификации источника данных в общем случае, в рамках классического DOM, я с большим интересом ознакомлюсь.
expert.1c8; +1 Ответить
38. Василий Петров (expert.1c8) 22.01.13 22:11
noor странный человек, видимо скачал обработку с оплатой 800 рубасов, а оказалось, что и не подходит она, и нет бесплатной пожизненной поддержки и доработки, да и вообще делает только то, что в описании и не больше )
Если надо готовую вещь, то мне кажется, стоит предложить автору обработки коммерческое сотрудничество,
хотя после таких комментариев неудивительно, если он и откажется.
39. Сергей Федоров (Bober777) 25.01.13 09:11
Можете ли вы снять видео файл? (Если есть технические проблемы со съемкой, то я помогу.) в котором покажете как выполнять настройку - т.е. как пристреляться к любому сайту. А так механизм супер спасибо +++++.
40. Сергей Федоров (Bober777) 25.01.13 09:16
что бы не искать мои контакты то скиньте хотя бы инструкцию на sfedorov777@yandex.ru
41. Андрей Тимофеев (NeLenin) 30.01.13 10:41
Большая просьба поделиться Вашей обработкой по адресу wrkr2 @rambler.ru .
42. Яков Коган (Yashazz) 30.01.13 11:06
Уважаемые коллеги, опубликована новая версия, делать какие-то инструкции к старой не буду, а вот к новой попробую успеть, хотя занят преизрядно.
Новая версия умеет "идти глубже". По ссылке, упомянутой на одной странице, умеет читать другую страницу. Жду отзывов и замечаний, т.к. подозреваю, что где-то мог и накосячить.
43. krein (krein) 31.01.13 22:57
(42) прочитал "UPD 2", что внесены изменения, есть вопрос,
файл HTMLParsLoad.epf остался такой же и с тем же названием, он обновлен уже или нет?

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

По работе обработки : есть ли общие черты в настройках для работы с сайтами на одинаковых CMS, например Битрикс, Joomla?
или все же настраивать надо очень индивидуально для каждого сайта?
44. Яков Коган (Yashazz) 06.02.13 11:41
(43) Подозреваю, что новая публикация как раз и может быть расценена как погоня за SM, поэтому всё выкладываю тут. Но, если вы считаете правильным, можно и отдельно, что сегодня-завтра проделаю. Правда, видео, наверно, не осилю, но встроенную справку поддерживаю актуальной.

Насчёт настроек в отдельных файлах - просто не сообразил, честно говоря. Взял да приаттачил, как лежали...
Насчёт слова "парсер" - учту.
Насчёт Битрикса и Джумлы - честно говоря, не знаю. Наверно, если есть общие черты, можно сделать "заготовку", базовую настройку, и дальше её докручивать при нужде. Например, чтение главной страницы, списка товаров - можно единой настройкой, а вот углубление по ссылкам в детальные данные может потребовать напильника.
45. Сергей Федоров (Bober777) 27.02.13 22:14
Я как интегратор со стажем могу предложить помощь в написании php скриптов, которые будут отправлять инфу пропарсеную в Joomla 2.5... Отправлять файлы только post запросом.
46. Андрей Мухин (Muhin555) 06.04.13 18:25
конструктивных предложений так и не видно......
Первый замеченный недостаток:
Когда несколько уровней списка поиска, при прочтении первого уровня где есть ссылка на второй уровень создается колонка со структурой в "тДанных", если колонка в "тДанных" - "Картинка", то при выборе ячейки с картинкой открывается "ПанельДанныхЯчейки" на странице "Картинка" и видим эту картинку в "КартинкаДанных", а если выбираем ячейку со "структурой" она открывается на "ПанельДанныхЯчейки" в "ВложенныеРезультаты" где тоже присутствует колонка с картинками уже второго уровня и посмотреть ячейку с "Картинкой" из "ВложенныеРезультаты" нет возможности, т.к. "ПанельДанныхЯчейки" отображает страницу "ВложенныеРезультаты" и не может одновременно показать страницу "Картинка".... тоже самое со структурой третьего уровня - ее просто некуда вообще вывести!
(!!!)Предлагаю на форме сделать отдельную панель "Картинка" а для отображения структуры последующего уровня создавать новую панель, по типу "Панель пользователя" (http://infostart.ru/public/63867/) где можно добавить новую страничку... тем самым избежать ограничение отображения структуры второго уровня.
Второй замеченный недостаток:
При перемещении по страницам на "ПолеОбозревателя" не всегда подтягивается файл настроек dst. Т.е. например на маркете я прочитал список с мобильными телефонами, потом я прошел в список холодильников и после этого структура из dst уже не применяется к новой странице списка... приходится по новой читать структуру новой страницы HTML и загружать настройки dst.
Добавь кнопку "Развернуть" на закладку "НастройкаЧтения" - ЭлементыФормы.дСтруктуры.Развернуть(стро, Истина);
47. Андрей Мухин (Muhin555) 06.04.13 18:35
Так и не понял пока эту фразу "Парсинг любых сайтов. Загрузка данных из таблиц и тегов с сайтов. Загрузка картинок." куда эти картинки загружаются? Если уж загружать, то хотя бы их грузить в хранилище например так:
Спр.Хранилище = Новый ХранилищеЗначения(Новый Картинка(мФайл), Новый СжатиеДанных);
48. Андрей Мухин (Muhin555) 07.04.13 03:35
"В алгоритме доступна для чтения и записи прочитанная таблица, хранящаяся в переменной ТекущаяТаблица. При установке переменной "Отказ" в Истина таблица изменена не будет." - не совсем понятен принцип Алгоритма постобработки. Можно какой-нибудь пример....
49. Яков Коган (Yashazz) 09.04.13 18:33
(46) Ага, попробую эти замечания учесть. Быстро не обещаю, но в фоновом режиме буду делать.
(47) Вот и пишите это в Вашем алгоритме. Специфика у каждого своя, обработку можно и нужно дорабатывать напильником в той части, которая касается загрузки данных из таблицы дальше в базу. У меня картинки, как следует из справки, загружаются в колонку таблицы значений и никуда более.
(48) Давайте разберём на Вашей конкретной задаче. Пока не очень понял, что Вас смущает.
50. Noor -- (noor) 12.04.13 16:20
Я парсю 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.Закрыть();

 //последующая обработка
...Показать Скрыть

И самое странное, работает.
51. Яков Коган (Yashazz) 12.04.13 18:34
(50) Эх, парсить - это ведь не самое главное. Главное - прочитать осмысленно. При абсолютном совпадении имён классов и имён узлов концептуально нельзя применять никакую настройку чтения. Локально, конкретно, "по месту прицелясь" - да, можно. А универсально - уже нет.

Вот есть у вас три одинаковых тега и разных текстовых содержимых, в одной подветке DOM. И дальше-то, как программа поймёт, который текст нужен? Только хардкодить...
52. Noor -- (noor) 12.04.13 19:35
Это и есть наиболее универсальный механизм. Я настраиваю выборку данных с любого количества сайтов с передачей данных в 1С. Мне без разницы как это работает, правильно или нет. Но это позволяет мне получать именно те данные, которые мне нужны и в дальнейшем их обрабатывать и транслировать как во внутреннюю базу данных так и во внешнюю. Эта проблема возникла. когда мне нужно было получать свежие данные по тендерам и передавать исполнителю с 20 сайтов, чтобы он не лазил по ним и не тратил время и деньги.
53. Яков Коган (Yashazz) 15.04.13 11:33
(52) Вы не ответили на мой вопрос. Что вы делаете с совершенно неразличимыми, но разными по содержанию узлами?
54. Ийон Тихий (cool.vlad4) 15.04.13 11:39
(52) универсальный механизм при любых входных данных, - это сродни искусственному интеллекту. например : я беру 100500 сайтов и убираю из них все тэги, оставляю только текст, а потом говорю получите определенные данные со всех сайтов универсальным механизмом. Ок?
55. Юля Макарова (Виктори) 20.04.13 07:22
Если можно отправьте пожалуйста программный модуль-"Разбор и загрузка данных с любого сайта", на buktoru@yandex.ru, заранее спасибо.
56. Яков Коган (Yashazz) 25.04.13 18:50
(55) Отправил. Там несколько другая версия, более доработанная. Вот найду время, доведу до ума, выложу её сюды.
57. Noor -- (noor) 25.04.13 19:02
Посмотреть результат моей концепции можно на http://www.tender.infopiter.ru/tenders.html?keywords=&bdt=&edt=
Сбор информации на 20 площадках идет за 5 минут.
Можно подключить загрузку графики и прочей фигни. Но это будут следующие проекты по агрегации
данных. Так как я планирую зарабатывать на таких проектах деньги, то алгоритмы и иные технологические
фишки не открою. Ранее я указал. что основным качеством разбора является определение координат данных.
58. Яков Коган (Yashazz) 26.04.13 18:09
(57) Результат - это, конечно, супер. Но вы мне на вопрос вторично не ответили - значит, или не знаете, или изобрели ИИ и теперь разумно желаете продать его задорого. Правда, мне вот в принципе неясно, что можно сделать при двух совершенно одинаковых ветвях DOM-дерева, кроме как тупо привязываться к порядку их следования и уже исходя из этого черпать данные. Других "координат данных" в DOM в принципе нет.
И, пожалуйста, спокойнее, а то у меня возникает нехорошее ощущение, что эта моя бесплатная фиговинка вас волнует как серьёзный конкурент )))
59. Noor -- (noor) 26.04.13 18:26
Отвечаю, в двух одинаковых узлах могут быть разные классы, разные родители родителей, разный первый и последний дочерний элемент, покопайте в DOM еще, там много чего интересного есть. А конкуренции я не боюсь, потому что у меня все разработки для домашнего применения. Результаты получаемы при помощи разработок для коммерции.
60. Яков Коган (Yashazz) 26.04.13 18:41
Кстати, посмотрел я на всё своё творчество... и думаю замутить вообще другую версию, где а) парсинг DOM средствами 1С, б) настройки в виде адекватного xml, а не как сейчас, в) сохранение промежуточного дерева в xml же. Ну и скорость повыше будет.
61. Яков Коган (Yashazz) 26.04.13 18:42
(59) А вот когда и родитель один, и имён классов нет, и дочерних нет (сами они концевые), тогда что? Или мне конкретный пример привести?
62. Яков Коган (Yashazz) 28.04.13 12:45
Выложил обновлённую версию. Всерьёз думаю над кардинальной переработкой.
63. Noor -- (noor) 28.04.13 13:32
Реально задача достаточно сложная. Особенно если нужно обходить защиту от парсинга, которую любят ставить тупоголовые айтишники госструктур. Но как говориться на любую хитрую ж.... всегда найдется болт с резьбой.
64. Виталий (ProIT) 30.04.13 07:27
Как побороть эту ошибку

{Форма.ОсновнаяФорма.Форма(393,16)}: Переменная не определена (СКДиПостроители)
мСКДСтруктуры=<<?>>СКДиПостроители.СоздатьСКД(тСтруктурыДляПоиска);
{Форма.ОсновнаяФорма.Форма(448,7)}: Переменная не определена (СКДиПостроители)
трез=<<?>>СКДиПостроители.ПоместитьРезультатСКДвТаблицуЗначений(мСКДСтруктуры,фп.КомпоновщикСКД,тСтруктурыДляПоиска);
65. Яков Коган (Yashazz) 02.05.13 20:53
(64) Скачать текущую версию. Это у вас, видимо, одна из первых. Или, хотите, вышлю почтой.
66. Андрей Мухин (Muhin555) 06.05.13 16:12
(65) Yashazz, ошибка указанная в (64) возникает как-раз после обновления файла для скачивания
67. Виталий (ProIT) 13.05.13 18:29
Вышлите пожалуйста, так как скачивал 30 апреля. Proit@mail.ru
68. Константин Юркин (Matis) 13.05.13 19:07
{Форма.ОсновнаяФорма.Форма(393,16)}: Переменная не определена (СКДиПостроители)
	мСКДСтруктуры=<<?>>СКДиПостроители.СоздатьСКД(тСтруктурыДляПоиска);
{Форма.ОсновнаяФорма.Форма(448,7)}: Переменная не определена (СКДиПостроители)
	трез=<<?>>СКДиПостроители.ПоместитьРезультатСКДвТаблицуЗначений(мСКДСтруктуры,фп.КомпоновщикСКД,тСтруктурыДляПоиска);
...Показать Скрыть



Никак не хочет... 8.2.17.169\УТ10.3.21.2
UPD: Файл скачал сегодня.
69. smir (smir) 13.05.13 19:12
70. Константин Юркин (Matis) 13.05.13 20:01
В итоге загуглил название имя файла и нашёл где-то на просторах инета работающий парсер... Уже ноги с руками переломал)))
71. Яков Коган (Yashazz) 16.05.13 13:54
(66) (68) (69) Перезалил ещё раз. Странное дело, эта бага была убрана ещё полгода назад...
72. Алексей Попов (Aleskey_K) 21.05.13 11:04
Попробую на паре сайтов. Задачи по парсингу всегда актуальны.
74. Noor -- (noor) 22.05.13 16:12
(12) adhocprog, Уже есть, и ресурсов много не ест
75. Владимир Гусев (adhocprog) 22.05.13 18:13
76. Яков Коган (Yashazz) 23.05.13 12:32
(74) (75) Коллеги, просьба всё-таки не оффтопить. Тут - обсуждение моей разработки, а не сравнительный анализ нескольких и уж тем более не площадка для рекламы других решений. Лады?
77. Андрей Мухин (Muhin555) 07.01.15 23:55
Какая актуальная версия обработки?
:( А то как-то разбрасываться $$долларом как-то не хочется за примеры настроек для обработки или скачать для того чтоб узнать версию......
78. Яков Коган (Yashazz) 08.01.15 12:28
(77) Актуальная уже давно под УФ и на эту не похожа ни капли. Всё надеюсь её довинтить и выложить, хотя уже и аналоги от других авторов появились. Если очень горит, могу выслать текущий "полуфабрикат".
79. Евгений Павлов (rebellium) 15.01.15 12:36
1С 8.3.5.1098 + УТ 11.1.7.54
Не открывается обработка. Разворачивается пустая область.
Версия не подходит, в свежем варианте будет поддержка? =) Оч надо
80. Яков Коган (Yashazz) 18.01.15 23:03
(79) Буквально на неделе выложу новую версию под УФ, здесь кину ссылку. Там всё будет иначе)
81. Евгений Павлов (rebellium) 19.01.15 10:46
(80) Отличные новости! Жду с нетерпением ;-)
83. Николай Ярошевич (12345mm) 19.01.16 22:28
Добрый вечер! На этой конфигурации УТ будет работать? А пробную версию можно получить st-bt@tut.by?
Прикрепленные файлы:
85. Артем Рогачко (gluker) 24.07.16 09:01
при открытии некоторых сайтов вылетает ошибка выполнения скрипта.
тут http://infostart.ru/public/174856/ можно попробовать избавиться от этого, подключив библиотеку excanvas.js , думаю поможет удалить показ ошибок скриптов
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа