Парсер-граббер nakolesah.ru

Был занят в свободное (от основной работы) время — делал халтуру, которая заключалась в просьбе написать парсер, чтобы сграбить структуру подбора колёс по автомобилю с сайта 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!



Category Рубрики: Интернет, Кодинг | Tag Метки: , | Comments 6 комментариев »

6 комментариев

  1. xxx says:

    хотели бы преобрести парсер пишите на почту

  2. arhangel says:

    По чем базу продаете?

  3. pavel says:

    Нужна база, сколько стоит?

  4. женёк says:

    А почему «естественно, на языке perl»? Почему не PHP?

    • dimio says:

      Я знаком с Perl и не знаком с PHP — так что для меня было естественно использовать именно Perl.

Добавить комментарий