瓜子二手车市场分析(Scrapy+Tableau)

语言: CN / TW / HK

00 概要

本文对瓜子网杭州二手车进行了爬取和简单分析,一方面是为了进一步熟练使用Python的Scrapy爬虫框架,另一方面是为了熟悉Tableau强大的数据可视化功能。

  • 数据爬取:Python3.7,Scrapy(requests抓取+xpath解析),MySQL(数据存储)

  • 数据可视化:Tableau2019.4

01 数据爬取

瓜子二手车是一个用爬虫比较容易的网站,除了设置简单的headers(实测至少需要UA和cookie)之外,并不需要其他复杂的反爬手段。目标是爬取杭州市的所有在售二手车信息,那么在限定了地点之后,需要的就是指定车的品牌,而后就可以构造各信息爬取页的url了。

为了应用Scrapy框架,只需指定一个初始页即可实现全站爬虫,但这里个人偷了个懒,所幸直接先写了一小段爬虫将所有品牌的初始页面都写入start_urls列表,以便后续调用。

记录下应用Scrapy爬取流程:

  1. 建立工程文件

  2. 生成爬虫工程及文件

    i. scrapy startproject guazi

    ii. scrapy genspider Myguazi guazi.com

  3. 修改items.py文件信息,增加爬取字段名

  4. 实现MyGuazi.py文件的爬虫核心代码(部分代码见后文)

  5. 设置name 、allowed_domains和start_urls 3部分参数

    i. 设计parse解析函数,主要获取item目标信息,并尝试提取下一页链接,递归调用parse

  6. 修改settings中关于cookie和headers的设置

    i. 取消cookie_enabled = False的注释,此时表示不适用scrapy默认的cookie,而用settings中的headers信息

    ii. 修改Default_request_headers信息,增加必要的请求头

  7. 修改pipelines文件

    i. 将爬取的item信息逐条写入MySQL数据库

  8. 运行爬虫:Scrapy Crawl Myguazi

#获取start_urls

url =  "https://www.guazi.com/hz/buy/"

html = requests.get(url=url, headers=Headers).text

hrefs = content.xpath( "//div[@class='dd-all clearfix js-brand js-option-hid-info']//p/a/@href" )

start_urls = [ "https://www.guazi.com" + href  for

in

hrefs]

#解析函数

def parse (self, response) :

lis = response.xpath( "//ul[@class='carlist clearfix js-top']/li" )

for li  in lis:

item = GuaziItem()

item[ 'car' ] = li.xpath( ".//a/@title" ).get()

item[ 'year' ] = li.xpath( ".//div[@class='t-i']/text()" ).get()

item[ 'km' ] = li.xpath( ".//div[@class='t-i']/text()" ).getall()[ 1 ]

item[ 'currentPrice' ] =  "" .join(li.xpath( ".//div[@class='t-price']/p//text()" ).getall())

item[ 'originalPrice' ] = li.xpath( ".//div[@class='t-price']/em/text()" ).get()

yield item

next_url =  response.xpath( "//ul[@class='pageLink clearfix']//a[@class='next']/@href" ).get()

if next_url  is not None :

next_url =  "https://www.guazi.com" + next_url

yield

scrapy.Request(next_url, callback = self.parse)

注:

  • 爬取总数: 41533

  • 全站实有数: 112332

之所以Scrapy未实现“全站”爬取的原因在于网站仅列出各车型50页的数据(每页40条),当某一品牌二手车数量大于2000辆时,后续信息无法获得。 (暂未找到解决办法)

02 数据可视化

主要是分析2个信息:

  • 杭州二手车市场概况,包括品牌占比、换车时间、行驶里程、原价和现价等;

表达的信息都在仪表盘里

  • 二手车保价率信息,主要是随使用年限和行驶里程的拟合曲线,并重点分析了几种品牌车型的保价率情况。

保价率=现价/原价

2个结论:

  1. 保价率与使用年限和行驶里程呈现高度负相关;

  2. 不同品牌车保价率随使用年限变化曲线略有不同,在列出的8个基数比较大的二手车品牌中,保价率随使用年限呈现3个梯队,以使用5年为参考基准:

  • 保价率在0.5以上的:本田(约0.65)、日产(约0.55),均为日系车

  • 保价率在0.5左右的:奔驰、奥迪、现代,两个德系,一个韩系

  • 保价率在0.5以下的:宝马(约0.45)、长安(约0.45)、哈弗(约0.4),一个德系,两个国产。

二手车市场上, 在品牌和质量方面 齐名的"奥宝驰" 不仅数量差别明显,在保价率上也是高下立判;日系车保价率居然 最高 国产车的质量发展和品牌打造仍然任重而道远。

每日 留言

说说你最近遇到的有趣事情

或者一句激励自己的话?

(字数不少于15字)

完整Python基础知识要点

Python小知识 | 这些技能你不会?(一)

Python小知识 | 这些技能你不会?(二)

Python小知识 | 这些技能你不会?(三)

Python小知识 | 这些技能你不会?(四)

近期推荐阅读:

分享到: