8.х Парсинг сайтов

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Peroman, 11 апр 2016.

  1. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Всем доброго времени суток!
    Платформа: 1С:Предприятие 8.3 (8.3.6.2390)

    Создал внешнюю обработку
    Создал реквизит "site"
    На форму выкинул реквизит и сделал его вид: "Поле HTML документа"
    Дальше делаю так
    Код:
        Site = "https://www.avito.ru/moskva/kvartiry?view=list" ;
    
    На форме всё прекрасно обрабатывается, т.е. открывается страница сайта.
    А вот дальше у меня затуп, мне надо сделать определенную выборку.
    В идеале мне надо в принципе получить исходный код страницы, по тексту кода пробежаться и вытянуть нужную мне инфу.
    Перерыл кучу инфы, инфостар и пр. толкового ничего не смог найти, информация либо под устаревшую платформу, либо очень трудна для понимания.
    Может у кого есть пример или кто знает толковый ресурс с развернутой инфой по работе с HTML документами.

    Про HTML,CSS,PHP и пр. знаний очень мало, но базовые представления есть.
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Парсить нужно весь текст. Благо в 1С вы это делать устанете :)
  3. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    А какие у меня есть альтернативы?
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Не использовать 1С в целях парсинга web-страниц :)
    Вы поймите, 1С не располагает определенным инструментарием, например, регулярные выражения, которыми можно убрать все теги одним махом.
    Нее, ну можно конечно получить ответ от сервера, и распарсить средствами 1С. Но кроме скудного набора функций по работе со строками ничего нет :)
  5. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    А мне в принципе и надо, что только вынуть немного данных. Например посмотреть появились ли новые объявления, если да то вытянуть, данные .Скажем на примере авито в продаже квартир: продавца, метро, адрес, цену, текст объявления и пр., всё это запихнуть в таблицу значений или может сразу в текстовый документ (макет) для распечатки.

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

    P.S.
    Вообще, на многих ресурсах предлагают использовать DOM - но инфы по работе в 1С, нету, а в СП очень мало инфы и нет примеров.
    Мне бы в идеале HTML перегнать в XML а там бы, думаю, дело бы пошло.
  6. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    Не используйте элемент формы, у 1С есть замечательные объекты HttpСоединение, HttpЗапрос и HttpОтвет. Получите данные страницы в виде строки.
    Дальше можно преобразовать ее в ДокументDOM и нормально разгребать данные со страницы
  7. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Регулярками такое парсится на раз-два, а не ищется первое вхождение, позиционируется каретка, и считывается определенное количество символов.
    Перейти по ссылке - сначала получаете ее адрес, потом отправляете запрос на этот адрес.
  8. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Вот, а где взять-то инфу про эти объекты? В СП очень скудная информация(без примера работы), на ИТС вообще инфы не нашёл (может конечно плохо искал).
  9. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    Код:
    Соединение = Новый HttpСоединение("vasya.ru");
    Запрос = Новый HttpЗапрос("/products/index.php?id=55");
    Ответ = Соединение.Получить(Запрос);
    Если Ответ.КодСостояния=200 Тогда
        ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
        Чтение = Новый ЧтениеHtml;
        Чтение.УстановитьСтроку(ТелоОтвета);
        Построитель = Новый ПостроительDOM;
        Документ = Построитель.Прочитать(Чтение);
        ...
    КонецЕсли;
    В переменной Документ будет распарсенная страница, дальше смотрите синтаксис-помощник по объекту ДокументDOM и смотрите его в отладчике, там уже будет просто.
    Peroman нравится это.
  10. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Во-во, я как раз это нашёл. Но у меня КодСостояния = 301, согласно описанию на ИТС это перенаправление:
    Код:
        AvitoRu = Новый HTTPСоединение("www.avito.ru");
        ЗапросНаАвито = Новый HTTPЗапрос("/pushkino/kvartiry?view=list");
       
        Результат = AvitoRu.Получить(ЗапросНаАвито);
    
  11. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    при коде 301 у вас в заголовке Location приедет новый адрес страницы, откуда надо ее тянуть
  12. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Дело было в соединении, у меня HTTPS, т.е защищеное.
  13. TopicStarter Overlay
    Peroman
    Offline

    Peroman Опытный в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    879
    Симпатии:
    13
    Баллы:
    29
    Сделал простой парсинг авито (пример недвижимости). Может кому пригодится мой опыт. Выкладываю dt базы с рабочим примером.
    Работа конфы очень простая, есть одна обработка ПарсингАвитоКвартиры выполняющая основной функционал и один справочник ОбъектыНедвижимости -куда уже распарсинные объявления сохраняются.

    upload_2016-8-25_10-51-15.png

    upload_2016-8-25_10-52-10.png

    upload_2016-8-25_10-52-42.png

    Вложения:

    • 1Cv8.dt
      Размер файла:
      85,7 КБ
      Просмотров:
      15
    Dem0lisher нравится это.
  14. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    Создал бы лучше обработку (без записи в справочники) а например в эксель.
    Гораздо легче потом с ней работать. Через пол-года опять понадобится парсить - полезешь целую базу для этого разворачивать?
    А так открыл обработку через Файл>>>Открыть, да и дописал в общем модуле СведенияОВнешнейОбработке() и присоединил куда надо! И обработку можно в раздел "Ресурсы".
    За заготовку спасибо - возьму в копилку.

Поделиться этой страницей