Поиск по блогу

пятница, 2 января 2015 г.

Готовим Xpath Запросы для страницы cars.mail.ru/catalog/bmw/ с помощью Xpath helper chrome

Здесь запросы для трех полей текста ссылок BMW X6 кроссовер (37 значений), значения @href /catalog/bmw/m3/f30/sedan/(37 значений), и поля цены 4121000 (34 значения)... Две красивых картинки и фрагменты кода страницы.
Этот пост использовался для подбора и тестирования XPath запросов.

Нужно забежать вперед

Итак, Для начала я решил выделить все ссылки с одной страницы каталога автомобилей (получилось 37) и цены, потом из этого сформировать табличку 37х3. Поскольку этот пост учебный, то я его продолжу, но "в жизни" надо было бы бросить это дело и сначала проверить, можно ли парсить эту страницу в Scrapy. По ходу изучения кода возникло два вопроса. Первый, как не потерять соответсятвия между ссылками и ценой. Второй, проверить, где на страничку вставляется цена (с сервера BMW) - на сервере cars.mail.ru, или у меня в браузере.

Ответ на первый вопрос нашелся довольно быстро. В примере из справки Scrapy c DMOZ:

In []:
for sel in response.xpath('//ul/li'):
    title = sel.xpath('a/text()').extract()
    link = sel.xpath('a/@href').extract()
    desc = sel.xpath('text()').extract()
    print title, link, desc

Здесь сначала выбирается общий селектор, а потом в нем уже ищутся элементы, которые заполняют каждый item объекта Item...

А вот второй вопрос самый главный, если цены грузятся сразу в мой браузер, то надо ломать голову, как "перехватить" цены, или перейти на Nodejs... так что, все то, что написано ниже может и не понадобиться...

Решил, что надо вспоминать scrapy shell, и проверил есть ли "цены" на сервере

In []:
C:\Users\kiss\SkyDrive\Docs\mailru\cars_mail_1>scrapy shell "https://cars.mail.ru/catalog/bmw/" -s USER_AGENT="Mozilla/5.0 (Windows
NT 6.3; WOW64)"
....
 response.body
In []:
# Скопипастил в редактор и быстро нашел фрагменты вида
<span class="rank"><i>1</i><i>104</i><i>000</i></span>
# Это и есть те самые цены, и scrapy получил их с сервера

Теперь сомнений не осталось и можно двигаться дальше.

В конце страницы фрагмент кода со всеми ссылками, а вот этот фрагмент мы будем парсить:

In []:
<a href="/catalog/bmw/1/e82/coupe/" class="catalog-generation__card__title">
 BMW 1
 купе
 </a>

Запустим XPath helper (Ctrl+Shift+x), потом наведем курсор на ссылку и нажмем Shift. Появятся два фрейма, в левом сгенерируерся код:

In []:
# Вот этот сгенерированный Xpath выдает строчку "BMW 1 купе"
/html[@class=' cpf-js cpf-no-touch cpf-cssanimations cpf-csstransforms 
               cpf-csstransforms3d cpf-csstransitions cpf-mediaqueries 
               js pm-backgroundsize pm-boxshadow pm-csstransitions pm-classlist 
               pm-raf pm-transitionend pm-dpr pm-retina pm-no-ie pm-requestanimationframe']
     /body
     /div[@class='page js-page page_column-left-no']
     /div[@class='page__in js-page_in']
     /div[@class='page__body clear js-page__body']
     /div[@class='page__body__unit']
     /div[@class='page__body__unit__in']
     /div[@class='page__body__unit__box clear']
     /div[@class='page__body__main']
     /div[@class='page__body__main__box']
     /div[@class='catalog-generation']
     /div[@class='catalog-generation__list'][1]
     /div[@class='catalog-generation__card'][1]
     /a[@class='catalog-generation__card__title']
In []:
Заменим код вот на этот:
In []:
//div[@class='catalog-generation']
     /div[@class='catalog-generation__list']
     /div[@class='catalog-generation__card']
     /a[@class='catalog-generation__card__title']

Страничку надо обязательно проверить, оказывается не все ссылки выделены:

In [1]:
from IPython.display import Image
Image('C:\\Users\\kiss\\Pictures\\pythonR\\bmw_1.png')
Out[1]:

Почему "новые" машины не захватываются? Откроем инструменты разработчика и проверим код:

In [2]:
Image('C:\\Users\\kiss\\Pictures\\pythonR\\bmw_2.png')
Out[2]:
In []:
<div class="catalog-generation__card catalog-generation__card_new">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_suv" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/7/0/70f81f569abcaf85b9cebca0d722e296_240x150.png);"></div>
 <a href="/catalog/bmw/x6/f16/crossover/" class="catalog-generation__card__title">
 BMW X6
 кроссовер
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>3</i><i>508</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>

Оказывается, что в XPath нам нужно указать все классы (всю строчку в кавычках "catalog-generationcard catalog-generationcard_new")... Однако проще вообще убрать атрибут класса. Вот эта команда вытащит все (всего 37 ) тексты из ссылок:

In []:
//div[@class='catalog-generation']
     /div[@class='catalog-generation__list']
     /div
     /a[@class='catalog-generation__card__title']

В конце поста можно найти все тексты. Не исключено, что их надо будет почистить от символов переноса строк и пробелов... Но пока нам не до этого Мы теперь вытащим сами ссылки (их тоже получилось 37):

In []:
//div[@class='catalog-generation']
     /div[@class='catalog-generation__list']
     /div
     /a[@class='catalog-generation__card__title']/@href
In []:
/catalog/bmw/1/e82/coupe/
/catalog/bmw/3/f30_31/sedan/
/catalog/bmw/2/f22_coupe/coupe/
/catalog/bmw/3/e92/coupe/
/catalog/bmw/4/f32_33/coupe/
/catalog/bmw/5/f10_11_restailing/sedan/
/catalog/bmw/m3/f30/sedan/
/catalog/bmw/m4/i/coupe/
/catalog/bmw/7/f01_02_04_restailing/sedan/
/catalog/bmw/6_coupe/f12/coupe/
/catalog/bmw/6_gran_coupe/f06/sedan/
/catalog/bmw/m6/f12_13/coupe/
/catalog/bmw/m6_gran_coupe/f06/sedan/
/catalog/bmw/i8/i/coupe/
/catalog/bmw/1/ii_f20_21/hatchback/
/catalog/bmw/3/f30_31/wagon/
/catalog/bmw/3_gran_turismo/f34/hatchback/
/catalog/bmw/m1/f20_21/hatchback/
/catalog/bmw/3_gran_coupe/f36/hatchback/
/catalog/bmw/5/f10_11_restailing/wagon/
/catalog/bmw/5_gran_turismo/f07_restailing/hatchback/
/catalog/bmw/x1/e84_restailing/crossover/
/catalog/bmw/x3/f25_restailing/crossover/
/catalog/bmw/x4/f26/crossover/
/catalog/bmw/x5/f15/crossover/
/catalog/bmw/x6/f16/crossover/
/catalog/bmw/x6_m/e71_m_restailing/crossover/
/catalog/bmw/x6_m/f16/crossover/
/catalog/bmw/2_active_tourer/i/minivan/
/catalog/bmw/1/e88/cabrio/
/catalog/bmw/3/e93/cabrio/
/catalog/bmw/z4/e89/cabrio/
/catalog/bmw/4/f32_33/cabrio/
/catalog/bmw/m4/i/cabrio/
/catalog/bmw/6_coupe/f13/cabrio/
/catalog/bmw/m6/f12_13/cabrio/
/catalog/bmw/2/f23_cabrio/cabrio/

Не надо и про цены забывать. Здесь оказывается, что цена на страницу (по-видимому) вставляется с сайта производителя, потому что вот такая "странная" разметка используется:

In []:
<div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value">
    <span class="rank">
        <i>3</i>
        <i class="">508</i>
        <i>000</i>
    </span>
 </span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>

На предыдущей картинке видно, что строчка цены " 3 508 000 руб." расположена сразу под названием " BMW X6 кроссовер "

Но код XPath на всякий случай подберем, вот вариант генерации в инструментах разработчика (клик правой кнопкой, выбор в меню)

In []:
/html/body/div[2]/div/div[2]/div[1]/div/div/div[2]/div/div[2]/div[6]/div[5]/div[2]/span[2]
In []:
 
In []:
div[@catalog-generation__card__price]
In []:
//div[@class='catalog-generation__card__price']
 /span[@class='catalog-generation__card__price__value']
 /span[@class='rank']

Выдаст только 34 значения, оказывается, под тремя картинками цены просто нет (весь список есть в конце страницы).

Нам нужно сначала организовать итерации по блокам div class="catalog-generation__card"

In []:
$('.catalog-generation__card').length;

А потом в каждом блоке найти три поля. Очевидно, что первоначальные длинные запросы можно сократить

In []:
# Название марки в теге ссылки
//div[@class='catalog-generation']/div[@class='catalog-generation__list']/div/a[@class='catalog-generation__card__title']
# адрес ссылки
//div[@class='catalog-generation']/div[@class='catalog-generation__list']/div/a[@class='catalog-generation__card__title']/@href
# Цена марки
//div[@class='catalog-generation__card__price']/span[@class='catalog-generation__card__price__value']/span[@class='rank']
In []:
//a[@class='catalog-generation__card__title']

Вот так примерно будет выглядеть итератор по странице

In []:
for sel in sel.css('.catalog-generation__card'):
    title = sel.xpath('//a[@class="catalog-generation__card__title"]/text()').extract()
    link = sel.xpath('.//a[@class="catalog-generation__card__title"]/@href').extract()
    price = sel.xpath('.//span[@class="rank"]').extract()
    print title, link, price

Ниже копипаст вывода поля price, здесь он красивый, но на самом деле здесь присутствуют html-теги ""i",их нужно будет убрать.

In []:
1104000
1398000
1400000
1450000
1838000
1908000
3332000
3460000
3594000
3766000
4121000
7005000
7665000
8880000
1240000
1660000
1675000
1850000
1906000
2519000
2752000
1413000
1948000
2314000
2999000
3508000
4464000
1260000
1750000
2038000
2322000
3860000
4059000
7543000

Вот блок кода с исходными данными

In []:
<div class="catalog-generation">
 
 
 <div class="catalog-generation__title">Седаны и купе</div>

 <div class="catalog-generation__list">
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/9/a/9ad783137bc8e972a7ffd90654ab79fa_240x150.png);"></div>
 <a href="/catalog/bmw/1/e82/coupe/" class="catalog-generation__card__title">
 BMW 1
 купе
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>104</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/9/b/9b2721197ae913ce3f7f14fe014521ff_240x150.png);"></div>
 <a href="/catalog/bmw/3/f30_31/sedan/" class="catalog-generation__card__title">
 BMW 3
 седан
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>398</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/8/d/8d2f9563d49430181c3be47769ed5b86_240x150.png);"></div>
 <a href="/catalog/bmw/2/f22_coupe/coupe/" class="catalog-generation__card__title">
 BMW 2
 купе
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>400</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/0/5/05fd211fb97258420ec94d546848c0c5_240x150.png);"></div>
 <a href="/catalog/bmw/3/e92/coupe/" class="catalog-generation__card__title">
 BMW 3
 купе
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>450</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/8/9/899a85ffc951da6b6a6a5d89ee7b7a62_240x150.png);"></div>
 <a href="/catalog/bmw/4/f32_33/coupe/" class="catalog-generation__card__title">
 BMW 4
 купе
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>838</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/1/5/15f5ba7eda2ab6ea17bccba7f6621516_240x150.png);"></div>
 <a href="/catalog/bmw/5/f10_11_restailing/sedan/" class="catalog-generation__card__title">
 BMW 5
 седан
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>908</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/5/c/5cb7fd079beae190387ffcfdb20682e6_240x150.png);"></div>
 <a href="/catalog/bmw/m3/f30/sedan/" class="catalog-generation__card__title">
 BMW M3
 седан
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>3</i><i>332</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/9/0/902f5c6a4bf791cd3173f966df7b7221_240x150.png);"></div>
 <a href="/catalog/bmw/m4/i/coupe/" class="catalog-generation__card__title">
 BMW M4
 купе
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>3</i><i>460</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/d/f/df2d97b26d1f14fde30e16827f4d15b2_240x150.png);"></div>
 <a href="/catalog/bmw/7/f01_02_04_restailing/sedan/" class="catalog-generation__card__title">
 BMW 7
 седан
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>3</i><i>594</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/4/7/473549c60809d6021cb8e34414224dda_240x150.png);"></div>
 <a href="/catalog/bmw/6_coupe/f12/coupe/" class="catalog-generation__card__title">
 BMW 6
 купе
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>3</i><i>766</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/8/5/85b34146b192686baa38300ff6c5b9a6_240x150.png);"></div>
 <a href="/catalog/bmw/6_gran_coupe/f06/sedan/" class="catalog-generation__card__title">
 BMW 6 Gran Coupe
 седан
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>4</i><i>121</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/c/a/cab6f6aa7a7f013cbbcdfb528d70dd66_240x150.png);"></div>
 <a href="/catalog/bmw/m6/f12_13/coupe/" class="catalog-generation__card__title">
 BMW M6
 купе
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>7</i><i>005</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/2/e/2e7909b4de9312bd11686947d8a44918_240x150.png);"></div>
 <a href="/catalog/bmw/m6_gran_coupe/f06/sedan/" class="catalog-generation__card__title">
 BMW M6 Gran Coupe
 седан
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>7</i><i>665</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card catalog-generation__card_new">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/7/e/7e7ba59fd8e750162f94de2629e1eb77_240x150.png);"></div>
 <a href="/catalog/bmw/i8/i/coupe/" class="catalog-generation__card__title">
 BMW i8
 купе
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>8</i><i>880</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 </div>
 
 
 
 <div class="catalog-generation__title">Хэтчбеки и универсалы</div>

 <div class="catalog-generation__list">
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/7/6/767c81ccd98ced19c99444f18a9e24ff_240x150.png);"></div>
 <a href="/catalog/bmw/1/ii_f20_21/hatchback/" class="catalog-generation__card__title">
 BMW 1
 хэтчбек
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>240</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/e/0/e07116135181660b9856cf197517ce17_240x150.png);"></div>
 <a href="/catalog/bmw/3/f30_31/wagon/" class="catalog-generation__card__title">
 BMW 3
 универсал
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>660</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/c/6/c687585f4ae0c0ae9610b2c69c0bd097_240x150.png);"></div>
 <a href="/catalog/bmw/3_gran_turismo/f34/hatchback/" class="catalog-generation__card__title">
 BMW 3 Gran Turismo
 хэтчбек
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>675</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/e/2/e2c7b23b6c54f5d330e51881489a44f0_240x150.png);"></div>
 <a href="/catalog/bmw/m1/f20_21/hatchback/" class="catalog-generation__card__title">
 BMW M1
 хэтчбек
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>850</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/0/c/0caa0ae3ba31d51998397f7fe46ddfe1_240x150.png);"></div>
 <a href="/catalog/bmw/3_gran_coupe/f36/hatchback/" class="catalog-generation__card__title">
 BMW 4 Gran Coupe
 хэтчбек
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>906</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/7/0/704372372f773ab1b492e133773a7788_240x150.png);"></div>
 <a href="/catalog/bmw/5/f10_11_restailing/wagon/" class="catalog-generation__card__title">
 BMW 5
 универсал
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>2</i><i>519</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/5/9/59a2c477dd37c5adb8525ef1ce9fd7bb_240x150.png);"></div>
 <a href="/catalog/bmw/5_gran_turismo/f07_restailing/hatchback/" class="catalog-generation__card__title">
 BMW 5 Gran Turismo
 хэтчбек
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>2</i><i>752</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 </div>
 
 
 
 <div class="catalog-generation__title">Кроссоверы и внедорожники</div>

 <div class="catalog-generation__list">
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_suv" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/b/2/b2a091ac291860ed8e088b078df59716_240x150.png);"></div>
 <a href="/catalog/bmw/x1/e84_restailing/crossover/" class="catalog-generation__card__title">
 BMW X1
 кроссовер
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>413</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_suv" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/6/a/6a1996d14a14a8fa5f190b204038998e_240x150.png);"></div>
 <a href="/catalog/bmw/x3/f25_restailing/crossover/" class="catalog-generation__card__title">
 BMW X3
 кроссовер
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>948</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card catalog-generation__card_new">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_suv" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/4/9/49acb6127371b33872eb8b6ccdd6112b_240x150.png);"></div>
 <a href="/catalog/bmw/x4/f26/crossover/" class="catalog-generation__card__title">
 BMW X4
 кроссовер
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>2</i><i>314</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_suv" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/4/b/4bf0ba62408937ade54cc6b9447c6304_240x150.png);"></div>
 <a href="/catalog/bmw/x5/f15/crossover/" class="catalog-generation__card__title">
 BMW X5
 кроссовер
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>2</i><i>999</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card catalog-generation__card_new">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_suv" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/7/0/70f81f569abcaf85b9cebca0d722e296_240x150.png);"></div>
 <a href="/catalog/bmw/x6/f16/crossover/" class="catalog-generation__card__title">
 BMW X6
 кроссовер
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>3</i><i>508</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_suv" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/7/6/7619da87b977135dbbd075d15ce0287a_240x150.png);"></div>
 <a href="/catalog/bmw/x6_m/e71_m_restailing/crossover/" class="catalog-generation__card__title">
 BMW X6 M
 кроссовер
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>4</i><i>464</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card catalog-generation__card_new">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_suv" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/a/4/a4e95aa8090c597df81f551ff24ecc4e_240x150.png);"></div>
 <a href="/catalog/bmw/x6_m/f16/crossover/" class="catalog-generation__card__title">
 BMW X6 M
 кроссовер
 </a>
 
 </div>
 
 </div>
 
 
 
 <div class="catalog-generation__title">Минивэны и пикапы</div>

 <div class="catalog-generation__list">
 
 <div class="catalog-generation__card catalog-generation__card_new">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_suv" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/7/b/7b53e17ebab8441e91a6a28e735a08a2_240x150.png);"></div>
 <a href="/catalog/bmw/2_active_tourer/i/minivan/" class="catalog-generation__card__title">
 BMW 2 Active Tourer
 минивэн
 </a>
 
 </div>
 
 </div>
 
 
 
 <div class="catalog-generation__title">Кабриолеты и родстеры</div>

 <div class="catalog-generation__list">
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/1/c/1c7434ccd9c6c8aa696e78139f5041bf_240x150.png);"></div>
 <a href="/catalog/bmw/1/e88/cabrio/" class="catalog-generation__card__title">
 BMW 1
 кабриолет
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>260</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/f/0/f019bb6438beb3b306c970108669b97f_240x150.png);"></div>
 <a href="/catalog/bmw/3/e93/cabrio/" class="catalog-generation__card__title">
 BMW 3
 кабриолет
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>1</i><i>750</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/6/4/64e31d370ff4c3d264bd031d6bc11ce4_240x150.png);"></div>
 <a href="/catalog/bmw/z4/e89/cabrio/" class="catalog-generation__card__title">
 BMW Z4
 кабриолет
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>2</i><i>038</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/d/a/da5275b5424fd2794b82e48152e6bace_240x150.png);"></div>
 <a href="/catalog/bmw/4/f32_33/cabrio/" class="catalog-generation__card__title">
 BMW 4
 кабриолет
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>2</i><i>322</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/8/a/8a4a82635b485e81534e5bf787a374fc_240x150.png);"></div>
 <a href="/catalog/bmw/m4/i/cabrio/" class="catalog-generation__card__title">
 BMW M4
 кабриолет
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>3</i><i>860</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/c/b/cb329d682a80f9882a640c7e0b5c8da5_240x150.png);"></div>
 <a href="/catalog/bmw/6_coupe/f13/cabrio/" class="catalog-generation__card__title">
 BMW 6
 кабриолет
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>4</i><i>059</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/4/f/4f1a7d994346a8e47a06d41971078efd_240x150.png);"></div>
 <a href="/catalog/bmw/m6/f12_13/cabrio/" class="catalog-generation__card__title">
 BMW M6
 кабриолет
 </a>
 
 <div class="catalog-generation__card__price">
 <span class="catalog-generation__card__price__note">от</span>
 <span class="catalog-generation__card__price__value"><span class="rank"><i>7</i><i>543</i><i>000</i></span></span>
 <span class="catalog-generation__card__price__note">руб.</span>
 </div>
 
 </div>
 
 <div class="catalog-generation__card catalog-generation__card_new">
 <div class="catalog-generation__card__pic catalog-generation__card__pic_sedan" style="background-image:url(//cars.imgsmail.ru/catalogue/generations/2/f/2f029804416438c8f6ec716ac6d2abda_240x150.png);"></div>
 <a href="/catalog/bmw/2/f23_cabrio/cabrio/" class="catalog-generation__card__title">
 BMW 2
 кабриолет
 </a>
 
 </div>
 
 </div>
 
 
 
 
 </div>

Результат парсинга поля "name" далее надо будет чистить от символов переноса строк

In []:
 BMW 1
 купе
 

 BMW 3
 седан
 

 BMW 2
 купе
 

 BMW 3
 купе
 

 BMW 4
 купе
 

 BMW 5
 седан
 

 BMW M3
 седан
 

 BMW M4
 купе
 

 BMW 7
 седан
 

 BMW 6
 купе
 

 BMW 6 Gran Coupe
 седан
 

 BMW M6
 купе
 

 BMW M6 Gran Coupe
 седан
 

 BMW i8
 купе
 

 BMW 1
 хэтчбек
 

 BMW 3
 универсал
 

 BMW 3 Gran Turismo
 хэтчбек
 

 BMW M1
 хэтчбек
 

 BMW 4 Gran Coupe
 хэтчбек
 

 BMW 5
 универсал
 

 BMW 5 Gran Turismo
 хэтчбек
 

 BMW X1
 кроссовер
 

 BMW X3
 кроссовер
 

 BMW X4
 кроссовер
 

 BMW X5
 кроссовер
 

 BMW X6
 кроссовер
 

 BMW X6 M
 кроссовер
 

 BMW X6 M
 кроссовер
 

 BMW 2 Active Tourer
 минивэн
 

 BMW 1
 кабриолет
 

 BMW 3
 кабриолет
 

 BMW Z4
 кабриолет
 

 BMW 4
 кабриолет
 

 BMW M4
 кабриолет
 

 BMW 6
 кабриолет
 

 BMW M6
 кабриолет
 

 BMW 2
 кабриолет
 
In []:
 


Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий