Парсинг сайта без использования встроенного браузера для начинающих

Публикация № 314045

Разработка - Практика программирования

парсинг сайта программирование

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

Задача: научиться парсить сайт на конкретном примере

Будем парсить сайт brass.ru - крупного поставщика фурнитуры

Способ парсинга аналогичен тому, что указан в публикации //infostart.ru/public/88106/ , но имеет другой подход.

Далее следует большое полотно текста вперемешку с кодом, если нет желания читать – внизу можно скачать обработку и сразу разбираться в коде – он прокомментирован.

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

Поехали!

Парсить будем не с помощью элемента ДокументHTML на форме, а с помощью ЧтениеHTML (класс для загрузки html-документа) и ПостроительDOM (класс, загружающий в себя всю структуру и информацию документа). Суть этого метода заключается в том, что нам нужно подключиться к серверу, получить необходимую нам html-страницу (только html-код) и разобрать ее, а не загружать всё содержимое страницы на форму и потом рендерить его.

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

Я использовал для этого Google Chrome.

Теоритическая часть

1. Парсим каталоги

Начнем собирать данные. Заходим в каталог товаров, клацаем правой клавишей на список товаров -> Показать код элемента. Видим, что список подкаталогов содержится в элементе TABLE с классом navCatalog, глядим на ссылки на подкаталоги – они представляют из себя элементы A. Это значит, что нам нужно найти элемент TABLE с классом navCatalog и получить из него все элементы A. Если мы перейдем в первый каталог, то увидим, что там есть еще каталоги – это не проблема, ведь эта страница подчиняется все тем же правилам, а наша процедура парсинга каталогов будет рекурсивна.

2. Парсим список товаров

Переходим в следующий подкаталог и, наконец, видим наши товары. Они, конечно, распределены по страницам, но, добавив в ссылку «?SHOWALL_1=1», мы сможем посмотреть весь список товаров из этого каталога. Смотрим код элемента, и видим, что все товары так же заключены в элементе TABLE, но уже с классом catalog. Этот элемент содержит в себе блоки TD с классом item – это и есть блоки с нашими товарами. В каждом из них содержится по два блока DIV с именами img и name – они содержат изображение и имя (ссылку на товар), соответственно. Все, с этой страницы мы вытянули все, что нам было нужно.

3. Парсим страницу товара

Все, что нам осталось найти – ссылка на картинку большого разрешения и описание товара. Переходим на страницу товара, все тем же способом видим, в каком блоке находится картинка (блок DIV класса big) и описание (блок DIV класса text). Все, осталась только техническая часть.

Техническая часть

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

  1. Парсим страничку каталога верхнего уровня и получаем список остальных каталогов;
  2. Рекурсивно парсим страницы каталогов на подкаталоги;
  3. Парсим подкаталоги нижнего уровня на список товаров;
  4. Парсим страницу каждого товара для получения информации о нем.

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

Создадим обработку. Добавим реквизиты:

- Сервер (будем хранить адрес нашего сайта);

- КаталогЗагрузки (путь к папке на диске, в которую будут загружаться временные файлы).

Добавим на форму табличную часть «СписокКаталогов» с реквизитами

- Раздел (для хранения имени каталога);

- СсылкаНаСтраницу (для хранения ссылки на каталог).

Будем грузить артикул, наименование, описание и большую картинку.

Добавим на форму табличную часть «Товары» с реквизитами:

- Артикул;

- Наименование;

- Описание;

- СсылкаНаКартинку (будем хранить ссылку на маленькую картинку);

- СсылкаНаТовар (будем хранить ссылку на страницу товара);

- ПутьКФайлу (будем хранить путь к картинке, которую загрузили на диск).

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

Собственно, реквизитов нам больше не нужно, приступим к написанию кода.

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

Первым делом грузим и парсим страницу основного каталога – brass.ru/catalog/.

 При открытии формы нам следует запомнить сервер, с которого будем загружать страницы – www.brass.ru (адрес должен выглядеть именно так), каталог на диске. Так же откроем соединение с сервером.

Перем Соединение;
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Сервер = "www.brass.ru";
    КаталогЗагрузки = "C:/1c82/brass";
    Соединение = Новый HTTPСоединение(Сервер);
КонецПроцедуры

Так же нам обязательно нужно создать в этом каталоге еще три других, в них будут загружаться временные файлы:

- "/catalog/"
- "/temp/"
- "/img/"

Что бы понять, что будет происходить далее, нужно обязательно при запуске кода смотреть, что из себя прадставляют полученные нами структуры (табличцы значений) ДокументХТМЛ, ЭлементыTABLE, ЭлементыTD и прочие подобные - сразу все встанет на свои места.

Обозначим процедуру (сразу с параметрами, т.к. она будет рекурсивно парсить все каталоги).

Процедура ПропарситьКаталог(Каталог = "", Раздел = "")
	ЧтениеХТМЛ = Новый ЧтениеHTML; 
	ПостроительДОМ = Новый ПостроительDOM;
	//Генерируем имя файла на диске, в который запишется страница сайта
	ИмяФайла = КаталогЗагрузки + "/catalog/" + СтрЗаменить(Каталог, "/", "_") + ".html"; 
	//Загружаем нужную нам страницу в каталог
	Соединение.Получить(Каталог, ИмяФайла);
	//Начинаем чтение нашего файла
	ЧтениеХТМЛ.ОткрытьФайл(ИмяФайла, "UTF-8"); 
	//Загружаем всю структуру документа в DOM
	ДокументХТМЛ = ПостроительДОМ.Прочитать(ЧтениеХТМЛ);
	
	//Получаем все элементы TABLE
	ЭлементыTABLE = ДокументХТМЛ.ПолучитьЭлементыПоИмени("TABLE");
	//Находим в них нужный нам блок, содержащий ссылки на подкаталоги
	Для Каждого ЭлементTABLE из ЭлементыTABLE Цикл
	ОбработкаПрерыванияПользователя();
		Если ЭлементTABLE.ИмяКласса = "navCatalog" Тогда
		    //Нашли, собираем из него все ссылки (элементы А)
			ЭлементыA = ЭлементTABLE.ПолучитьЭлементыПоИмени("A");
			Если ЭлементыA.Количество() > 0 Тогда
				//Начинаем парсить каждую найденную ссылку как каталог этой же процедурой рекурсивно
				Для Каждого ЭлементA из ЭлементыA Цикл
					ПропарситьКаталог(ЭлементA.Гиперссылка, Раздел + " / " + ЭлементA.ТекстовоеСодержимое);
				КонецЦикла;
			Иначе
				//Если ссылок не найдено, значит подкаталогов нет и это конечный подкаталог
				//Добавляем его в нашу табличную часть
				НоваяСтрока = СписокКаталогов.Добавить();
				НоваяСтрока.Раздел = Раздел;
				НоваяСтрока.СсылкаНаСтраницу = Каталог;	
			КонецЕсли;	
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

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

ПропарситьКаталог("/catalog/", "Каталог");

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

Далее создадим кнопку для загрузки товаров в соответствующую табличную часть и пропишем ей следующий код:

Товары.Очистить();

ЧтениеХТМЛ = Новый ЧтениеHTML(); 
ПостроительДОМ = Новый ПостроительDOM;
//Добавляем к адресу ссылки обозначение, которое позволит нам получить полный список товаров выбранного каталога, а не постранично	
АдресСайта = ЭлементыФормы.СписокКаталогов.ТекущиеДанные.СсылкаНаСтраницу + "?SHOWALL_1=1";
//Загружаем страницу с товарами
Соединение.Получить(АдресСайта, КаталогЗагрузки + "/site.html");
//Начинаем чтение нашего файла
ЧтениеХТМЛ.ОткрытьФайл(КаталогЗагрузки + "/site.html", "UTF-8"); 
//Загружаем всю структуру документа в DOM
ДокументХТМЛ = ПостроительДОМ.Прочитать(ЧтениеХТМЛ); 

//Получаем все элементы TABLE
ЭлементыTABLE = ДокументХТМЛ.ПолучитьЭлементыПоИмени("TABLE");

Для Каждого ЭлементTABLE из ЭлементыTABLE Цикл
	//Находим блок, содержащий все товары
	Если ЭлементTABLE.ИмяКласса = "catalog" Тогда
		//Теперь получаем все блоки TD, входящие в блок TABLE класса catalog
		ЭлементыTD = ЭлементTABLE.ПолучитьЭлементыПоИмени("TD");
		Для Каждого ЭлементTD из ЭлементыTD Цикл
			//Находим блок каждого товара
			Если ЭлементTD.ИмяКласса = "item" Тогда
				//Теперь получаем все блоки DIV, входящие в блок TD класса item
				ЭлементыDIV = ЭлементTD.ПолучитьЭлементыПоИмени("DIV");
				//Мы знаем, что в каждом таком блоке лежат еще два блока с картинкой и ссылкой на страницу товара
				Если ЭлементыDIV.Количество() = 2 тогда
					НоваяСтрока = Товары.Добавить();
					//Добавили новую строку в табличную часть товары, переходим к её заполнению
					Для Каждого ЭлементDIV из ЭлементыDIV Цикл
						//Нашли блок с картинкой маленького разрешения
						Если ЭлементDIV.ИмяКласса = "img" Тогда
							//Т.к. в этом блоке есть еще один блок, а в нем еще один, то мы можем спокойно обращаться к ним через ПервыйДочерний
							//Таким образом мы спускаемся вниз по дереву структуры до нужных нам данных
							НоваяСтрока.СсылкаНаТовар = ЭлементDIV.ПервыйДочерний.Гиперссылка;
							Если НЕ ЭлементDIV.ПервыйДочерний.ПервыйДочерний = Неопределено Тогда
								НоваяСтрока.СсылкаНаКартинку = ЭлементDIV.ПервыйДочерний.ПервыйДочерний.Источник;
							КонецЕсли;
						КонецЕсли;
						//Нашли блок с именем товара
						Если ЭлементDIV.ИмяКласса = "name" Тогда
							//Получаем текстовое содержимое - артикул и наименование в одной строке! Не беда.
							ПолученнаяСтрока = ЭлементDIV.ТекстовоеСодержимое;
							//Артикул состоит из цифр и латинских символов, разберем строку по этому принципу
							Н = 1;
							Пока Н  1000 Тогда
									Прервать;
								КонецЕсли;
								Н = Н + 1;
							КонецЦикла;
							
							Артикул = Лев(ПолученнаяСтрока, Н - 1);
							Если СтрДлина(Артикул) > 0 Тогда
								Наименование = Прав(ПолученнаяСтрока, СтрДлина(ПолученнаяСтрока) - Н);
							Иначе
								Наименование = Прав(ПолученнаяСтрока, СтрДлина(ПолученнаяСтрока) - Н + 1);
							КонецЕсли;
							
							НоваяСтрока.Артикул = Артикул;
							НоваяСтрока.Наименование = Наименование;
						КонецЕсли;
					КонецЦикла;	
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
КонецЦикла;

Поздравляю, теперь наша обработка может загрузить все товары из выбранного в первой табличной части каталога!

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

ЧтениеХТМЛ = Новый ЧтениеHTML(); 
ПостроительДОМ = Новый ПостроительDOM;

//Т.к. ссылки на страницы с товарами у нас уже есть в табличной части, то мы просто загружаем и парсим их страницы
Для Каждого Строка из Товары Цикл
	Если Строка.Пометка Тогда
		//Код аналогичен предыдущим этапам, поэтому комментарии излишни
		ИмяФайла = КаталогЗагрузки + "/temp/site_" + Строка.НомерСтроки +".html";
		Соединение.Получить(Строка.СсылкаНаТовар, ИмяФайла);
		ЧтениеХТМЛ.ОткрытьФайл(ИмяФайла, "UTF-8");
		ДокументХТМЛ = ПостроительДОМ.Прочитать(ЧтениеХТМЛ); 
		//Получаем все блоки DIV
		ЭлементыDIV = ДокументХТМЛ.ПолучитьЭлементыПоИмени("DIV");
		Для Каждого ЭлементDIV из ЭлементыDIV Цикл
			//Находим интересующий нас блок с картинкой большого разрешения
			Если ЭлементDIV.ИмяКласса = "big" Тогда
				Если НЕ ЭлементDIV.ПервыйДочерний = Неопределено Тогда
					Строка.СсылкаНаКартинку = ЭлементDIV.ПервыйДочерний.Источник;	
				КонецЕсли; 
			КонецЕсли;
			//Находим интересующий нас блок с описанием товара
			Если ЭлементDIV.ИмяКласса = "text" Тогда
				//В строке содержатся лишние символы, поэтому просто обрежем их
				ПолученнаяСтрока = ЭлементDIV.ТекстовоеСодержимое;	
				Н = 1;
				Пока Н  1000 Тогда
						Прервать;
					КонецЕсли;
					Н = Н + 1;
				КонецЦикла;
				
				Строка.Описание = Прав(ПолученнаяСтрока, СтрДлина(ПолученнаяСтрока) - Н + 1);
			КонецЕсли;
		КонецЦикла;	
	КонецЕсли;
КонецЦикла;

Отмечаем галочками несколько товаров, жмем кнопку и видим, как загружается описание и ссылка на картинку заменяется новой. 

По сути, текстовые данные мы получили, задача выполнена, но осталось еще загрузка картинок - это будет бонусом и без комментариев кода. Или другой, более эффективный способ сохранения картинки от Поручика

Для этого создадим функцию для загрузки картинки, которая вернет нам путь к ней:

Функция ЗагрузитьКартинку(КаталогСохранения, СсылкаНаКартинку, ИмяКартинки)
	ИмяФайлаКартинки = "";
	Попытка
		ИмяФайлаКартинки = КаталогСохранения + ИмяКартинки;
		Request = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
		Request.SetTimeouts(10000, 10000, 10000, 10000);
		Header1 = "Content-Type";
		Header2 = "image/jpg";
		Request.Open("GET", "http://" + СсылкаНаКартинку, False);
		Request.setRequestHeader(Header1, Header1);
		Request.Send();
		СтатусОтправки = Request.status;
		Если СтатусОтправки <> 200 Тогда
			Сообщить("Ошибка отправки запроса на: " + СсылкаНаКартинку);
			Возврат "";
		КонецЕсли;        

		Stream = Новый COMОбъект("ADODB.Stream");
		Stream.Mode = 3;
		Stream.Type = 1;
		Stream.Open();
		Stream.Write(Request.responseBody);

		Stream.SaveToFile(ИмяФайлаКартинки, 2);
		Stream.Close();
	Исключение
	КонецПопытки;
	Возврат ИмяФайлаКартинки;
КонецФункции

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

Строка.ПутьКФайлу = ЗагрузитьКартинку(КаталогЗагрузки + "/img/", Сервер + Строка.СсылкаНаКартинку, ЗаменитьСимволы(Строка.Артикул) + ".jpg");

Имена картинок формируются из артикулов, а артикулы могут содержать неприемлимые знаки, избавимся от них функцией ЗаменитьСимволы, которая у нас использована в предыдущем отрывке кода:

Функция ЗаменитьСимволы(мСтрока)
	Строка = СтрЗаменить(мСтрока, "", "");
	Н = 1;
	ДС = СтрДлина(Строка) - 1;
	Пока Н  90) И (КодСимвола(Строка, Н) < 48 ИЛИ КодСимвола(Строка, Н) > 57) И (КодСимвола(Строка, Н) < 97 ИЛИ КодСимвола(Строка, Н) > 122) Тогда
			Строка = СтрЗаменить(Строка, Сред(Строка, Н, 1), "-");
		КонецЕсли;
		Н = Н + 1;
	КонецЦикла;
	
	Возврат Строка;
КонецФункции

Алилуя! У нас есть артикул, наименование, описание и картинка в большом разрешении! Осталось только перенести эти данные в номенклатуру, но если вы дошли до этого момента, то, надеюсь, вы это сможете сделать сами.

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

Спасибо за внимание!

 

 

 

 

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

Наименование Файл Версия Размер
Итоговая версия обработки "Парсинг сайта"

.epf 13,53Kb
25.11.14
190
.epf 0.0.1 13,53Kb 190 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 3482 20.11.14 19:39 Сейчас в теме
Эхх... Опередил меня... Ну ладно, всё в дело, всё в копилку. Правда, я предпочитаю работать через HTTPRequest, и активно использую XPath.
2. angernaughts 120 21.11.14 12:47 Сейчас в теме
(1) Yashazz, Поделись. Я сам не так давно влез в это дело: появилась задача, начал гуглить, рыл, копал, нашел только про парсинг с браузером на форме. Случайно наткнулся на комментарий про DOM и решил поглядеть, что это. Для таких же, как я и написал эту статейку. Хотя бы вкратце опиши свой подход.
4. cool.vlad4 45 22.11.14 03:35 Сейчас в теме
(2) angernaughts, просто ради интереса. а сколько времени у вас ушло на написание этого парсера? и второй вопрос: сколько времени уйдет на починку парсера (примерно), в случае если изменится дизайн на сайте, т.е. поменяются теги и т.п.?
6. Yashazz 3482 22.11.14 20:11 Сейчас в теме
(2) angernaughts, (4) cool.vlad4, не раньше начала декабря. Ну или могу совсем куски кода вывалить. Парсинг с браузером вообще не катит ввиду совсем устаревшего встроенного браузера, и ввиду того, что многие сайты такие заходы считают ботами и банят. Могу самое общее сюды выложить. Сделать?

Достраиваю до валидного игрищами с DOM, копирую-импортирую узлы, нормализую... Всякие извраты чисто средствами 1С, и прокатывает. XPath нормально пашет.

Картинки читаю GET-запросом. Структуру, если меняется, реадаптирую за 10-15 минут, давеча тренировался на парочке порносайтов)))
9. Bublik2011 9 24.11.14 17:18 Сейчас в теме
(2) angernaughts, у меня тоже "захотелось" ДокументХТМЛ распарсить с помощью XPATH , который дает преимущества при парсинге. Но рассматривать HTML верстку как MXL мне не удалось, пришлось поступить еще проще и без многочисленных итераций поиска по DOM элементам.

http://forum.infostart.ru/forum24/topic114816/message1242204/#message1242204

В этом-же посте ссылка на софт и описание
36. user1052625 15.05.20 17:59 Сейчас в теме
(2)
(34)
появляется потребность изучать сторонние технологии, но если мы не развиваемся - значит мы деградируем)


Есть ли какой то новый парсер - прогрессивный? Сейчас стоит очень большая нужда в чем то подобном! Под ключ.
3. cool.vlad4 45 22.11.14 03:31 Сейчас в теме
(1) Yashazz, любопытно, а чем достраиваешь html до валидного xml в 1С? не в 1С я знаю библиотек вагон и маленькую тележку. ну и часть из них я использую.
5. Поручик 4436 22.11.14 18:27 Сейчас в теме
(0) Загружать картинки можно без com-объектов. Даже нужно. http://forum.aeroion.ru/topic749.html
angernaughts; ZOMI; BigB; +3 Ответить
7. V_V_V 22.11.14 23:06 Сейчас в теме
Уж сильно заточено под конкретный сайт... Структуру которого тоже, как справедливо было замечено, никто не мешает изменить в любое удобное для владельца время...
Но тем не менее работа проделана большая, плюс не жалко. Как учебный материал статья отличная.
8. Поручик 4436 24.11.14 09:01 Сейчас в теме
(7) Универсальный парсер для любого сайта сделать невозможно. Можно сделать только разбор структуры, которая ничего не даст с практической точки зрения.
rpgshnik; Boudybuilder; +2 Ответить
27. Boudybuilder 66 05.01.15 01:31 Сейчас в теме
(8) Поручик, вы правы! Действительно, были ко мне такие вопросы, чтобы сделать универсальный парсер с настройками. Но не получается. Но, если разбирать детальную страницу товара , а не парсить весь сайт целиком , то можно. Например у меня парсер есть где я могу почти под любой сайт настроить загрузку изображений ,детального описания или строки поиска.
10. monsta 59 24.11.14 19:51 Сейчас в теме
А на каком сервисе картинка публикации сделана? Со звездой которая...
11. angernaughts 120 25.11.14 10:23 Сейчас в теме
(10) monsta, https://tagul.com/
(4) cool.vlad4, я имею некоторые знания в верстке сайта, поэтому база, на которой я строил парсер уже была. За пару часов накатал. Статью дольше писал. А починить парсер, да вообще не проблема. У такого типа сайтов вряд ли часто изменяется дизайн (хтмл-код), поэтому, вряд ли придется часто допиливать.
(5) Поручик, да, спасибо, мой метод - просто как костыль.
12. karpik666 2923 25.11.14 10:56 Сейчас в теме
Подскажите, как получить через httpСоединение страницу, по пути без явного указания типа страницы, например, если взять инфостарт, то здесь "https://infostart.ru/public/314045/" по нему невозможно получить страницу с помощью запроса, пишет, что такая страница не найдена.
13. Поручик 4436 25.11.14 11:29 Сейчас в теме
(12) Я же функцию выше дал. С помощью неё я дёргаю с некоего сайта страницы для разбора на части и картинки для записи в базу.
karpik666; +1 Ответить
14. angernaughts 120 25.11.14 11:39 Сейчас в теме
(12) karpik666, Скорее всего, здесь идет переадресация. В теле полученного файла или в куки посмотри, там должны быть какие-то намеки. Очень хорошо расписано по ссылке в комментарии (5), там даже есть разбор такой ситуации.
15. monsta 59 26.11.14 21:13 Сейчас в теме
Метод неплохой - может выручить по-быстрому
Если работать плотнее то все эти кудрявые Если ЭлементTD.ИмяКласса = "item" лучше уместить в одну строку в XDTO или CSS селекторах
32. TheProW 23.05.16 11:38 Сейчас в теме
{Обработка.Обработка1.Форма.Форма.Форма(15)}: Значение не является значением объектного типа (Получить)
Соединение.Получить(Каталог, ИмяФайла);
16. Sykoku 98 27.11.14 12:21 Сейчас в теме
Изобретатели самокатов...

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

Своровать описание товаров с сайта можно и быстрее и проще. Но не в 1С.
17. angernaughts 120 27.11.14 13:05 Сейчас в теме
(16) Sykoku, а в 1С всегда так - где-нибудь что-нибудь обновили - переписывай.
Если вы хотите парсить развлекательные сайты, где куча всяких навороченных фич - эта статья не для вас. А для разбора товаров с сайта поставщика - весьма неплохо.
18. Sykoku 98 27.11.14 13:52 Сейчас в теме
(17) angernaughts,

"Парсить сайт поставщика" - это что, для поиска товаров и их описания?! - Даже комментировать не буду...
20. angernaughts 120 27.11.14 15:00 Сейчас в теме
(18) Sykoku, читайте хотя бы часть текста публикации перед комментированием.
21. monsta 59 27.11.14 19:31 Сейчас в теме
(18) Sykoku, а почему не будете комментировать? И как бы хорошо заявлять, что api использовать правильнее чем скрапинг - ну покажите нам его на brass.ru тогда пожалуйста. Про то что "не на 1С" это сделать проще - это понятно. Зацените как это можно сделать на 1С!
19. Elisy 933 27.11.14 14:25 Сейчас в теме
Может, кому-то пригодится опыт по аналогичному решению, но без привязки к конкретному веб-сайту
http://infostart.ru/public/261354/
rpgshnik; monsta; +2 Ответить
22. monsta 59 27.11.14 19:32 Сейчас в теме
Поддержу (19) там все посерьезнее конечно.
23. NOVOPRO 11.12.14 08:01 Сейчас в теме
Выдает глюк при выполнение процедуры и не получается в итоге с ней работать............
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Сервер = "www.brass.ru";
КаталогЗагрузки = "C:/1c82/brass";
Соединение = Новый HTTPСоединение(Сервер);
24. angernaughts 120 11.12.14 14:59 Сейчас в теме
26. monsta 59 17.12.14 21:30 Сейчас в теме
Им отвечаешь что-то в стиле (24), а тебе опять "срочно почините работа встала!!!" и опять тишина....
25. monsta 59 17.12.14 21:30 Сейчас в теме
Классическое описание проблемы пользователем, лол.
28. kolp821 15.05.15 15:13 Сейчас в теме
Не могу понять этот кусок кода, помогите разобраться

Н = 1;
Пока Н 1000 Тогда
Прервать;
КонецЕсли;
Н = Н + 1;
КонецЦикла;
29. karpik666 2923 15.05.15 15:41 Сейчас в теме
(28) kolp821, А что понимать, код видимо не верен, в принципе должно быть так
Н = 1; 
Пока Истина Цикл
Если Н > 1000 Тогда 
Прервать; 
КонецЕсли; 
Н = Н + 1; 
КонецЦикла;
Показать
30. s_uu 22 08.08.15 13:43 Сейчас в теме
На управляемых формах не открывается!
31. Maximuss 01.03.16 18:29 Сейчас в теме
33. echo77 1174 22.02.17 16:06 Сейчас в теме
Что делать, если в HTML-документе есть скрипт, который выполняется после загрузки страницы и достраивает ее содержимое?
rpgshnik; +1 Ответить
34. angernaughts 120 22.02.17 22:22 Сейчас в теме
(33) Сейчас уже есть куча новых технологий, позволяющих делать все лучше и быстрее. Самый правильный выход здесь - создать прослойку с помощью другого программного обеспечения, которое бы парсило и сводило данные с разных источников к одному формату, который скармливался бы конфиге. Для ситуации, описанной в вашем вопросе, лучше всего подошел бы парсер на nodejs. Конечно, появляется потребность изучать сторонние технологии, но если мы не развиваемся - значит мы деградируем)
Gang031; rpgshnik; echo77; +3 Ответить
35. AlexandrSmith 70 08.10.19 21:50 Сейчас в теме
Немного добавлю, что по умолчанию используется IE версии машины с которой отправляется запрос, а следовательно, у большинства Хром и Мозила, а IE плохо с ошибками может отображать и парсить страницы. Может и вообще не загрузить страницу выкинуть ошибку.
Alex1053669; +1 Ответить
37. user1477624 14.10.20 20:03 Сейчас в теме
Во все эти подробности можно не вдаваться. Есть куча специализированных сервисов этого направления. Мы часто тестим подобные ресурсы парсинга, пока нам нравится Allrival. Не требует написания кода, за тебя все сделают программисты, внесут нужные тебе коррективы.. Все быстро, удобно, и за небольшую цену.
Оставьте свое сообщение

См. также

Внешняя компонента для работы по Web-socket протоколу x32 x64 Промо

Разработка внешних компонент WEB v8 Абонемент ($m)

Кто когда-нибудь сталкивался с обменом данными по Web-Socket (wss) протоколу из 1С, тому известно, что в платформе отсутствуют данные механизмы (не путать с HTTP запросами и WebServices). Предлагается использовать внешнюю компоненту, написанную по технологии NativeAPI, для подключения и обмена с серверами из 1С-Предприятия, работающими по протоколу Web-Socket.

1 стартмани

30.03.2018    26515    36    Ditron    83    

Самый простой парсинг и обработка веб-страниц в 1С

WEB Универсальные функции v8 1cv8.cf Бесплатно (free)

Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.

07.08.2020    4791    YPermitin    18    

Работа с релизами 1С и договорами ИТС

WEB БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Работа с релизами 1С и партнерским кабинетом.

2 стартмани

15.08.2019    14386    42    RocKeR_13    15    

Вам нравятся запросы в 1С?

Практика программирования Разработка v8 v8::Запросы 1cv8.cf Абонемент ($m)

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    20510    4    m-rv    86    

Трекинг номеров РПО в Почте России Промо

WEB Оптовая торговля Оптовая торговля v8 Оптовая торговля, дистрибуция, логистика Абонемент ($m)

Относительно недавно Почта России стандартизировала и описала сервисы получения информации о регистрируемом почтовом отправлении (РПО). Представляю вашему вниманию конфигурацию-обертку над сервисами Почты России. Она позволяет просто (http-запросы) и без изменений конфигурации подключить сервисы отслеживания к своим информационным системам.

2 стартмани

28.03.2016    26940    11    Smaylukk    3    

Парсинг сайта на управляемых формах без использования встроенного браузера для начинающих

WEB v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

28.01.2019    4219    8    user811626    0    

Проверка VAT номеров

WEB v8 1cv8.cf Абонемент ($m)

Обработка для вызова сервиса проверка VAT номера.

1 стартмани

26.11.2018    12572    2    wtlz    1    

Работа с публикациями "Инфостарт"

Практика программирования О сообществе WEB v8 УУ Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    21711    13    RocKeR_13    16    

Работа с картой. Кадастровый учет (Росреестр). Тематические карты Промо

WEB Рабочее место v8 v8::УФ 1cv8.cf Абонемент ($m)

Внешняя обработка для работы с картами в 1С. Получения изображения с публичной кадастровой карты России, построения тематических карт

5 стартмани

31.08.2017    18297    14    vipchep    0    

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

Инструментарий разработчика Практика программирования v8 Абонемент ($m)

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    28093    26    informa1555    26    

Работа с данными выбора

Практика программирования Работа с интерфейсом v8 Россия Абонемент ($m)

В управляемом интерфейсе заложена мощная возможность описывать связи реквизитов формы через параметры. Установка параметров связей позволяет ограничить выбор данных так, чтобы целостность данных была обеспечена на этапе ввода. Однако без дополнительного программирования задать можно только самые простые связи. Такие условия связи, как зависимость от реквизита через точку или зависимость через дополнительное отношение, заданное в регистре сведений - уже задать без программирования не получится.

1 стартмани

17.07.2018    47346    17    kalyaka    16    

Пример использования REST API Яндекс Диска

WEB v8 1cv8.cf Абонемент ($m)

Пример использования REST API Яндекс Диска: чтение диска, добавление каталога, загрузка файла, скачивание файлов или каталогов, удаление файлов или каталогов.

1 стартмани

26.06.2018    25335    41    MKFreeUser    15    

Работа с картами 1С 4 в 1: Яндекс, Google , 2ГИС, OpenStreetMap(OpenLayers) Промо

Универсальные обработки WEB v8 1cv8.cf Абонемент ($m)

С каждым годом становится все очевидно, что использование онлайн-сервисов намного упрощает жизнь. К сожалению по картографическим сервисам условия пока жестковаты. Но, ориентируясь на будущее, я решил показать возможности API выше указанных сервисов: Инициализация карты Поиск адреса на карте с текстовым представлением Геокодинг Обратная поиск адреса по ее координатами Взаимодействие с картами - прием координат установленного на карте метки Построение маршрутов по указанным точками Кластеризация меток на карте при увеличении масштаба Теперь также поддержка тонкого и веб-клиента

1 стартмани

28.12.2012    105955    1195    Smaylukk    355    

Обмен файловыми базами данных через Yandex диск

WEB v8 Россия Абонемент ($m)

Выполнение операций обмена с Yandex диском для файловых БД, по протоколу WebDav, в автоматическом или ручном режимах.

1 стартмани

11.06.2018    17250    6    slimper    1    

Конфигурация для просмотра публичных телеграм каналов

WEB v8 Абонемент ($m)

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

1 стартмани

02.06.2018    17953    10    DO_WHILE_LOOP    7    

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар")

Практика программирования v8 v8::Запросы 1cv8.cf Абонемент ($m)

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    30401    86    m-rv    57    

Нечеткий поиск одним запросом Промо

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

28.12.2015    27712    70    vasvl123    9    

Построение маршрута доставки с расчётом расстояния для любой базы УФ

Универсальные обработки WEB Оптовая торговля Оптовая торговля v8 v8::УФ 1cv8.cf Абонемент ($m)

Графическое изображение маршрутного листа по картам гугл. Работает на любой конфигурации с управляемыми формами. Использует новую версию api google-карт от 13.02.2018 года под IE11.

10 стартмани

24.02.2018    35720    43    KorotkovRV    16    

Заполняем по шаблону (по умолчанию)

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

08.02.2018    28249    19    mvxyz    17    

Сервер push сообщений “Push0k“ 18.05

WEB v8 1cv8.cf Абонемент ($m)

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

1 стартмани

19.12.2017    18132    12    PloAl    20    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП

Практика программирования Универсальные печатные формы v8 БП3.0 Абонемент ($m)

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    27029    53    kwazi    6    

Подсистема Вики - интеграция 1С и сайта под управлением MediaWiki

WEB v8 Абонемент ($m)

Редактирование статей сайта Mediawiki из 1С. Формирование функционального описания конфигурации на сайте Вики.

1 стартмани

19.09.2017    28429    35    shmalevoz    20    

Расширения конфигураций 1С: учимся перехватывать методы

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

В этой статье я на примерах разберу некоторые механизмы расширений конфигураций 1С. А именно «перехваты» методов модуля объекта и «перехваты» событий формы и элементов формы. Данная статья написана с учебными целями, чтобы показать, как при помощи расширений конфигурации можно делать такие доработки, ради которых раньше приходилось снимать конфигурацию с поддержки.

1 стартмани

30.05.2017    129223    13    signum2009    48    

Настройка рекламной кампании Яндекс.Директ на 30000 ключевых фраз за 60 минут - теперь это реально!

WEB v8 Реклама, PR и маркетинг Россия Абонемент ($m)

Конфигурация для настройки Яндекс.Директа.

10 стартмани

20.10.2016    29398    51    avalakh    10    

Конструктор-тестер http запросов в 1С

WEB Инструментарий разработчика v8 1cv8.cf Россия Абонемент ($m)

Данная обработка позволяет в несколько кликов конструировать http запросы на языке 1С и просматривать результаты их выполнения.

3 стартмани

19.08.2016    42388    296    hlopik    17    

1С: Предприятие + корпоративный чат, как наладить оперативные уведомления за 10 минут

Практика программирования v8 Абонемент ($m)

Как сделать автоматические уведомления о разных событиях из 1С в корпоративный чат MyChat для сотрудников компании

1 стартмани

14.08.2016    48106    36    Demanoidos    60    

Легкий интернет-магазин из УТ 11.2

WEB Управление взаимоотношениями с клиентами (СRM) Оптовая торговля Розничная торговля Управление взаимоотношениями с клиентами (СRM) Оптовая торговля Розничная торговля v8 УТ10 УУ Абонемент ($m)

Обработка создания интернет-магазина из УТ 11. Создается единственный файл html, который содержит все выгруженные товары. Клиент составляет и отправляет заказ вам на e-mail прямо из браузера, не прибегая к использованию стороннего ПО.

11.08.2016    31447    23    hlopik    36    

Подсистема обмена данными с порталом ИМНС по электронным счетам-фактурам (автоматический обмен)

Внешние источники данных WEB Инструментарий разработчика v8 1cv8.cf Беларусь БУ НДС Абонемент ($m)

Подсистема включает документы и обработки для автоматического обмена данными с порталом ИМНС через web-сервис. Присутствует возможность заполнения данными типовых операций за период, учёта входящих документов, учёта произвольных исходящих документов. Приложены обработки для запуска задания планировщика на автоматический обмен данными.

1 стартмани

28.07.2016    33736    19    c1nil    4    

Хранение файлов в томах на диске (для УПП 1.3)

Практика программирования v8 УПП1 Абонемент ($m)

Доработка типовой УПП 1.3 в плане хранения присоединенных файлов вне базы данных

2 стартмани

05.06.2016    57340    10    wowik    32    

Остатки на каждый день в запросе

Практика программирования Учет ТМЦ Учет ТМЦ v8 1cv8.cf УУ Абонемент ($m)

Запрос формирует остатки товаров на каждый день в пределах выбранного периода.

1 стартмани

26.04.2016    58472    19    arakelyan    18    

Просмотр данных системы Платон на картах Google

Универсальные обработки WEB v8 1cv8.cf Автомобили, автосервисы Транспорт, автопарки, такси Абонемент ($m)

Обработка для просмотра предполагаемых треков движения транспортного средства на карте Google согласно данным, предоставляемым системой Платон в формате CSV. Работает под 8.2 и 8.3, обычное и управляемое приложение, может подключаться к типовым конфигурациям в качестве внешней обработки.

1 стартмани

15.04.2016    33202    18    anig99    8    

Выполнение JavaScript кода из 1С в объекте Поле HTML Документа (HTML 5) и вызов события в 1С ПриНажатии

Практика программирования v8 1cv8.cf Россия Абонемент ($m)

Пример выполнения JS кода из 1С в Поле HTML Документа под управляемыми формами, с удобным получением результата в 1С(С помощью вызова привязанного события ПриНажатии к элементу ПолеHTMLДокумента)

1 стартмани

22.03.2016    80942    158    igo1    54    

Количество дней недели (понедельников/вторников/...) в заданном диапазоне одним запросом

Практика программирования v8 Абонемент ($m)

При реализации периодического авто-заполнения маршрутных листов по графику (недельному) необходимо было просчитать стоимость всего периода, с условием выездов только по определенным дням. Заморачиваться с обходом результата не хотелось. Пришлось написать "Небольшой" запрос.

1 стартмани

03.03.2016    18254    1    Alexander.Shvets    5    

Простые радости жизни программиста 1С: выбор типа значения

Работа с интерфейсом Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

17.02.2016    49858    50    yuraos    17    

Яндекс.Деньги "Благотворительность"

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

Яндекс.Деньги теперь в 1С. Форма для приема благотворительных взносов. Форму легко сделать и вставить на любую страницу сайта или блога. Платежи будут приходить на ваш кошелек. На форме есть три способа платежа: из кошелька, с банковской карты, с баланса мобильного.

1 стартмани

16.02.2016    23257    8    Tatitutu    5    

Модуль для работы 1С (платформа 8.2 и выше) с внешними SOAP Web-сервисами

Внешние источники данных WEB Интеграция v8 1cv8.cf Абонемент ($m)

Модуль для работы 1С (платформа 8.2 и выше) с внешними Web-сервисами, реализованными по протоколу SOAP.

2 стартмани

15.02.2016    39956    84    lunjio    15    

Мастер рассылки e-mail 2.2 для управляемых форм

Практика программирования Email v8 v8::УФ ERP2 БП3.0 УТ11 Абонемент ($m)

Для пользователей: переделанный из старый разработки под 8.2 с использованием библиотеки Мастер рассылки e-mail 2.2 (ERP, УТ, БП) (Только управляемые формы), который теперь может запускаться под любой версией платформы с разрешенными или запрещенными модальными/синхронными вызовами в конфигурации. Также удобный выбор e-mail и их владельцев с помощью отбора динамического списка по любым критериям и галочки исключения.

1 стартмани

29.12.2015    37022    20    milkers    4    

Облачный каталог товаров на 1C

WEB Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 УТ10 Розница Абонемент ($m)

Поднимите руки те, кто занимается разработкой на 1С. Спасибо, опустите. Поднимите руки те, кто хоть раз писал загрузку прайса из экселя. Я смотрю, все те же. Ладно, а теперь поднимите руки те, кто хоть раз задумывался о каком-то каталоге мастер-данных по товарам. Чуть меньше. А признайтесь, кто из вас свято убежден, что делать этот каталог должен кто-то другой, например, веб-разработчики? Об этом и пойдет речь.

1 стартмани

28.12.2015    26956    32    skif47    42    

Передача больших пакетов через веб-сервисы

Практика программирования Администрирование данных 1С Внешние источники данных v8 Абонемент ($m)

Реализация механизма передачи больших пакетов через веб-сервисы. С его помощью передать файл размером в несколько гигабайт не составит проблем.

1 стартмани

06.12.2015    56818    48    YPermitin    19    

Загрузка изображений с поисковых сайтов сети Интернет в 1С

Обработка справочников WEB Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 v8::ОУ v8::УФ УТ10 УТ11 Абонемент ($m)

Обработка загрузки изображений из интернета в 1С:Предприятие. Платформа 1С:Предприятие версий 8.2 и 8.3.

8 стартмани

13.10.2015    42053    162    premierex    145    

Быстрое определение интервалов в запросе

Практика программирования v8 Абонемент ($m)

В статье описывается новый метод определения интервалов между данными различных записей в запросе. В отличие от общеизвестного метода, время работы предлагаемого метода зависит от объема данных ЛИНЕЙНО. Это обеспечивает ему значительный выигрыш по быстродействию на больших объемах данных. В качестве иллюстрации возможностей метода приведен отчет, показывающий гистограмму распределения времени между продажами.

1 стартмани

01.10.2015    51457    35    ildarovich    41