Версия для печати темы (https://pro1c.org.ua/index.php?s=6420d0ffa2bbce62cbd7be746207a2f3&showtopic=24242)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Как отобразить все товары на странице?

Автор: kosalex 23.07.15, 10:51

Добрый день! Все тот же сайт http://pro1c.org.ua/redirect.php?http://mprestige.com.ua/zhenskie-sumki-c-299.html, есть на этой странице счетчик количества товара на странице, как его обработать при парсинге этой странице чтобы показывались все товары?

Автор: Vofka 23.07.15, 11:06

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

Автор: kosalex 23.07.15, 11:13

Цитата(Vofka @ 23.07.15, 12:06) http://pro1c.org.ua/index.php?act=findpost&pid=101154? У меня получается получить список товаров ограниченный счетчиком. Другими словами что нужно сделать чтобы загрузилась полностью вся страница?

Автор: python 23.07.15, 11:29

Если я правильно понимаю, то страница формируется сервером, Вы лишь читаете результат работы его - данные со страницы.
Вы хотите прочитать данные со страницы, которых там нет, или из 1С управлять сервером, формирующим по запросу браузера страницы/фреймы?

Автор: kosalex 23.07.15, 11:39

Цитата(python @ 23.07.15, 12:29) *
Если я правильно понимаю, то страница формируется сервером, Вы лишь читаете результат работы его - данные со страницы.
Вы хотите прочитать данные со страницы, которых там нет, или из 1С управлять сервером, формирующим по запросу браузера страницы/фреймы?



Как я понимаю, мне нужно через что то отправить серверу запрос, чтобы он мне выдал страницу со всеми товарами. Сейчас я делаю вот так:

ЧтениеХТМЛ = Новый ЧтениеHTML; 
        ПостроительДОМ = Новый ПостроительDOM;
        
        //Генерируем имя файла на диске, в который запишется страница сайта
        ПреобразуемоеИмяФайла = СтрЗаменить(Адрес, "/", "_");
        ПреобразуемоеИмяФайла = СтрЗаменить(ПреобразуемоеИмяФайла,":","_");
        
        ИмяФайла = КаталогЗагрузкиВременныхФайлов + "\catalog\" + ПреобразуемоеИмяФайла + ".html";

        //Загружаем нужную нам страницу в каталог
        Соединение.Получить(Адрес, ИмяФайла);
                
        //Начинаем чтение нашего файла
        ЧтениеХТМЛ.ОткрытьФайл(ИмяФайла, "UTF-8");
        //Загружаем всю структуру документа в DOM
        ДокументХТМЛ = ПостроительДОМ.Прочитать(ЧтениеХТМЛ);
        
        //Получаем все элементы DIV
        ЭлементыСтраницы = ДокументХТМЛ.ПолучитьЭлементыПоИмени("DIV");


получаю копию страницы у себя на диске...но в ней не все товары...

Автор: logist 23.07.15, 12:14

Цитата(kosalex @ 23.07.15, 12:13) *
Конкретный вопрос, как средствами 1С получить все товары на этой странице

Вопрос скорее не по теме, но всё же: почему нельзя договориться с сайтом что бы он по каком-то http-запросу отдавал информацию в уже структурированном формате (xml например)?

Автор: sava1 23.07.15, 12:26

Цитата(kosalex @ 23.07.15, 12:39) *
получаю копию страницы у себя на диске...но в ней не все товары...

Нужно смотреть как формируется пост с выбранным Все.

Автор: kosalex 23.07.15, 13:13

Цитата(sava1 @ 23.07.15, 13:26) http://pro1c.org.ua/index.php?act=findpost&pid=101161
Вопрос скорее не по теме, но всё же: почему нельзя договориться с сайтом что бы он по каком-то http-запросу отдавал информацию в уже структурированном формате (xml например)?


Можно попробовать договориться)

Автор: DartRomanius 23.07.15, 13:45

1. Сделать то что хотим получить от сайта в "ручном режиме". Потренировать, добиться определенного результата.
2. Делать уже в 1С-ке парсинг. Так-как понятен алгоритм взаимодействия с сайтом.

ЗЫ: Сайт может использовать там JavaScript какой-нибудь, или еще что-то. Вообщем делаем пункт 1, а после уже приступаем к п.2. smile.gif


Автор: Vofka 23.07.15, 13:48

Цитата(logist @ 23.07.15, 13:14) *
Вопрос скорее не по теме, но всё же: почему нельзя договориться с сайтом что бы он по каком-то http-запросу отдавал информацию в уже структурированном формате (xml например)?

Потому что скорее всего это слив инфы с чьего-то сайта smile.gif

Автор: sava1 23.07.15, 13:58

Мож-быть, скачать в офф-лайн?

Автор: kosalex 23.07.15, 14:36

Цитата(sava1 @ 23.07.15, 14:58) http://pro1c.org.ua/index.php?act=findpost&pid=101165
Потому что скорее всего это слив инфы с чьего-то сайта smile.gif



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

Написал им, может получиться без тупого парсинга)) а чисто чтение файла)

Автор: logist 23.07.15, 18:14

Цитата(kosalex @ 23.07.15, 15:36) *
весь сайт?))

Знаете, 15 лет назад были специальные проги по скачиванию сайтов, это было модно))

Автор: kosalex 24.07.15, 7:24

Цитата(logist @ 23.07.15, 19:14) *
Знаете, 15 лет назад были специальные проги по скачиванию сайтов, это было модно))


))мода имеет такую особенность - она повторяется))

Автор: kosalex 12.08.15, 8:58

Доброго времени суток! Все пытаюсь получить страницу со ВСЕМИ товарами.

Отправляю на сервер вот такой запрос:

СтрокаПараметров =  "Host: " + АдресСайта + Символы.ПС + 
                    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"  + Символы.ПС +
                    "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"  + Символы.ПС +
                    "Accept-Encoding: gzip, deflate"  + Символы.ПС +
                    "Referer: " + АдресСтраницы + Символы.ПС +
                    "Cookie: _ga=GA1.3.1844647940.1435661095; osCsid=9528cb3e119a966ae43edcdc78062fa5; _gat=1"  + Символы.ПС +
                    "Connection: keep-alive"  + Символы.ПС +
                    "Content-Type: application/x-www-form-urlencoded" + Символы.ПС +
                    "Content-Length: 8" + Символы.ПС +  
                    "onpage: 9"  + Символы.ПС;

//Генерируем имя файла на диске, в который запишется страница сайта
ПреобразуемоеИмяФайла = СтрЗаменить(АдресСтраницы, "/", "_");
ПреобразуемоеИмяФайла = СтрЗаменить(ПреобразуемоеИмяФайла,":","_");

ФайлСтраницы =  КаталогЗагрузкиВременныхФайлов + "\catalog\dorognie\" + ПреобразуемоеИмяФайла + ".html";

HTTPЗапрос = Новый HTTPЗапрос(АдресСтраницы);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров, КодировкаТекста.UTF8);

HTTPСоединение = Новый HTTPСоединение(АдресСайта);


Попытка
    Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос, ФайлСтраницы);
Исключение
    Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
КонецПопытки;


Страница сохраняется, но в ней отображается только 36 товаров, а нужно все. Смотрел браузером, параметры передаются onpage:36.
Что делаю не правильно?

Автор: Petre 12.08.15, 9:22

Передавайте больше 36.

Автор: kosalex 12.08.15, 9:45

Цитата(Petre @ 12.08.15, 10:22) *
Передавайте больше 36.



передаю и меньше и больше, все равно сохраняется только с 36 ((

Пробую и так, результат один, только 36 товаров на странице...
ТелоЗапроса = "onpage:1000"; 

ФайлЗапроса = ПолучитьИмяВременногоФайла("txt");
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(ТелоЗапроса);
ТекстовыйФайл.Записать(ФайлЗапроса,КодировкаТекста.UTF8);

ФайлОтправки = Новый Файл(ФайлЗапроса);

РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());

//Генерируем имя файла на диске, в который запишется страница сайта
ПреобразуемоеИмяФайла = СтрЗаменить(АдресСтраницы, "/", "_");
ПреобразуемоеИмяФайла = СтрЗаменить(ПреобразуемоеИмяФайла,":","_");

ФайлРезультата =  КаталогЗагрузкиВременныхФайлов + "\catalog\dorognie\" + ПреобразуемоеИмяФайла + ".html";


ЗаголовокHTTP = Новый Соответствие();

ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");

HTTPСоединение = Новый HTTPСоединение(АдресСайта);

Попытка
    Ответ = HTTPСоединение.ОтправитьДляОбработки(ФайлЗапроса, АдресСтраницы, ФайлРезультата, ЗаголовокHTTP);
Исключение
    Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
КонецПопытки;

Автор: kosalex 12.08.15, 11:20

Вот какой запрос отсылается на сервер:

POST http://pro1c.org.ua/redirect.php?http://mprestige.com.ua/dorozhnye-sumki-c-316.html
Content-Type: application/x-www-form-urlencoded
onpage=10000

Пытаюсь собрать что то такое же:

ТелоЗапроса = "onpage=1000" + Символы.ПС + Символы.ВК;

//Генерируем имя файла на диске, в который запишется страница сайта
ПреобразуемоеИмяФайла = СтрЗаменить(АдресСтраницы, "/", "_");
ПреобразуемоеИмяФайла = СтрЗаменить(ПреобразуемоеИмяФайла,":","_");

ФайлРезультата =  КаталогЗагрузкиВременныхФайлов + "\catalog\dorognie\" + ПреобразуемоеИмяФайла + ".html";

// Для того, чтобы установить заголовки
// POST-запроса создадим соответствие
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");

ХТТПЗапрос = Новый HTTPЗапрос;
ХТТПЗапрос..УстановитьТелоИзСтроки(ТелоЗапроса);
ХТТПЗапрос.Заголовки = ЗаголовокHTTP;
ХТТПЗапрос.АдресРесурса = АдресСтраницы;

HTTPСоединение = Новый HTTPСоединение(АдресСайта);

Попытка
    Ответ = HTTPСоединение.ОтправитьДляОбработки(ХТТПЗапрос, ФайлРезультата);
Исключение
    Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
КонецПопытки;


НЕ получается.....плиз, ХЕЛП!

Не работает и так.....
ТелоЗапроса = "POST http://mprestige.com.ua/dorozhnye-sumki-c-316.html"  + Символы.ПС +
              //"Content-Type: application/x-www-form-urlencoded" + Символы.ПС  +                
              "onpage=10000";


//Генерируем имя файла на диске, в который запишется страница сайта
ПреобразуемоеИмяФайла = СтрЗаменить(АдресСтраницы, "/", "_");
ПреобразуемоеИмяФайла = СтрЗаменить(ПреобразуемоеИмяФайла,":","_");

ФайлРезультата =  КаталогЗагрузкиВременныхФайлов + "\catalog\dorognie\" + ПреобразуемоеИмяФайла + ".html";

// Для того, чтобы установить заголовки
// POST-запроса создадим соответствие
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");


ХТТПЗапрос = Новый HTTPЗапрос;
ХТТПЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
ХТТПЗапрос.Заголовки = ЗаголовокHTTP;
ХТТПЗапрос.АдресРесурса = АдресСтраницы;

HTTPСоединение = Новый HTTPСоединение(АдресСайта);

Попытка
    Ответ = HTTPСоединение.ОтправитьДляОбработки(ХТТПЗапрос, ФайлРезультата);
Исключение
    Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
КонецПопытки;

Автор: logist 12.08.15, 11:46

Строка адреса для Post попробуйте сделать так: _http://mprestige.com.ua/dorozhnye-sumki-c-316.html?onpage=1000

Автор: kosalex 12.08.15, 11:48

УРАААА!!!Вот работающий код:

ТелоЗапроса = "&onpage=10000";

//Генерируем имя файла на диске, в который запишется страница сайта
ПреобразуемоеИмяФайла = СтрЗаменить(АдресСтраницы, "/", "_");
ПреобразуемоеИмяФайла = СтрЗаменить(ПреобразуемоеИмяФайла,":","_");

ФайлРезультата =  КаталогЗагрузкиВременныхФайлов + "\catalog\dorognie\" + ПреобразуемоеИмяФайла + ".html";

// Для того, чтобы установить заголовки
// POST-запроса создадим соответствие
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");

ХТТПЗапрос = Новый HTTPЗапрос;
ХТТПЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
ХТТПЗапрос.Заголовки = ЗаголовокHTTP;
ХТТПЗапрос.АдресРесурса = АдресСтраницы;


HTTPСоединение = Новый HTTPСоединение(АдресСайта);

Попытка
    Ответ = HTTPСоединение.ОтправитьДляОбработки(ХТТПЗапрос, ФайлРезультата);
Исключение
    Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
КонецПопытки;


Проблема была в этом значке "&".

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua