xPath и парсинг сайтов

20.10.14

Интеграция - Сайты и интернет-магазины

Процедура получения части HTML страницы с помощью XPath запроса.

В процессе анализа сайтов с помощью браузера Chrome часто обращал внимание на пункт меню "Copy XPath"

После нескольких попыток разобраться как же это реализовано в 1С, почти забил.

Но нашел пример использования для Экселя http://www.ozgrid.com/forum/showthread.php?t=183596

Приписал для 1С . Результат представляю на Ваш суд 

&НаКлиентеНаСервереБезКонтекста
Функция getXPathElement(sXPath, objElement ) 
	
     // Split the xpath statement
    лМассивХР = СтрЗаменить(sXPath, "/",Символы.ПС);
    лИндексНоды = СтрПолучитьСтроку(лМассивХР,1); //лИндексНоды
	Если Найти(лИндексНоды, "@id") > 0 Тогда
		лИмя = СтрЗаменить(лИндексНоды,"[","");
		лИмя = СтрЗаменить(лИмя,"]","");
		лИмя = СтрЗаменить(лИмя,"=",Символы.ПС);
		лИмя = СтрПолучитьСтроку(лИмя,2);
		лИмя = СтрЗаменить(лИмя,"""","");
		ЛobjElement = objElement.ПолучитьЭлементПоИдентификатору(лИмя); 
		лМассивХР = СокрЛП(СтрЗаменить(лМассивХР,СтрПолучитьСтроку(лМассивХР,1),""));
		лИндексНоды = СтрПолучитьСтроку(лМассивХР,1);
	Иначе 
		ЛobjElement = objElement;
	КонецЕсли;	
	
	If Not Найти(лИндексНоды, "[") > 0 Then
        sNodeName = лИндексНоды;
        lNodeIndex = 1;
    Else
        лИндексНоды = СтрЗаменить(лИндексНоды, "[",Символы.ПС);
		лИндексНоды = СтрЗаменить(лИндексНоды, "]",Символы.ПС);
		sNodeName =  СтрПолучитьСтроку(лИндексНоды,1);
        lNodeIndex = Число(СтрПолучитьСтроку(лИндексНоды,2));
    EndIf;
	sRestOfXPath ="";
	Для Сч =2 По СтрЧислоСтрок(лМассивХР) Цикл
		sRestOfXPath = sRestOfXPath + ?(Сч=2,"","/")+СтрПолучитьСтроку(лМассивХР,Сч);		
	КонецЦикла;
     
    getXPathElement = Неопределено;
	
	лСчЭлементов = 0;
    For lCount = 0 To ЛobjElement.ДочерниеУзлы.Количество() - 1 Цикл
        If ВРег(ЛobjElement.ДочерниеУзлы.Item(lCount).ИмяУзла) = ВРег(sNodeName) Then
			лСчЭлементов = лСчЭлементов + 1;
			If lNodeIndex = лСчЭлементов Then
                If sRestOfXPath = "" Then
                    getXPathElement = objElement.ДочерниеУзлы.Элемент(lCount);
					Прервать;
                Else
                    getXPathElement = getXPathElement(sRestOfXPath, ЛobjElement.ДочерниеУзлы.Элемент(lCount));
					Прервать;
                EndIf;
            EndIf;
        EndIf;
	КонецЦикла;
	Возврат getXPathElement;
КонецФункции

Публикую после тестирования в своей обработке (т.е. прошла боевую проверку).

Пользоваться оказалось очень удобно :

	ЧтениеHTML = Новый ЧтениеHTML;
	ЧтениеHTML.УстановитьСтроку(ОтветСервера);
	ПостроительDOM = Новый ПостроительDOM;
	ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
	
	// Соберем данные из оглавления каталога 
	СтрокаХР = "[@id="+""""+"ContentWrapper"+""""+"]/div[1]/div[1]/ul";
	лКаталог = getXPathElement(СтрокаХР, ДокументHTML);

ОтветСервера - Это чистый HTML, в моем случае полученный как ответ WinHttp.ResponseText

xPath;парсинг

См. также

Оплата покупок "Долями" в 1С:Розница 2.3 (для работы с сервисом dolyame.ru)

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку.

18000 руб.

19.12.2023    2064    18    6    

16

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16162    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18265    10    15    

16

Обмен данными с сайтом. БП 3.0

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обмен данными с сайтом на платформе 1С:Битрикс (и подобными) для 1С: Бухгалтерия предприятия 3.0.

12000 руб.

18.03.2019    31909    117    101    

66

Универсальный парсер интернет-магазинов

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Управляемые формы 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

С того времени, как я начал парсить сайты, прошло много лет. За это время я спарсил более 100 сайтов и записал эти товары в 1С. В итоге на свет появился универсальный парсер, который поможет Вам спарсить интернет-магазин и при этом не написать ни строчки кода.

9600 руб.

19.10.2018    52583    220    101    

112

SALE! 33%

«Мониторинг цен» – сервис для отслеживания цен конкурентов на ведущих маркетплейсах России

Маркетплейсы Сайты и интернет-магазины 8.3.14 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Сервис помогает отслеживать цены на ведущих маркетплейсах России только для одного региона – Москва и Московская область. Выполняйте анализ и контролируйте цены Ваших конкурентов сразу в системе 1С.

2400 1608 руб.

29.05.2023    7044    27    41    

15

Выгрузка для АВИТО

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 Россия Платные (руб)

Выгрузка товаров услуг из 1С для сайта "Авито" раздел "Автозагрузка" выполнена в виде обработки. Обработка подходит для конфигураций УТ, УНФ и Розница. Данная обработка позволяет создавать шаблон с объявлениями для "Авито" - "Автозагрузка".

4200 руб.

07.06.2022    15957    43    56    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. BigB 192 21.10.14 10:56 Сейчас в теме
А при чем тут XPath? То что Вы так назвали функцию? При этом?
С таким же успехом можно было бы назвать её "АдронныйКоллайдер" и заголовок у статьи сделать таким "Адронный коллайдер и парсинг сайтов".
У Вас здесь нет использования XPath. Это у Вас обычный закат солнца вручную.
А, ну да, не вручную, а с помощью функции.
2. faust1976 12 21.10.14 11:42 Сейчас в теме
Если я что то не понимаю вы исправьте .
Функцию назвал так, потому что в браузере увидел такое название.
Если слово XPah для Вас является сакральным, примите мои извинения …
3. BigB 192 21.10.14 12:06 Сейчас в теме
(2) из заголовка я понял, что вы парсите сайты использую встроенные средства платформы для работы с XPath, но оказалась, что Вы просто так функцию назвали.
4. faust1976 12 21.10.14 12:25 Сейчас в теме
Да. Именно так .
Т.к. не смог разобраться как использовать встроенные возможности платформы.
При попытке воспользоваться встроенными возможностями и строкой XPath полученной из браузера результат оказался нулевой
5. AlX0id 22.10.14 10:09 Сейчас в теме
(4) Проблема в том, что XPath - это чуть больше, чем строка пути в хроме ))
https://ru.wikipedia.org/wiki/XPath
6. AlX0id 22.10.14 10:16 Сейчас в теме
И да - в 1С для HTML он не работает. К сожалению.
7. Dmitryiv 161 22.10.14 10:28 Сейчас в теме
(6) AlX0id, Отчего же не работатет. Работатет, если страница сформирована по всем правилам XHTML.
8. AlX0id 22.10.14 11:41 Сейчас в теме
(7) Dmitryiv,
Я к тому, что вот такой кусок кода работать не будет.
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.ОткрытьФайл(ИмяВременногоФайла);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеHTML);
		
Разыменователь = Новый РазыменовательПространствИменDOM(ДокументDOM);
Выражение = ДокументDOM.СоздатьВыражениеXPath("//a", Разыменователь);

Упадет на последней строке - из-за того, что построитель ДОМ на самом деле создаст объект типа ДокументHTML (что как по мне довольно странно), у которого нет метода СоздатьВыражениеXPath. Или я ошибаюсь и в случае "если страница сформирована по всем правилам XHTML" - будет наблюдаться другое поведение?
9. faust1976 12 22.10.14 12:32 Сейчас в теме
Коллеги, к сожалению, когда нужно распарсить несколько сайтов, некогда разбираться какой сформирован по правилам XHTML, а какой нет. Решение должно быть простым и быстрым.
Вот скопировать строку из браузера и вставить в настройки – это быстро. И это будет работать какое то время
С теоритической точки зрения XPath действительно больше чем просто строка, но как говорил Дэн Сяопин «Не важно, какого цвета кошка, лишь бы она ловила мышей» А мыши не все серые, и не всегда мыши …

На сайте я не нашел работающих примеров которые помогли бы мне использовать строчку из браузера для поиска элементов в загруженной страничке HTML.
Если можете поделиться информацией как можно использовать метод СоздатьВыражениеXPath для поиска части страницы - пожалуйста поделитесь
10. AlX0id 22.10.14 13:57 Сейчас в теме
(9)
Вероятно, подойдет вот это http://msdn.microsoft.com/en-us/library/aa926403.aspx. Но опять же,судя по отзывам из интернета, даже MSXML2.DOMDocument не очень-то хорошо переваривает HTML.

Не обижайтесь, но просто ваш инструмент - это не XPath, а просто перебор дерева DOM в соответствии с некоторым правилом. Говоря об XPath, хотелось бы видеть хотя бы функции contains, >, < и т.п.. Типа "//*[contains(name(),'C')]", например..
11. faust1976 12 22.10.14 14:06 Сейчас в теме
Конечно же это не XPath ..
Просто когда я искал решение, то ключевыми словами для меня были : XPath,Запрос … т..д
Мне это помогло … хотелось бы что бы люди сталкивающиеся с подобными задачами находили ответ быстрее чем я .
Ну, а заголовок статьи можно считать провокационным маркетингом
Хотя написать движек XPath в 1С была крамольная мысль ;-)
kuzyara; Jorge272; BigB; +3 Ответить
Оставьте свое сообщение