Вы должны получить полный элемент, который хотите очистить, ваш код дает только свойства, а не заголовок и цену.
Я изменил ваш код, и он, кажется, работает как задумано. Я удалил элемент include и некоторые комментарии, чтобы он работал на моем компьютере.
from scrapy.spiders import SitemapSpider as CrawlSpider
class SitemapSpider(CrawlSpider):
name = 'sitemap3'
allowed_domains = ['universalmotors.ru']
sitemap_urls = ['https://universalmotors.ru/sitemap.xml']
sitemap_rules = [('/motorcycles/', 'parse_item')]
def parse_item(self, response):
item = dict()
item['title'] = response.css("h1.good__title::text").extract_first()
item['price'] = response.css('div.deal-info span.campaign-price').css('::text').extract_first()
item['properties'] = list()
for prop in response.xpath('//tr[@itemprop="additionalProperty"]'):
item['properties'].append(
{
'name': prop.xpath('normalize-space(./*[@class="label_table"])').extract_first(),
'value': prop.xpath('normalize-space(./*[@class="value_table"])').extract_first(),
}
)
yield item
Обратите внимание, что я собираю всю информацию внутри переменной item
, которая в данном случае dict
, а у вас DistPracticalItem
.
В результате вы получите следующую схему:
{
'title': string,
'price': string,
'properties': list of dicts with 'name' and 'value' as strings
}
Надеюсь, я был чист.