本文仅供学习交流使用,如侵立删!

二手车之家车辆档案数据爬虫

先上效果图

环境

  • win10
  • python3.9
  • lxml、retrying、requests

需求分析

需求:

主要是需要车辆详情页中车辆档案的数据



先抓包分析一波,网页抓包没有什么有用的,转战APP



拿到数据接口就简单了,直接构造请求保存数据即可

获取车辆信息列表

    def _get_car_list(self, _url: str):
"""
获取二手车信息列表
"""
res = self._parse_url(_url=_url)
ret = res.text # 解析获得字符串类型数据
result = etree.HTML(ret) # 转换数据类型为HTML,方便使用xpath
url_list = result.xpath('//*[@id="goodStartSolrQuotePriceCore0"]/ul/li/a/@href')
if not url_list:
print('获取完成!')
return
for i in url_list:
# 有些车型url直接是带域名的
if 'www.che168.com/' in i:
yield 'https://' + i[2:]
else:
yield 'https://www.che168.com' + i

获取车辆详情信息

    def _get_car_info(self, _url: str):
"""
获取车辆详情信息
"""
res = self._parse_url(_url=_url)
ret = res.text # 解析获得字符串类型数据
result = etree.HTML(ret) # 转换数据类型为HTML,方便使用xpath # 标题
title = result.xpath('//div[@class="car-box"]/h3//text()')
title = title[1].strip() if len(title) > 1 else title[0].strip()
# 上牌时间
play_time = result.xpath('//*[@id="nav1"]/div[1]/ul[1]/li[1]/text()')
play_time = play_time[0].strip() if play_time else '-'
# 表显里程
display_mileage = result.xpath('//*[@id="nav1"]/div[1]/ul[1]/li[2]/text()')
display_mileage = display_mileage[0].strip() if display_mileage else '-'
# 变速箱
gearbox = result.xpath('//*[@id="nav1"]/div[1]/ul[1]/li[3]/text()')
gearbox = gearbox[0].strip() if gearbox else '-'
# 排放标准
emission_standards = result.xpath('//*[@id="nav1"]/div[1]/ul[1]/li[4]/text()')
emission_standards = emission_standards[0].strip() if emission_standards else '-'
# 排量
displacement = result.xpath('//*[@id="nav1"]/div[1]/ul[1]/li[5]/text()')
displacement = displacement[0].strip() if displacement else '-'
# 发布时间
release_time = result.xpath('//*[@id="nav1"]/div[1]/ul[1]/li[6]/text()')
release_time = release_time[0].strip() if release_time else '-'
# 年检到期
annual_inspection_expires = result.xpath('//*[@id="nav1"]/div[1]/ul[2]/li[1]/text()')
annual_inspection_expires = annual_inspection_expires[0].strip() if annual_inspection_expires else '-'
# 保险到期
insurance_expires = result.xpath('//*[@id="nav1"]/div[1]/ul[2]/li[2]/text()')
insurance_expires = insurance_expires[0].strip() if insurance_expires else '-'
# 质保到期
warranty_expires = result.xpath('//*[@id="nav1"]/div[1]/ul[2]/li[3]/text()')
warranty_expires = warranty_expires[0].strip() if warranty_expires else '-'
# 过户次数
number_of_transfers = result.xpath('//*[@id="nav1"]/div[1]/ul[2]/li[5]/text()')
number_of_transfers = number_of_transfers[0].strip() if number_of_transfers else '-'
# 所在地
location = result.xpath('//*[@id="nav1"]/div[1]/ul[2]/li[6]/text()')
location = location[0].strip() if location else '-'
# 发动机
engine = result.xpath('//*[@id="nav1"]/div[1]/ul[3]/li[1]/text()')
engine = engine[0].strip() if engine else '-'
# 车辆级别
vehicle = result.xpath('//*[@id="nav1"]/div[1]/ul[3]/li[2]/text()')
vehicle = vehicle[0].strip() if vehicle else '-'
# 车身颜色
car_color = result.xpath('//*[@id="nav1"]/div[1]/ul[3]/li[3]/text()')
car_color = car_color[0].strip() if car_color else '-'
# 燃油标号
fuel_label = result.xpath('//*[@id="nav1"]/div[1]/ul[3]/li[4]/text()')
fuel_label = fuel_label[0].strip() if fuel_label else '-'
# 驱动方式
drive_mode = result.xpath('//*[@id="nav1"]/div[1]/ul[3]/li[5]/text()')
drive_mode = drive_mode[0].strip() if drive_mode else '-'
data = [[title, play_time, display_mileage, gearbox, emission_standards, displacement, release_time, annual_inspection_expires,
insurance_expires, warranty_expires, number_of_transfers, location, engine, vehicle, car_color, fuel_label, drive_mode, _url]]
print(data)
self._save_csv(data=data)

资源下载

https://download.csdn.net/download/qq_38154948/85358088


本文仅供学习交流使用,如侵立删!

【原创】Python 二手车之家车辆档案数据爬虫的更多相关文章

  1. selenuim自动化爬取汽车在线谷米爱车网车辆GPS数据爬虫

    #为了实时获取车辆信息,以及为了后面进行行使轨迹绘图,写了一个基于selelnium的爬虫爬取了车辆gps数据. #在这里发现selenium可以很好的实现网页解析和处理js处理 #导包 import ...

  2. Python爬取6271家死亡公司数据,一眼看尽十年创业公司消亡史!

    ​ 小五利用python将其中的死亡公司数据爬取下来,借此来观察最近十年创业公司消亡史. 获取数据 F12,Network查看异步请求XHR,翻页. ​ 成功找到返回json格式数据的url, 很多人 ...

  3. Python爬取6271家死亡公司数据,看十年创业公司消亡史

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 朱小五 凹凸玩数据 PS:如有需要Python学习资料的小伙伴可以加 ...

  4. TOP100summit:【分享实录】链家网大数据平台体系构建历程

    本篇文章内容来自2016年TOP100summit 链家网大数据部资深研发架构师李小龙的案例分享. 编辑:Cynthia 李小龙:链家网大数据部资深研发架构师,负责大数据工具平台化相关的工作.专注于数 ...

  5. python3 爬取汽车之家所有车型数据操作步骤(更新版)

    题记: 互联网上关于使用python3去爬取汽车之家的汽车数据(主要是汽车基本参数,配置参数,颜色参数,内饰参数)的教程已经非常多了,但大体的方案分两种: 1.解析出汽车之家某个车型的网页,然后正则表 ...

  6. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

  7. 使用 Python 抓取欧洲足球联赛数据

    Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤    数据的采集和获取    数据的清洗,抽取,变形和装载    数据的分析,探索和预测    ...

  8. 如何用python抓取js生成的数据 - SegmentFault

    如何用python抓取js生成的数据 - SegmentFault 如何用python抓取js生成的数据 1赞 踩 收藏 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓 ...

  9. [原创].NET 分布式架构开发实战之三 数据访问深入一点的思考

    原文:[原创].NET 分布式架构开发实战之三 数据访问深入一点的思考 .NET 分布式架构开发实战之三 数据访问深入一点的思考 前言:首先,感谢园子里的朋友对文章的支持,感谢大家,希望本系列的文章能 ...

随机推荐

  1. Pandas复杂查询、数据类型转换、数据排序

    Pandas高级操作 1.复杂查询 (1)逻辑运算 以DataFrame其中一列进行逻辑计算,会产生一个对应的bool值组成的Series 于是我们可以利用返回的bool列表进行一系列的数据查询 (2 ...

  2. Spring Boot整合Swagger报错:"this.condition" is null

    前段时间看到群里有吐槽swagger整合问题,当时没仔细看,总以为是姿势不对. 这两天正好自己升级Spring Boot版本,然后突然出现了这样的一个错误: Caused by: java.lang. ...

  3. 《Effective C++》阅读总结(三):资源管理

    C++中的资源管理非常重要,在将资源加载到内存后,便可以使用资源了,当我们不再需要资源时,我们要保证其正确的释放,才能将其占用的内存空间归还给操作系统,不正确的释放很容易造成内存泄漏.本章以资源管理类 ...

  4. java继承中关于super关键字和this关键字的使用

    1.super关键字 由于子类不能继承父类的构造方法,因此,如果要调用父类的构造方法,可以使用 super 关键字.super 可以用来访问父类的构造方法.普通方法和属性.super 关键字的功能: ...

  5. unittest自动化测试框架核心要素以及应用

    1. unittest核心要素 unittest介绍 测试框架,不仅仅用于单元测试 python自动的测试包 用法和django.test.TestCase类似 1.1.unitest介绍和核心要素 ...

  6. 优先队列STL

    引入 优先队列是一种特殊的队列,它的功能是--自动排序. 基本操作: q.size(); //返回q里元素个数 q.empty(); //返回q是否为空,空则返回1,否则返回0 q.push(k); ...

  7. JVM 输出 GC 日志导致 JVM 卡住,我 TM 人傻了

    本系列是 我TM人傻了 系列第七期[捂脸],往期精彩回顾: 升级到Spring 5.3.x之后,GC次数急剧增加,我TM人傻了:https://zhuanlan.zhihu.com/p/3970425 ...

  8. 【Spring】AOP实现原理(三):创建代理

    AbstractAutoProxyCreator 在AbstractAutoProxyCreator的wrapIfNecessary方法中,调用getAdvicesAndAdvisorsForBean ...

  9. electron-vue 项目启动动态获取配置文件中的后端服务地址

    前言 最近的项目迭代中新增一个需求,需要在electron-vue 项目打包之后,启动exe 可执行程序的时候,动态获取配置文件中的 baseUrl 作为服务端的地址.electron 可以使用 no ...

  10. 2.如何正确理解古典概率中的条件概率《zobol的考研概率论教程》

    写本文主要是帮助粉丝理解考研中的古典概率-条件概率的具体定义. "B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约 ...