用scrapy爬取Kelly Blue Book二手车网数据

这是我以前的一篇博文:数学建模用/Python爬虫实战——爬取Kelley Blue Book(KBB二手车交易网站)的交易信息

这是我在去年数学建模校赛时候写的一个爬虫,用来获得数据分析需要的数据信息。这一次不同与上一次,上一次使用的beautifulsoup和正则匹配来获取数据,这一次使用的是css和xpath选择器,且是基于scrapy框架的。这是爬取的要求:

                                   用scrapy爬取Kelly Blue Book二手车网数据_第1张图片

这一次实现了翻页功能,代码如下所示:

items.py:

from scrapy import Item, Field


class CarItem(Item):
    name = Field()
    price = Field()
    mile = Field()

spider/cars_spinder.py

import scrapy
from ..items import CarItem


class CarSpider(scrapy.Spider):
    name = 'car'
    start_urls = ['https://www.kbb.com/cars-for-sale/used?listingTypes=USED&searchRadius=0&marketExtension=include&isNewSearch=false&sortBy=derivedpriceDESC&numRecords=25&firstRecord=0']

    def parse(self, response):
        i = 0
        url = "https://www.kbb.com/cars-for-sale/used?listingTypes=USED&searchRadius=0&marketExtension=include&isNewSearch=false&sortBy=derivedpriceDESC&numRecords=25&firstRecord="
        # 爬虫核心
        for cars in response.css('div.padding-left-3.inventory-listing-body.padding-top-3.padding-right-3.margin-bottom-2'):
            car = CarItem()
            car['name'] = cars.xpath('./div/div/div/a/h2/text()').extract_first()
            car['price'] = cars.xpath('./div/div/div/span/text()').extract_first()
            car['mile'] = cars.css('div.text-bold::text').extract_first()
            yield car

        # 翻页功能
        while i <= 13:
            i += 1
            temp = i * 25
            next_url = url + str(temp)
            print(next_url)
            next_url = response.urljoin(next_url)
            yield scrapy.Request(next_url, callback=self.parse)

这是爬取的结果:

用scrapy爬取Kelly Blue Book二手车网数据_第2张图片

可以看到,这个csv文件暂时还不能直接使用,应为mile和price都还不是数字而是字符串,于是还要在pipelines.py文件里编辑如下的代码作为数据清洗的过程,同时不要忘记在settings.py文件中添加这个类:

 class DropCarMile(object):

     def process_item(self, item, spider):
         # locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
         item['mile'] = float(item['mile'][:-6].replace(',', ''))
         item['price'] = float(item['price'].replace(',', ''))
         return item

这就是最后的结果:

用scrapy爬取Kelly Blue Book二手车网数据_第3张图片

你可能感兴趣的:(Python的学习,数学建模存档,Python机器学习与数据分析)