Парсинг nakolesah.ru или как многократно запустить WBApp

Тема в разделе "WBAppIE", создана пользователем Jeka_M, 7 май 2014.

Метки:
  1. Jeka_M

    Jeka_M New Member Пользователи

    Регистрация:
    25 апр 2014
    Сообщения:
    15
    Есть такой сайт
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    В зависимости от выбранного производителя авто, подгружается модель автомобиля, далее в зависимости от выбранной модели даты выпуска, в зависимости от даты выпуска подгружаются модификации и уже после того, как выбирается модификация предлагаются варианты шин и дисков.
    Есть проект, который получает Производителей и подставляет их в селект, после чего прогружается модель. Как сделать возврат части кода из WBApp с последующим получением из него UUID и передачей его обратно в WBApp? Т.е. получили часть кода с моделями, вернули часть кода. Выбираем из этого кода UUID и передаем обратно WBApp. Получаем код с годами выпуска, выбираем UUID, передаем обратно WBApp, получаем код с модификациями, выбираем UUID, передаем WBApp, получаем варианты шин и дисков и уже эти данные парсим.
     
    Последнее редактирование: 7 май 2014
  2. Freesty1er

    Freesty1er New Member Пользователи

    Регистрация:
    30 дек 2013
    Сообщения:
    95
    Jeka_M, а как ты выбираешь даже производителя через WBApp?

    Ага, понял: [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlVendors[TEXT]:2
    Модель: [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlCars[TEXT]:1
    И т.д.

    Соответственно, тебе не нужно что-то парсить, чтобы выбрать след. значение. Разве что максимальное.
    Была бы возможность регулярки использовать с PARAM, может что-то и придумал бы. Пока не знаю...

    А так да, не хватает функции взятия того же id, value, title или других параметров в переменную.
     
    Последнее редактирование: 8 май 2014
  3. Kreol

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

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Здравствуйте!
    Простите а какой был вопрос?
    Прочитал 2 раза, так и не понял что ТС хотел сказать.
    Если Вы не заметили, то страничка формируется по серии, модели и модификации, зная все вариации можно спокойно составить список. (во всяком случае, это касается странички, которую вы дали)
    Ссылки недоступны для гостейaudi/a8/2010/42fsi_10.aspx
     
    Последнее редактирование: 8 май 2014
  4. Jeka_M

    Jeka_M New Member Пользователи

    Регистрация:
    25 апр 2014
    Сообщения:
    15
    Да, но для того, чтобы дойти до этой страницы, нужно 4 раза выставить селекты. Информация по вариантам доступна сразу только по первому селекту - Производитель. Только после выбора определенного производителя подгружаются следующие варианты селекта - Модель, и так поочередно все 4. Т.е. для того, чтобы попасть на конечную страничку, нужно поочередно выставить 4 селекта, варианты которых сразу мы не знаем, т.к. они подгружаются динамически. Более того, если посмотреть на value селектов, то они там представлены в виде UUID, а соответственно их нужно получить (обычным генератором значений это сделать не получится). Просчитать или получить сразу конечную ссылку не возможно, т.к. на нее осуществится переход только после выставлении всех 4-х селектов, которые сразу выставить тоже нельзя, можно только по шагам.
     
    Последнее редактирование: 8 май 2014
  5. Jeka_M

    Jeka_M New Member Пользователи

    Регистрация:
    25 апр 2014
    Сообщения:
    15
    Да, нужно сначала дойти до страницы а уже потом ее парсить. Для того, чтобы до нее дойти, нужно 4 раза выставлять соответствующие селекты, которые заранее невозможно просчитать.
     
  6. Kreol

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

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Времени нет заниматься, могу лишь подсказать, проверяйте для первого раза производителя по <option selected="selected" value="NULL"> (там все производители) сграбьте и создаете ссылки по ним вида, потом проверяете дальше по этому же параметру. генерируя дальше и дальше.
    Удачи.
    Вернее делаете так, перебор по производителю, потом в каждом выпадающем списке первую запись, и аполучив код снимаете все характеристики по границе выше для этого производителя

    Кстати, а что вам мешает спарсить каталог? Зачем вы лезете в подбор параметров? Если для себя, разобраться, это конечно один вариант. Но если для работы, то я бы смотрел в сторону
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
     
    Последнее редактирование: 8 май 2014
  7. Jeka_M

    Jeka_M New Member Пользователи

    Регистрация:
    25 апр 2014
    Сообщения:
    15
    Каталог не интересует, интересует подборщик.
    Именно для того, чтобы сграбить и создать ссылки, нужно, чтобы WBApp вернул часть кода, который потом еще раз грабиться и снова отдается WBApp и так 4 раза, т.к. первый раз будет только 1 параметр - Производитель, после второго прохода - 2 параметра и т.д. Так вот проблема именно в том, как сделать, чтобы WBApp вернул часть кода, который потом можно распарсить и снова передать WBApp и так 4 раза.
     
    Последнее редактирование: 8 май 2014
  8. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Ссылки недоступны для гостей
    [GETHTML] — добавит текущий код страницы к результату парсинга. Если вызывать этот макрос несколько раз, например, в цикле, то, каждый раз, к результату будет добавляться текущий код web-страницы (на момент срабатывания макроса [GETHTML]). Его полезно применять в случае парсинга, например, нескольких страниц выдачи поисковика (чтобы при перелистывании на следующую страницу, результат парсинга не заменялся, а к нему добавлялся код следующей страницы выдачи).
     
  9. Jeka_M

    Jeka_M New Member Пользователи

    Регистрация:
    25 апр 2014
    Сообщения:
    15
    Да, пользовался этой функцией, но получилось вернуть весь документ в результат, но не понятно, как с ним работать дальше, а часть кода вернуть не получилось, как описано

    [GETHTML]:начало{get}конец|{get}​

    Нужно выполнить часть кода
    <select class="FilterPanel_DropDownList_PickCars" id="ctl00_contentPlaceHolder_ddlCars" onchange="javascript:setTimeout('__doPostBack(\'ctl00$contentPlaceHolder$ddlCars\',\'\')', 0)" name="ctl00$contentPlaceHolder$ddlCars">
    <option value="NULL" selected="selected">------</option>
    <option value="bc54dbc0-ff31-44cb-96bd-3ef2c0fe5983">A1</option>
    <option value="e58b1e48-575f-48e4-ad04-67d9641f2613">A2</option>
    ............................
    <option value="6505e720-2667-43f8-9817-19176d3b6408">TT</option>

    </select>

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

    [PASTE][id][N]0[/N][FULL][SV]:ctl00_contentPlaceHolder_ddlVendors[TEXT]:[CDDATA:brand]
    [WAIT]:3000
    [GETHTML]:<select class="FilterPanel_DropDownList_PickCars" id="ctl00_contentPlaceHolder_ddlCars" onchange="javascript:setTimeout('__doPostBack(\'ctl00$contentPlaceHolder$ddlCars\',\'\')', 0)" name="ctl00$contentPlaceHolder$ddlCars">
    <option value="NULL" selected="selected">------</option>{get}</select>|{get}
     

    Вложения:

    Последнее редактирование: 8 май 2014
  10. Freesty1er

    Freesty1er New Member Пользователи

    Регистрация:
    30 дек 2013
    Сообщения:
    95
    Почему не возможно, я ведь пример привел, как их все 4 без особого труда можно выставить:
    [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlVendors[TEXT]:1
    [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlCars[TEXT]:2


    [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlVendors[TEXT]:1
    [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlCars[TEXT]:3


    [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlVendors[TEXT]:5
    [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlCars[TEXT]:1


    В этих примерах, все модели будут разные, так как меняем ID.
    И можно такой огромный список сделать, к примеру, для производителей 71, для моделей 25, для года выпуска 5, для модификации: 4, как пример.
    Это не самый оптимальный способ, но он должен по-идее работать :) Вам же не всех производителей нужно, а только какого-то определенного? + даже если вы будете получать данные, не понимаю как это вам поможет. Подставить же получится только одно значение модели/года выпуска/модификации.
     
  11. Jeka_M

    Jeka_M New Member Пользователи

    Регистрация:
    25 апр 2014
    Сообщения:
    15
    Вы пробовали свой код или просто так написали? Посмотрите, как сделаны селекты на сайте
     
  12. Freesty1er

    Freesty1er New Member Пользователи

    Регистрация:
    30 дек 2013
    Сообщения:
    95
    ШОК!

    А вы сами устанавливал ContentDownloader, или кто-то помогал?

    Смотрим: Ссылки недоступны для гостей (Sorry за музыку, в первый раз запись не удалась, ошибка вылезла; по-этому писал со второго и забыл отключить)
     
  13. Kreol

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

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Jeka_M не думайте что там так все просто. изучайте справку, благодаря Сергею там уже много чего есть. И прислушивайтесь к мнениям других, если у Вас не получается, это не значит что нужно оскорблять или как-то негативно реагировать.
    И не думаете, что именно ваш подход должен быть правильным.
    Спасибо.
     
  14. Jeka_M

    Jeka_M New Member Пользователи

    Регистрация:
    25 апр 2014
    Сообщения:
    15
    Не хотел никого оскорбить, поэтому приношу извинение, если это было так воспринято. Просто тот скрипт, который приведен работает не так, как хотелось бы. Может это только у меня так получается, поэтому выкладываю видео.
    Скрипт:

    [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlVendors[TEXT]:0
    [WAIT]:3000
    [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlCars[TEXT]:0
    [WAIT]:3000

    В этом варианте, подгружается Производитель, но не подгружается модель. Получаем Acura без модели.

    Далее, меняем скрипт

    [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlVendors[TEXT]:1
    [WAIT]:3000
    [PASTE][id][N]0[/N][FULL][SI]:ctl00_contentPlaceHolder_ddlCars[TEXT]:1
    [WAIT]:3000

    Получаем нового производителя, но модель после первого запуска сначала выбирается одна (Alfa Romeo 146), после второго запуска - уже другая (Alfa Romeo 147).

    Видео - Ссылки недоступны для гостей

    P.S. Не совсем понятно, как использовать [GETHTML], когда нужно вернуть часть кода, т.к. нет примера.
     
    Последнее редактирование: 10 май 2014
  15. Freesty1er

    Freesty1er New Member Пользователи

    Регистрация:
    30 дек 2013
    Сообщения:
    95
    А это здесь причем? Зачем вам несколько раз выбирать того же производителя или модель? Используйте индекс начиная с единицы. Под нулевым индексом находятся "------". Из-за этого, собственно, второй раз и выбирается другая модель/год и т.д., так как при указании производителя/модели "------" исчезают, и индекса элементов уменьшаются на единицу.
     
  16. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.431
    Адрес:
    Latvia
    Коллега Kreol вам описал ранее решение,
    испробуйте и возможно это избавит вас от лишних телодвижений в Wbapp
    Полюбому данные надо напарсить для дальнейшего формирования настройки
     
    Последнее редактирование: 10 май 2014
  17. Jeka_M

    Jeka_M New Member Пользователи

    Регистрация:
    25 апр 2014
    Сообщения:
    15
    Именно так и хотел сделать, сначала спарсить производителей, потом передавая производителей спарсить модели и т.д., но застрял на том, как из WBApp вернуть результат, чтобы его снова распарсить.
     
  18. rushmessiah

    rushmessiah Member Пользователи

    Регистрация:
    14 дек 2016
    Сообщения:
    27
    Тема старая, но может кому понадобится. Ссылки для парсинга

    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
     
    Root и kagorec нравится это.
  19. mil

    mil New Member Пользователи

    Регистрация:
    14 янв 2017
    Сообщения:
    6
    Спасибо
     

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