Golang爬虫 爬取汽车之家 二手车产品库

原文地址:爬取汽车之家 二手车产品库
项目地址:https://github.com/go-crawler...html

目标

最近常常有人在耳边提起汽车之家,也好奇二手车在国内的价格是怎么样的,所以本次的目标站点是 汽车之家 的二手车产品库git

image

分析目标源:github

  • 一页共24条
  • 含分页,但这个老产品库,在100页后会存在问题,所以咱们爬取99页
  • 能够获取所有城市
  • 共可爬取 19w+ 数据

开始

爬取步骤golang

  • 获取所有的城市
  • 拼装所有城市URL入队列
  • 解析二手车页面结构
  • 下一页URL入队列
  • 循环拉取全部分页的二手车数据
  • 循环拉取队列中城市的二手车数据
  • 等待,肯定队列中无新的 URL
  • 爬取的二手车数据入库

获取城市

image

经过页面查看,可发如今城市筛选区可获得所有的二手车城市列表,可是你仔细查阅代码。会发现它是JS加载进来的,城市也统一放在了一个变量中app

image

有两种提取方法spa

  • 分析JS变量,提取出来
  • 直接将 areaJson 复制出来做为变量解析

在这里咱们直接将其复制粘贴出来便可,由于这是比较少变更的值3d

获取分页

image

经过分析页面能够得知分页连接是有必定规律的,例如:/2sc/hangzhou/a0_0msdgscncgpi1ltocsp2exb4/,能够发现 sp%dsp 后面为页码code

按照常理,能够经过预测全部分页连接,推入队列后 go routine 一波 便可快速拉取htm

可是在这老产品库存在一个问题,在超过 100 页后,下一页永远是 101 页 blog

image

所以咱们采起比较传统的作法,经过拉取下一页的连接去访问,以便适应可能的分页连接改变; 100 页之后的分页展现也很奇怪,先忽视

获取二手车数据

页面结构较为固定,常规的清洗 HTML 便可

func GetCars(doc *goquery.Document) (cars []QcCar) {
    cityName := GetCityName(doc)
    doc.Find(".piclist ul li:not(.line)").Each(func(i int, selection *goquery.Selection) {
        title := selection.Find(".title a").Text()
        price := selection.Find(".detail .detail-r").Find(".colf8").Text()
        kilometer := selection.Find(".detail .detail-l").Find("p").Eq(0).Text()
        year := selection.Find(".detail .detail-l").Find("p").Eq(1).Text()

        kilometer = strings.Join(compileNumber.FindAllString(kilometer, -1), "")
        year = strings.Join(compileNumber.FindAllString(strings.TrimSpace(year), -1), "")
        priceS, _ := strconv.ParseFloat(price, 64)
        kilometerS, _ := strconv.ParseFloat(kilometer, 64)
        yearS, _ := strconv.Atoi(year)

        cars = append(cars, QcCar{
            CityName: cityName,
            Title: title,
            Price: priceS,
            Kilometer: kilometerS,
            Year: yearS,
        })
    })

    return cars
}

数据

image

image

在各城市的平均价格对比中,咱们能够发现北上广深里的北京、上海、深圳都在榜单上,而近年势头较猛的杭州直接占领了榜首,且后几名都有一些距离

而其余城市大体都是梯级降低的趋势,看来一线城市的二手车也是不便宜了,固然这只是均价

image

咱们能够看到价格和千米数的对比,上海、成都、郑州的等比差别是有点大,感受有需求的话能够在价格和千米数上作一个衡量

image

这图有点儿有趣,粗略的统计了一下总千米数。在前几张图里,平均价格排名较高的通通没有出如今这里,反却是呼和浩特、大庆、中山等出如今了榜首

是否侧面反应了一线城市的车辆更新换代较快,而较后的城市的车辆却是换代较慢,千米数基本都杠杠的

image

经过对标题的分析,能够得知车辆产品库的命名基本都是品牌名称+自动/手动+XXXX款+属性,看标题就能知道个概况了

参考

爬虫项目地址

相关文章
相关标签/搜索