Был занят в свободное (от основной работы) время — делал халтуру, которая заключалась в просьбе написать парсер, чтобы сграбить структуру подбора колёс по автомобилю с сайта nakolesah.ru (естественно, на языке perl).
И вот сегодня он готов (начал в минувшее воскресенье) и проходит тестирование у заказчика. Приятно то, что это первый случай, когда моё хобби принесло небольшую денежку (которую я потрачу на другое хобби — охоту :) ).
Не могу сказать, что парсер идеален. Меня упорно преследует ощущение, что всё можно было сделать проще и лучше :)
Но, помимо того, что это первый мой написанный на заказ скрипт, парсер nakolesah.ru для меня лично примечателен еще по нескольким причинами:
- во-первых, я впервые применил многоуровневую структуру данных (раньше глубже списка, вложенного в хэш, не опускался) и разобрался с разыменовыванием ссылок соответственно;
- во-вторых — впервые столкнулся с aspx-скриптами на сервере (откровенно говоря, осталось не самое приятное ощущение, по сравнению с perl и php. Впрочем, чего ожидать от microsoft?).
Структура данных после парсинга nakolesah содержит аж семь уровней вложенности, что поначалу несколько пугает и путает. Впрочем, благодаря отличной книге «Perl — изучаем глубже», разобраться в этом вопросе не очень сложно.
Вот небольшой кусочек структуры данных для наглядности:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | '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-файл):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <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»? Почему не PHP?
Я знаком с Perl и не знаком с PHP — так что для меня было естественно использовать именно Perl.