0. starik-2005 1921 01.04.19 15:30 Сейчас в теме

Парсинг сайтов из 1С на примере ломбарды.рф с помощью XPATH для ДокументDOM

На всякую хитрую гайку всегда найдется болт с резьбой (с)

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. bonv 846 01.04.19 15:53 Сейчас в теме
(0)
1. Редирект. По указанной в Урл странице находится страница с перманентным редиректом. Взять из нее адрес не составит никакого труда. а определить ее можно по 301-й ошибке в ответе веб-сервера.

Используйте
https://infostart.ru/public/709325/
и не будет проблем с редиректами
starik-2005; +1 1 Ответить
2. webester 28 02.04.19 12:33 Сейчас в теме
(1)Мне нравится простой пример с ИТС https://its.1c.ru/db/metod8dev#content:5574:hdoc обрабатывает перенаправления указывает на типы ошибок
3. bonv 846 02.04.19 12:43 Сейчас в теме
(2) все хорошо, пока не захочется парсить сайты, требующие предварительной авторизации
4. webester 28 02.04.19 12:52 Сейчас в теме
(3)Это на тему перенаправления. Использовать только ради него Коннектор, как из пушки по воробьям. Библиотека сама по себе отличная.
6. Поручик 4294 02.04.19 21:19 Сейчас в теме
7. starik-2005 1921 02.04.19 22:49 Сейчас в теме
Редирект на столько прост, что я о нем даже говорить не стал - скучно! Особенно когда редирект внутри одного домена

О = С.Ролучить(З);
Если О.КодОтвета МЕЖДУ 300 и 399 Тогда
  З = Новый HTTPЗапрос(ПолучитьУрл(О));
  О = С.Получить(З);
КонецЕсли;
8. s_vidyakin 03.04.19 02:28 Сейчас в теме
лучше поднапрячься и изучить как это делается в цивилизованном мире - nodejs + axios + cheerio https://nuancesprog.ru/p/3102/ делов на полчаса ))
XPath это непонятная хрень, иногда работает иногда нет, на определенных тегах/классах/фазах Луны
testnv0; starik-2005; +2 1 Ответить
9. starik-2005 1921 03.04.19 07:20 Сейчас в теме
(8) ну это как с регулярками - у меня работает, а у пользователей компьютера не всегда, хотя у нас даже аналитики уже регулярки освоили и дату в локальном формате могут заменять на xml- дату, и всегда работает)))
for_sale; +1 Ответить
13. s_vidyakin 03.04.19 11:14 Сейчас в теме
(9) пробовал получать вложенные теги в определенном теге, указываю типа ".class1 > .class2" - НОЛЬ элементов. В консоли браузера все выбирается. Пришлось выбирать глобальным поиском по class2, но они там и в других местах были, логика усложнилась проверками. Больше с XPath не связываюсь
Возможно было бы более интересно если бы написали библиотеку на OScript типа cheerio и сделали обзор )
14. starik-2005 1921 03.04.19 11:22 Сейчас в теме
(13)
пробовал получать вложенные теги в определенном теге, указываю типа ".class1 > .class2" - НОЛЬ элементов
Если речь об 1С, то я даже уточнил в статье, что XPath в ней ограничен. Хотя //div[@class='c1']/div[class='c2']/text() - вполне рабочая конструкция даже для 1С.
10. starik-2005 1921 03.04.19 08:55 Сейчас в теме
(8) кстати, вывод автора неутешительный: "мы можем извлекать данные только из статических сайтов". Я же привел пример извлечения из динамического сайта как раз - основная хитрость тут - это разобраться с источниками данных.

Также если посмотреть на статью внимательно, то понятно становится, что ничего нового - тот же запрос к HTML-ДОМ'у, преобразованному в виртуальный ДОМ с помощью компонента node.
11. s_vidyakin 03.04.19 11:07 Сейчас в теме
(10) там есть вторая часть, для динамических сайтов - https://nuancesprog.ru/p/3125/.
Конечно тот же DOM, но удобнее, у XPath язык отличается от стандартных CSS селекторов
Да и скорость еще под вопросом у XPath, думаю он ляжет на больших объемах
testnv0; starik-2005; +2 Ответить
12. starik-2005 1921 03.04.19 11:11 Сейчас в теме
(11) так я и не спорю, что 1С для парсинга сайтов подходит весьма условно. Во второй статье очень хороший и интересный подход через кликер для динамики - реально вещь! )))
15. fr13 611 04.04.19 10:46 Сейчас в теме
Материал полезен для новичков в этой теме, но зачем же так называть переменные?
16. starik-2005 1921 04.04.19 13:32 Сейчас в теме
(15)
но зачем же так называть переменные?
Переменные названы просто отлично. Так, как в примерах для других языков программирования.
ЗЫ: Я, кстати, тоже с Вологды.
Прикрепленные файлы:
17. TODD22 17 04.04.19 13:33 Сейчас в теме
(16)Вы все переменные называете как "счётчик цикла" ?
18. starik-2005 1921 04.04.19 13:35 Сейчас в теме
(17)
Вы все переменные называете как "счётчик цикла" ?
Мы все переменные называем ровно так, чтобы было понятно, что они есть.
19. TODD22 17 04.04.19 14:11 Сейчас в теме
(18)
Да я заметил "О", "С", "З"... очень содержательные имена.
20. starik-2005 1921 04.04.19 14:18 Сейчас в теме
(19) для понимания достаточно?
21. premier 174 05.04.19 16:54 Сейчас в теме
(20) Вот имя переменной ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений вполне себе содержательное. Для понимания достаточно, даже если с места её объявления прокрутить несколько сотен строк, смысл всё равно будет понятен.
А вот смысловую нагрузку "О", "С", "З" можно понять, если текст, где происходит объявление этой переменной и где время её жизни заканчивается, находятся на одной экранной страннице. Не экономьте время на читабельности кода! Через некоторое время самому сложно будет этот код править.
22. starik-2005 1921 05.04.19 21:20 Сейчас в теме
(21) кто не умеет - тому пропроцессор компоновки как ни назови - все бессмысленно. А кто умеет - тому хоть горшком (наролная мудрость, кстати, а вряд ли мы умнее народа по-одному)
24. fr13 611 06.04.19 11:28 Сейчас в теме
(16) мы пересекались в Вологде года 4 назад. Магазин автозапчастей. Я тогда работал в своем первом франче, а Вы были как приглашенный московский спец ))
25. starik-2005 1921 06.04.19 17:19 Сейчас в теме
(24) я кстати к ним на днях заеду - чисто поглядеть. А по поводу приглашенного - это мои клиенты с 2004-го года.
26. starik-2005 1921 25.04.19 15:21 Сейчас в теме
(24) кстати, переработал и дополнил их программно-аппаратную часть - вот что получилось: https://infostart.ru/public/1051601/
27. fr13 611 26.04.19 08:47 Сейчас в теме
(26) Да, я прочитал этот материал ) сразу понял про кого речь ))
23. premier 174 06.04.19 10:27 Сейчас в теме
(0) Информация по теме: в версии платформы 8.3.13 у объекта ДокументHTML появилась функция НайтиПоФильтру(Фильтр). С её помощью можно получить требуемые узлы, выполнив следующий код:
	ЧтениеHTML = Новый ЧтениеHTML;
	ЧтениеHTML.УстановитьСтроку(ТекстHTML);
	Построитель = Новый ПостроительDOM;
	ДокументHTML = Построитель.Прочитать(ЧтениеHTML);
	ЧтениеHTML.Закрыть();
	ДокументHTML.НормализоватьДокумент();
	Фильтр = "{
			|	""type"": ""intersection"", 
			|	""value"": 
			|	[
			|		{ 
			|			""type"": ""elementname"", 
			|			""value"": 
			|			{ 
			|				""value"": ""div"",
			|				""operation"": ""equals""
			|			}, 
			|		}
			|		,
			|		{ 
			|			""type"": ""hasattribute"", 
			|			""value"": 
			|			{ 
			|				""value"": ""class"",
			|				""operation"": ""nameequals""
			|			}	 
			|		}
			|		,
			|		{ 
			|			""type"": ""hasattribute"", 
			|			""value"": 
			|			{ 
			|				""value"": ""item-info"",
			|				""operation"": ""valueequals""
			|			}	 
			|		}
			|	]
			|}";
	МассивУзлов = ДокументHTML.НайтиПоФильтру(Фильтр);
Показать


Ну а затем уже анализировать дочерние элементы. Можно с помощью XPath, а можно и без.
AlX0id; coollerinc; starik-2005; +3 Ответить
28. ture 554 17.05.19 15:15 Сейчас в теме
Jsoup, и не забивай голову ерундой
29. starik-2005 1921 17.05.19 15:36 Сейчас в теме
(28)
Jsoup
А что там у него с динамическим контентом?
30. ture 554 17.05.19 15:42 Сейчас в теме
31. starik-2005 1921 17.05.19 17:30 Сейчас в теме
32. amd1986 25.07.19 11:38 Сейчас в теме
Брр. Кто мешает использовать 1C 8.3.14 и javascript?
33. starik-2005 1921 25.07.19 12:29 Сейчас в теме
(32)
Кто мешает использовать 1C 8.3.14 и javascript?
А как JS заставить работать в регламентном задании? Мне вот реально надо (бывал как-то в Кадникове ВО в детском доме - давно это было).
34. amd1986 25.07.19 13:00 Сейчас в теме
(33) В фоновом наверно не получится(не проверял). Страница должна прогрузиться на форме, чтобы с ней можно было работать через ноды.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Москва
зарплата от 150 000 руб. до 150 000 руб.
Полный день

Консультант 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день

Программист стажер 1С
Нижний Новгород
зарплата от 30 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день

Программисты 1С УТ / БУЗ/ЗУП / БИТ ФИНАНС
Москва
зарплата от 100 000 руб. до 180 000 руб.
Полный день