00 概要
本文对瓜子网杭州二手车进行了爬取和简单分析,一方面是为了进一步熟练使用Python的Scrapy爬虫框架,另一方面是为了熟悉Tableau强大的数据可视化功能。
01 数据爬取
瓜子二手车是一个用爬虫比较容易的网站,除了设置简单的headers(实测至少需要UA和cookie)之外,并不需要其他复杂的反爬手段。目标是爬取杭州市的所有在售二手车信息,那么在限定了地点之后,需要的就是指定车的品牌,而后就可以构造各信息爬取页的url了。
为了应用Scrapy框架,只需指定一个初始页即可实现全站爬虫,但这里个人偷了个懒,所幸直接先写了一小段爬虫将所有品牌的初始页面都写入start_urls列表,以便后续调用。
记录下应用Scrapy爬取流程:
#获取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 href 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)
注:
之所以Scrapy未实现“全站”爬取的原因在于网站仅列出各车型50页的数据(每页40条),当某一品牌二手车数量大于2000辆时,后续信息无法获得。(暂未找到解决办法)
02 数据可视化
主要是分析2个信息:
表达的信息都在仪表盘里
保价率=现价/原价
2个结论:
二手车市场上,在品牌和质量方面齐名的"奥宝驰"不仅数量差别明显,在保价率上也是高下立判;日系车保价率居然最高;国产车的质量发展和品牌打造仍然任重而道远。