Парсер бази 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
Всім удачі!
Ще на схожі теми:
Рубрики: Інтернет , Кодинг |
Мітки: nakolesah.ru , perl , парсер , програмінг , робота |
18 коментарів 


Добрий день! Мабуть вони дизайн змінили і не парсити розміри, не можу б ви поправити це платно / безкоштовно! спасибі)
Розміри чого саме? Давайте відразу з конкретикою, так простіше буде зрозуміти, в чому справа.
скрипт відмінно бере моделі машин, але типорозміри шин і дисків відповідних він не вибирає, в результаті xml є види:
....
Не можу сказати, в чому справа, оскільки у мене нормально вивантажується вся інформація.
у мене помоему редирект не проходить, пише:
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.
не допоможете розібратися?
Відразу при першому запуску не проходить? Додайте перед 152 рядком наступне:
2
exit;
і результат повідомте мені.
видає наступне:
1 | # | | 4 | 54 | pageRedirect | |% 2fselect% 2ftiresbyauto% 2facura% 2fcl% 2f2003% 2f32i.aspx |
як я зрозумів урл для редіректу розпізнає, але не переходить
Ну це поправити не складно. Він як раз таки не розпізнавав посилання для редіректу, оскільки змінилася форма її видачі.
Треба в рядку 150 замінити шаблон пошуку:
на
спасибі велике все запрацювало)
а немає поспішив (не хоче таки висмикувати, зберігає так само (
Швидше за все там змінилася не тільки форма видачі посилання, але і видача інформації по шинах / дисків і щоб відновити працездатність, доведеться багато змінювати в функції розбору сторінок.
Поправив парсер, можу поділитися або базою або їм самим ... пишіть skype:
яка пошта? або ася
http://www.dimio.org/about
Якщо хтось зміг поправити парсер. Допоможіть пжл.
icq: 308037667
skype: viperstp
Може хтось все таки поділиться інформацією чому не витягує типорозміри, що саме в коді треба поміняти.
Вище людина давала свій контакт і писав, що поправив все під суч. умови.
Доброго дня, якщо у кого є парсер на пхп то поділіться будь ласка а то терміново треба (((моя ася 202 716 а то двиг у нас ДЛЕ (він на пхп)