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. 解析数据

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

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

    # 提取车辆信息所对应列表 dataList
    dataList = 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()

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

尾语

🤝 期待与你共同进步

🌱 亲爱的读者,非常感谢你每一次的停留和阅读!你的支持是我们前行的最大动力!🙏

🌐 在这茫茫网海中,有你的关注,我们深感荣幸。你的每一次点赞👍、收藏🌟、评论💬和关注💖,都像是明灯一样照亮我们前行的道路,给予我们无比的鼓舞和力量。🌟

📚 我们会继续努力,为你呈现更多精彩和有深度的内容。同时,我们非常欢迎你在评论区留下你的宝贵意见和建议,让我们共同进步,共同成长!💬

💪 无论你在编程的道路上遇到什么困难,都希望你能坚持下去,因为每一次的挫折都是通往成功的必经之路。我们期待与你一起书写编程的精彩篇章! 🎉

🌈 最后,再次感谢你的厚爱与支持!愿你在编程的道路上越走越远,收获满满的成就和喜悦

关于Python学习指南


如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。

我们还为大家准备了Python资料和副业项目合集,感兴趣的小伙伴快来找我领取一起交流学习哦!

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值