Click

Парсер бази nakolesah.ru

Грабим nakolesah.ru

Приклад роботи парсера сайту nakolesah.ru

Уф, докрутивши парсер nakolesah до осудного стану і сграбіл підбір шин по автомобілю. Кому цікаво - посилання на сам скрипт в кінці посту.

Щось у ньому ще буду міняти, не дуже мені подобається логіка роботи нинішня, заснована на GET-запити (тоді як браузер отримує всю інформацію, звертаючись до asp-скрипту з передачею різних параметрів в POST-запиті). У мене POST тільки в кінці, а треба б спробувати роботу браузера повністю скопіювати, та часу особливо не було розбиратися.

Ще не подобається милицю у вигляді функції заміни назв моделей машин. При парсінгу nkolesah зіткнувся з проблемою (актуально тільки для роботи GET-запитами) різних імен марок і модифікацій машин у випадних списках і в адресі сторінки, наприклад:

 sub TransformModel ($$){ my ($ brand, $ car_model) = @ _; $ car_model = ~ s / - / / g if $ brand! ~ / Saab | Jaguar | Nissan | Honda | Citroen | MG | Mercedes | Mazda | Ford / i; $ car_model = ~ s /[-+]/_/ g if $ brand! ~ / Citroen / i; if ($ brand = ~ / Nissan / i) {$ car_model = ~ s/Z/350z / i; $ car_model = ~ s / GT_R / GTR / i;} $ car_model = 'navigaror_1' if $ brand = ~ m # Lincoln # i and $ car_model eq 'Navigator'; $ car_model = 'Du% D1% 81ato' if $ brand = ~ m # Fiat # i and $ car_model = ~ / duсato / i; if ($ brand = ~ / Chery / i) {$ car_model = 'c_eastar' if $ car_model eq 'CrossEastar'; $ car_model = $ brand .'_'.  $ Car_model if $ car_model = ~ / kimo | qq \ d? / I;} return $ car_model;} 

Повне вивантаження займає близько 12 годин на послідовному режимі (працює в один потік, замовнику багатопоточність не була потрібна, а мені ніколи було її заради інтересу приробити). Якщо хтось надумає вивантаження і парсинг виробити - раджу зробити наприклад чотири копії скрипта і розбити діапазон марок машин на чотири групи відповідно (всього в базі nakolesah 61 марка на даний момент). Можна скористатися готовим розбивкою, яке в коді у мене зроблено:

  # Next if $ brand! ~ / Rover | FAW | Volkswagen | Ferrari | Jaguar | Smart | Suzuki | gaz | Bentley |
 Peugeot | Pontiac | Honda | Maybach | vaz | Infiniti | Buick | Subaru / i;
 # Next if $ brand! ~ / Lancia | Opel | Daihatsu | Hummer | Kia | Fiat | Nissan | Saturn |
 Mini | Hyundai | Renault | Citroen | Lincoln | Chevrolet | Dodge / i;
 # Next if $ brand! ~ / Chery | Mazda | Ford | uaz | Acura | Porsche | Lotus | Volvo | Toyota |
 Skoda | Cadillac | Scion | Saab | Mercury | Daewoo / i;
 # Next if $ brand! ~ / Chrysler | BMW | Isuzu | MG | Mercedes | GMC | Seat | Maserati |
 Mitsubishi | Jeep | Lexus | Audi | Lifan | Geely / i; 

У кожній з чотирьох копій розкоментувати потрібний діапазон, файли краще назвати по-різному, оскільки за замовчуванням висновок йде у файл з ім'ям імя_скріпта.xml (втім можна при зпуске ключиком ім'я вихідного файлу передати).

Попутно зробив скриптик для валідації результатів роботи парсера nakolesah.ru, в черговий раз порадів красі перлових регулярок:

  m | <(\ w +) \ s? \ w *=?"? \ w * "?> \ s * </ \ 1> $ | ig 

один рядок перевіряє теги на заповненість (чи все скачано), розуміє теги з атрибутами і без. Валідатор результатів вивантаження nakolesah.ru можна скачати разом з парсером.

Заради інтересу трохи статистки (може коли потягне поностальгувати :) ):

  • чиста база в XML (без порожніх рядків):

      $ Wc-l nakolesah.ru_full_base_4.12.2009.xml
     550657 nakolesah.ru_full_base_4.12.2009.xml 

  • 577 моделей машин

Як і обіцяв, посилання на скачування парсера-граббера сайту nakolesah.ru (валідатор виходу теж лежить в архіві): nakolesah.ru_parser + validator

Всім удачі!

Ще на схожі теми:

Category Рубрики: Інтернет , Кодинг | Tag Мітки: , , , , | Comments 18 коментарів

Comments

18 коментарів to "Парсер бази nakolesah.ru"

  1. sberkut пише:

    Добрий день! Мабуть вони дизайн змінили і не парсити розміри, не можу б ви поправити це платно / безкоштовно! спасибі)

    • dimio пише:

      Розміри чого саме? Давайте відразу з конкретикою, так простіше буде зрозуміти, в чому справа.

      • sberkut пише:

        скрипт відмінно бере моделі машин, але типорозміри шин і дисків відповідних він не вибирає, в результаті xml є види:

        ....

        • dimio пише:

          Не можу сказати, в чому справа, оскільки у мене нормально вивантажується вся інформація.

          • sberkut пише:

            у мене помоему редирект не проходить, пише:

            Use of uninitialized value $ redir_url in concatenation (.) Or string at / home / digbox / data / www / digbox.ru / cgi-bin / nakolesah_ru_parser.pl line 152.

            не допоможете розібратися? :)

            • dimio пише:

              Відразу при першому запуску не проходить? Додайте перед 152 рядком наступне:

              1
              2
              print $ response-> content, "\ n";
              exit;

              і результат повідомте мені.

              • sberkut пише:

                видає наступне:

                1 | # | | 4 | 54 | pageRedirect | |% 2fselect% 2ftiresbyauto% 2facura% 2fcl% 2f2003% 2f32i.aspx |

                як я зрозумів урл для редіректу розпізнає, але не переходить : (

                • dimio пише:

                  Ну це поправити не складно. Він як раз таки не розпізнавав посилання для редіректу, оскільки змінилася форма її видачі.
                  Треба в рядку 150 замінити шаблон пошуку:

                  1
                  my $ redir_url = $ 1 if $ response-> content = ~ m # / ([\ Wа-Яа-Я \. \ s \ (\ ),%-]+) \ | $ # i;

                  на

                  1
                  my $ redir_url = $ 1 if $ response-> content = ~ m # \ | \ | ([\ Wа-Яа-Я \. \ s \ (\ ),%-]+) \ | $ # i;
                  • sberkut пише:

                    спасибі велике все запрацювало)

                  • sberkut пише:

                    а немає поспішив (не хоче таки висмикувати, зберігає так само (

                    • dimio пише:

                      Швидше за все там змінилася не тільки форма видачі посилання, але і видача інформації по шинах / дисків і щоб відновити працездатність, доведеться багато змінювати в функції розбору сторінок.

  2. Cry пише:

    Поправив парсер, можу поділитися або базою або їм самим ... пишіть skype:

    1
    cry.int
  3. Vipertp пише:

    Якщо хтось зміг поправити парсер. Допоможіть пжл.
    icq: 308037667
    skype: viperstp

  4. Rock'n'roll пише:

    Може хтось все таки поділиться інформацією чому не витягує типорозміри, що саме в коді треба поміняти.

  5. александр пише:

    Доброго дня, якщо у кого є парсер на пхп то поділіться будь ласка а то терміново треба (((моя ася 202 716 а то двиг у нас ДЛЕ (він на пхп)

Leave a Reply