Парсер-граббер nakolesah.ru
Був зайнятий у вільне (від основної роботи) час - робив халтуру, яка полягала в проханні написати парсер, щоб сграбіть структуру (Природно, на мові perl ).
І ось сьогодні він готовий (почав минулої неділі) і проходить тестування у замовника. Приємно те, що це перший випадок, коли моє хобі принесло невелику гріш (яку я витрачу на інше хобі - полювання
).
Не можу сказати, що парсер ідеальний. Мене наполегливо переслідує відчуття, що все можна було зробити простіше і краще ![]()
Але, крім того, що це перший мій написаний на замовлення скрипт, парсер nakolesah.ru для мене особисто примітний ще по кількох причинами:
- по-перше, я вперше застосував багаторівневу структуру даних (раніше глибше списку, вкладеного в хеш, не опускався) і розібрався з разименовиваніем посилань відповідно;
- по-друге - вперше зіткнувся з aspx-скриптами на сервері (відверто кажучи, залишилося не найприємніше відчуття, порівняно з perl і php. Втім, чого чекати від microsoft?).
Структура даних після парсинга nakolesah містить аж сім рівнів вкладеності, що спочатку трохи лякає і плутає. Втім, завдяки відмінній книзі "Perl - вивчаємо глибше" , розібратися в цьому питанні не дуже складно.
Ось невеликий шматочок структури даних для наочності:
'Nissan' => { 'Terrano' => { '1994 '=> { '30Di '=> { 'Wheels' => { '8 X 16 ET10 '=> { 'Replacement' => 1 }, '7 X 15 ET12 '=> { 'OEM' => 1 }, '8 X 18 ET '=> { 'Replacement' => 1 }, '8 X 17 ET '=> { 'Replacement' => 1 } },
При початку розробки я припускав, що вкладеність буде ще глибше - за рахунок додавання в кінець дерева масиву з характеристиками шин і дисків, але це виявилося не потрібно.
А ось так виглядає результат роботи парсера nakolesah.ru (висновок виробляється в XML-файл):
<brand name="Chrysler"> <model name="Pacifica"> <year value="2005"> <modifi name="35i"> <type name="wheels"> <label name="8 x 17 ET38"> <completion> Replacement </ completion> <axle> </ axle> </ Label> <label name="7,5 x 17 ET45"> <completion> OEM </ completion> <axle> </ axle> </ Label> <label name="8 x 19 ET35"> <completion> Replacement </ completion> <axle> </ axle> </ Label> <label name="8 x 18 ET35"> <completion> Replacement </ completion> <axle> </ axle> </ Label> </ Type> <type name="tires"> <label name="235/60 R18"> <completion> Replacement </ completion> <axle> </ axle> </ Label> <label name="235/65 R17"> <completion> OEM </ completion> <axle> </ axle> </ Label> <label name="235/55 R19"> <completion> Replacement </ completion> <axle> </ axle> </ Label> </ Type> </ Modifi>
А поки парсер для сайту nakolesah.ru тестується замовником, я думаю, що потихеньку прироблю до нього можливість докачки даних і, можливо, багатопоточність (останній раз користувався бібліотекою threads майже рік тому, якраз подивлюся, що в ній новенького).
З найкращими побажаннями, dimio !
Ще на схожі теми:
Рубрики: Інтернет , Кодинг |
Мітки: perl , парсер , програмінг , робота |
6 коментарів 

хотіли б придбати парсер пишіть на пошту
Тільки базу можу.
По чому базу продаєте?
Потрібна база, скільки коштує?
А чому "природно, мовою perl"? Чому не PHP?
Я знайомий з Perl і не знайомий з PHP - так що для мене було природно використовувати саме Perl.