Python采集二手车数据信息实现数据可视化展示

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

环境使用:

  • Python 3.10

  • Pycharm

模块使用:

  • requests >>> pip install requests

  • csv

数据可视化:

  • pandas >>> pip install pandas

  • pyecharts >>> pip install pyecharts

爬虫实现基本流程

你要获取什么数据 -> 你要获取的数据在哪?

一. 数据来源分析
  1. 明确需求

    明确采集的网站以及数据内容

    网址: https://changsha.yiche.taocheche.com/buycar/pges9bxcdzaoqtrnml/

    数据: 车辆信息: 车型 价格 公里数 城市…

  2. 抓包分析

    通过浏览器开发者工具进行分析, 我们想要的数据内容可以请求那个网站能够得到

    • 打开开发者工具

      F12 / 右键点击检查选择network (网络)

    • 刷新网页

      让网页的数据内容重新加载一遍 (才能在开发者中看到对应数据包)

    • 通过关键字搜索找到对应数据包位置

    • 数据包地址: https://proconsumer.taocheche.com/c-car-consumer/carsource/getUcarLo
      calList

二. 代码实现步骤

导入模块

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:926207505
'''
# 导入数据请求模块
import requests
# 导入格式化输出模块
from pprint import pprint
# 导入csv模块
import csv
  1. 保存数据

    保存表格文件: csv / Excel

f = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['标题','品牌','车型','年份','里程','城市','售价','首付',
])
csv_writer.writeheader()
  1. 发送请求

    模拟浏览器对于url地址发送请求

    • 模拟浏览器: 一种简单反反爬手段 (字典)

      可以直接在开发者工具中复制 -> 点击数据包 -> 标头(headers) -> 请求标头(request
      headers) -> User-Agent (UA)

    • 请求网址

    • 发送请求

      请求方法: GET / POST

      GET: 是向服务器获取数据

      POST: 是需要向服务器提交表单参数

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:926207505
'''
# 模拟浏览器
headers = {# User-Agent 用户代理, 表示浏览器基本身份信息'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
}
# 请求网址
url = 'https://proconsumer.taocheche.com/c-car-consumer/carsource/getUcarLocalList'
for page in range(1, 101):print(f'============正在采集第{page}页的数据内容============')# 请求参数data = {"liveSwitch":1,"terminal":40,"aggreCarSeries":0,"aggreCarbrands":0,"bangMai":"false","bangMaiChe":"false","baseScore":0,"bigArea":0,"brandId":0,"brandPro":0,"canNonLocal":2,"carAgeId":0,"carBasicId":0,"carLevel":0,"carType":0,"cityId":1301,"color":0,"commonFlag":4,"country":0,"curCity":0,"customizeSortFlag":0,"days":0,"directSaleCar":0,"distanceKm":0,"districtId":0,"drivingMileageId":0,"exhaust":0,"financialPriceHigh":0,"financialPriceLower":0,"firstPic":0,"gearBoxType":0,"highAge":0,"highDrivingMileage":0,"highPrice":0,"isAuthenticated":0,"isCarId":0,"isCheckReportJson":0,"isDealerAuthorized":0,"isDealerRecommend":0,"isExcludeYDG":0,"isJDActivity":0,"isLicensePhoto":0,"isLicensed":0,"isNeglect":0,"isNewCar":0,"isShowMr":0,"isShowRecom":0,"isVideo":0,"isWarranty":0,"level":0,"licenseCityId":0,"liveBroadcast":0,"loanFirstPayHigh":0,"loanFirstPayLower":0,"loanMonthPayHigh":0,"loanMonthPayLower":0,"loanUserid":0,"lowAge":0,"lowDrivingMileage":0,"lowPrice":0,"mainBrandId":0,"newCarHighPrice":0,"newCarLowPrice":0,"noAudit":"false","notCity":0,"notUcarID":0,"orderDirection":0,"pageIndex":page,"pageSize":20,"picCount":0,"price":0,"provinceId":0,"publishTimeStatus":0,"purchaseCityId":0,"regions":"false","requestReferer":0,"requestSource":0,"returnCaryears":"false","score":0,"scorePerformance":0,"seatNumHigh":0,"seatNumLower":0,"seriesId":0,"showPosition":0,"siteIds":"5","sortBoostFlag":0,"sourceType":0,"splitFlowAlgorithm":"","startNum":0,"supperiorId":0,"uCarID":0,"uCarStatus":"1","useBlackUserList":"false","userID":0,"userType":1001,"warrantyType":0}# 发送请求response = requests.post(url=url, json=data, headers=headers)
  1. 获取数据

    获取服务器返回响应数据

    • response.text

      获取响应文本数据 (字符串)

    • response.json()

      获取响应json数据 (字典) 必须是完整json数据格式

    • response.content

      获取响应二进制数据 常用于保存数据 (图片 / 音频 / 视频 / 特定格式文件…)

    json_data = response.json()
  1. 解析数据

    根据第二步: 获取响应数据 -> 返回字典数据类型

    提取数据: 根据键值对取值即可

    # 提取车辆信息所对应列表 dataListdataList = json_data['data']['uCarBasicInfoList']['dataList']# for循环遍历, 提取列表里面每个元素for index in dataList:# 提取具体车辆信息内容, 保存字典里面# dit 自定义变量名 (取昵称)dit = {'标题': index['showShortTitle'],'品牌': index['mainBrandName'],'车型': index['serialName'].replace(index['mainBrandName'], ''),'年份': index['buyCarYear'],'里程': index['drivingMileageText'].replace('万公里', ''),'城市': index['purchaseCityName'],'售价': index['activityPrice'],'首付': index['loanFirstPayText'].replace('万', ''),}csv_writer.writerow(dit)print(dit)

数据可视化

一般用 jupyter 进行写代码

  • jupyter notebook

    如果你安装的anaconda自带

    如果你安装的python, 则需要在cmd中安装jupyter

    pip install jupyter notebook

import pandas as pd
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
df = pd.read_csv('data.csv')
df.head()
  • 可视化官方文档: https://gallery.pyecharts.org/#/README
'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:926207505
'''
# 导入配置项目
from pyecharts import options as opts
# 导入饼图
from pyecharts.charts import Pie
# 导入随机生成数据
from pyecharts.faker import Faker
info = df['品牌'].value_counts().index.to_list()
num = df['品牌'].value_counts().to_list()
# 图形配置
c = (Pie().add("",[list(z)for z in zip(info, # 数据num,)],center=["40%", "50%"],).set_global_opts(# 标题title_opts=opts.TitleOpts(title="二手车品牌占比分布情况"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 保存可视化效果 为 html文件# .render("pie_scroll_legend.html")
)
# 展示在jupyter 上面
c.load_javascript()
c.render_notebook()

# 导入配置项目
from pyecharts import options as opts
# 导入饼图
from pyecharts.charts import Pie
# 导入随机生成数据
from pyecharts.faker import Faker
info = df['城市'].value_counts().index.to_list()[:10]
num = df['城市'].value_counts().to_list()[:10]
# 图形配置
c = (Pie().add("",[list(z)for z in zip(info, # 数据num,)],center=["40%", "50%"],).set_global_opts(# 标题title_opts=opts.TitleOpts(title="二手车Top10城市占比分布情况"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 保存可视化效果 为 html文件# .render("pie_scroll_legend.html")
)
c.render_notebook()

# 导入配置项目
from pyecharts import options as opts
# 导入饼图
from pyecharts.charts import Pie
# 导入随机生成数据
from pyecharts.faker import Faker
info = df['车型'].value_counts().index.to_list()[:10]
num = df['车型'].value_counts().to_list()[:10]
# 图形配置
c = (Pie().add("",[list(z)for z in zip(info, # 数据num,)],center=["40%", "50%"],).set_global_opts(# 标题title_opts=opts.TitleOpts(title="二手车Top10车型占比分布情况"),legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))# 保存可视化效果 为 html文件# .render("pie_scroll_legend.html")
)
c.render_notebook()

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:926207505
'''
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker
info = df['车型'].value_counts().index.to_list()[:10]
num = df['车型'].value_counts().to_list()[:10]c = (Line().add_xaxis(info).add_yaxis("车型", num, is_connect_nones=True).set_global_opts(title_opts=opts.TitleOpts(title="二手车Top10车型折线图"))# .render("line_connect_null.html")
)
c.render_notebook()

如果文章看不懂,我还准备了视频教程,同样文末名片获取噢~

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/705783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自学Python第十五天-常用的HTML解析工具:bs4、xpath、re

自学Python第十五天-常用的HTML解析工具:bs4、xpath、re BS4安装和引入开始使用find_all() 方法获取标签find() 方法获取标签select() 方法获取标签,css 选择器从标签中获取数据 XPathxpath 基础xpath 语法规则lxml 模块xpath() 方法 REmatch() 方法sear…

创建shel脚本 -- 自动备份用户文件

文章目录 1 按天自动备份(归档)文件1.1 准备工作1.2 编写配置文件和归档脚本1.2.1 编写配置文件1.2.2 编写归档脚本 1.3 运行脚本1.4 运行分析1.5 添加到cron表中1.5.1 编辑cron表1.5.2 测试脚本是否可用 2 按小时自动备份(归档)文…

git配置SSH

gitLab在Cenos7中安装,在Cenos7系统中执行以下操作 1.生成SSH ssh-keygen -t rsa -C xxxxxx.com 然后一路回车,直到出现以下界面为止(-C 参数是邮箱地址) 2.复制SSH 打开/root/.ssh/id_rsa.pub文件,复制其中的内容 在Linux系统中,/root/.…

初谈软件工程(一)

我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中,兰州交通大学可能并不显眼,似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而,在甘肃省的教育领域中,它无疑是一座璀璨的明珠,名列前茅…

使用R语言进行主成分和因子分析

一、数据描述 数据来源2013年各地区水泥制造业规模以上企业的各主要经济指标,原始数据来源于2014年(《中国水泥统计年鉴》),试对用主成分和因子进行经济效益评价。 地区,企业个数(亿元),流动资产合计&…

半监督节点分类-graph learning

半监督节点分类相当于在一个图当中,用一部分节点的类别上已知的,有另外一部分节点的类别是未知的,目标是使用有标签的节点来推断没有标签的节点 注意 半监督节点分类属于直推式学习,直推式学习相当于出现新节点后,需要…

游戏服务器业务线程模型探究

游戏服务器业务线程模型是指在游戏服务器中,如何组织和管理线程来处理游戏业务逻辑,尽可能减少不必要的锁竞争。以下介绍几种常见的游戏服务器线程模型。 使用线程组为每个玩家分配线程 这里使用线程组,而不是线程池,主要是为了强调线程池在处理任务自主权比较弱。我们通…

pytest-配置项目不同环境URL

pytest自动化中,在不同环境进行测试,可以将项目中的url单独抽取出来,通过pytest.ini配置文件实现(类似postman中的“Environments”) 使用步骤: 1)安装pytest-base-url插件 pytest-base-url …

阿里云国际云解析DNS如何开启/关闭流量分析?

流量分析服务会涉及产生日志费用,所以开通内网DNS解析服务后,默认不会主动开启流量分析,需要您手动开启流量分析。对于未开启流量分析的用户,进入界面会提示您展示的都是模拟数据,您可以点击开启流量分析服务&#xff…

C语言中的动态数组:原理、实现与应用

引言 在C语言的世界里,静态数组虽然方便易用,但其固定的大小限制了其适应灵活变化的数据场景的能力。相比之下,动态数组作为一种能够在运行时动态调整容量的数组结构,极大地提升了程序处理可变规模数据集的效率和便利性。本文将深…

【PHP进阶】Redis管道技术的实际运用

大家好,我是程序员若风,又到了技术分享时刻。 今天我们来讲讲Redis管道技术 Redis管道技术介绍 Redis流水线技术是一种通过同时发出多个命令来提高性能的技术,而无需等待对每个单独命令的响应。大多数Redis客户端都支持流水线操作。 – 官网…

【pytorch】常用代码

文章目录 条件与概率torch.tensor()torch.rand()torch.randn()torch.randint()torch.multinominal() 逻辑运算torch.argmax()torch.max()torch.sum()torch.tanh()torch.pow() 功能性操作 torch.nn.functionalF.normalize()F.elu()F.relu()F.softmax() 张量计算torch.zeros()tor…

基于JavaWeb实现的校园新闻发布系统

一、系统架构 前端:jsp | bootstrap | js | css 后端:springboot | jdbc 环境:jdk1.6 | mysql | maven 二、 代码及数据库 三、功能介绍 01. web端-首页 02. web端-新闻列表 03. web端-新闻明细 04. 管理端-登录页…

数据可视化引领智慧工业新时代

在智慧工业的大潮中,数据可视化崭露头角,以其直观、清晰的方式赋能工业生产,为智慧工业的高效运转提供了强有力的支持。下面我就以可视化从业者的角度,简单聊聊这个话题。 数据可视化首先在智慧工业的生产监控中大显身手。通过将…

Vue3前端实现一个本地消息队列(MQ), 让消息延迟消费或者做缓存

MQ功能实现的具体代码(TsMQ.ts): import { v4 as uuidx } from uuid;import emitter from /utils/mitt// 消息类 class Message {// 过期时间,0表示马上就消费exp: number;// 消费标识,避免重复消费tag : string;// 消息体body : any;constr…

手机打开 第三方 “微信、快手、QQ、电话、信息” 等

前期回顾 Vue3 TS Element-Plus —— 项目系统中封装表格搜索表单 十分钟写五个UI不在是问题_vue3 封装table 配置表格-CSDN博客https://blog.csdn.net/m0_57904695/article/details/135538630?spm1001.2014.3001.5501 目录 🤖 下载App如下图所示:…

HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)(A,B,C,D,E,F,G)

看不懂的英文,题意很难理解,这场还是有点难度的。 C需要处理,D是不太明显的dijikstra,E是线段树优化dp,F是个不好想的线段树,主席树应该也能做。 我觉得讲的很好的宝藏up主->B站视频讲解。之后会比较忙…

10 款数据恢复软件功能和有效性对比(2024 年更新)

数据丢失可能是一种痛苦的经历,无论是由于意外删除、硬件故障还是软件损坏。值得庆幸的是,数字时代带来了强大的数据恢复解决方案。 随着我们进入 2024 年,市场上充斥着旨在有效检索丢失数据的先进软件。在本文中,我们将探讨 2024…

Java WEB面试系列-02

1. Servlet 中如何获取 Session 对象? 使用HttpServletRequest对象的getSession方法获取session,通过getCookies获取Cookie。 2. Servlet 中过滤器有什么作用? Servlet监听器对特定的事件进行监听,当产生这些事件的时候,会执行监听器的代码。可以对应用的加载、卸载,对…

代码随想录 Leetcode494. 目标和

题目: 代码(首刷看解析 2024年2月26日) 思路:根据题意,设两个背包,packageA存放前面是""的数字之和,packageB存放前面是“-”的数字之和 则sum packageA packageB; target packageA - packag…