python实战案例——采集二手车数据并分析其价值

news2024/11/18 18:35:07

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

又到了学Python时刻~


环境使用:

  • Python 3.8

  • Pycharm

    • 专业版是付费的 <激活码可以免费用>

    • 社区版是免费的


模块使用:

第三方模块 需要安装的

  • requests >>> pip install requests

  • parsel >>> pip install parsel

  • csv


安装python第三方模块:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

  2. 在pycharm中点击Terminal(终端) 输入安装命令


爬虫基本流程:

一. 数据来源分析

  1. 明确需求:

    • 明确采集网站是什么?

    • 明确采集数据是什么?

      车辆基本信息

  2. 分析 车辆基本信息数据, 具体是请求那个网址可以得到

    通过开发者工具, 进行抓包分析:

    • 打开开发者工具: F12 / 鼠标右键点击检查选择network

    • 刷新网页: 让本网页数据内容重新加载一遍 <方便分析数据出处>

    • 搜索数据来源: 复制你想要的内容, 进行搜索即可

      车辆信息数据

二. 代码实现步骤

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

  2. 获取数据, 获取服务器返回响应数据

    开发者工具: response <网页源代码>

  3. 解析数据, 提取我们想要的数据内容

    • 车辆信息
  4. 保存数据, 把车辆信息保存csv表格里面


代码展示

PS:本篇完整源码如有需要的小伙伴可以加下方的群去找管理员免费领取

采集数据

导入模块

# 导入数据请求模块 --> 第三方模块 需要安装 pip install requests
import requests
# 导入数据解析模块 --> 第三方模块 需要安装 pip install parsel
import parsel
# 导入csv模块 --> 内置模块 不需要安装
import csv

创建文件

f = open('data.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '年份',
    '里程',
    '城市',
    '价格',
    '标签',
    '是否保修',
    '详情页',
])

写入表头

csv_writer.writeheader()

“”"

  1. 发送请求, 模拟浏览器对于url地址发送请求
    • 安装模块: win + R 输入cmd
      输入安装命令: pip install requests

    • 导入模块是灰色, 不是报错, 而是导入模块没有使用

    • 伪装模拟 headers 请求头

      1. 字典数据类型, 要构建完整键值对 <引号位置一定要加对>
      2. 可以直接复制
    • <Response [200]> 响应对象
      200 状态码 表示请求成功

    • 批量替换

      1. 选择替换内容
      2. ctrl + R 输入正则命令即可
        :.*
        ,

“”"

for page in range(1, 51):
    print(f'======================正在采集第{page}页的数据内容======================')

确定请求链接

    # 伪装模拟
    headers = {
        # User-Agent 用户代理 表示浏览器基本身份信息
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    # 发送请求
    response = requests.get(url=url, headers=headers)
    print(response)

“”"

  1. 获取数据, 获取服务器返回响应数据
    开发者工具: response <网页源代码>
    response.text 获取响应文本数据 <网页源代码>
    html字符串数据 --> re正则

  2. 解析数据, 提取我们想要的数据内容
    - 车辆信息

    css选择器: 根据标签属性提取内容
    选择器对象

“”"

    # 把获取下来 response.text 转成 可解析对象
    selector = parsel.Selector(response.text)
    # 第一次提取, 获取所有li标签 ---> 获取所有车辆信息所在标签
    lis = selector.css('.Content_left .gongge_ul li')
    # for循环遍历, 把列表里面元素一个一个提取出来
    for li in lis:
        """
        提取每一个车辆信息具体的数据内容
        .title --> 定位class类名为title的标签
        attr(title) --> 提取标签里面title属性
        get() --> 提取第一个标签数据, 获取一个, 返回字符串
        getall() --> 提取所有的标签数据, 获取多个, 返回列表
        strip() --> 去除字符串左右两端空格
        replace() --> 字符串替换方法 
        """
        title = li.css('.title::attr(title)').get()  # 标题
        car_info = li.css('.gongge_main p i::text').getall()  # 基本信息
        year = car_info[0].replace('年', '')  # 年份
        mileage = car_info[1].replace('万公里', '')  # 里程
        city = car_info[2].strip()  # 城市
        label = li.css('.car_tag em::text').get().strip()  # 标签
        tag = li.css('.tc_label::text').get()  # 保修
        price = li.css('.Total::text').get()  # 价格
        href = li.css('.title::attr(href)').get()  # 详情页
        # 解析出来的数据保存字典里面
        dit = {
            '标题': title,
            '年份': year,
            '里程': mileage,
            '城市': city,
            '价格': price,
            '标签': label,
            '是否保修': tag,
            '详情页': href,
        }
        # 写入数据
        csv_writer.writerow(dit)
        print(title, year, mileage, city, price, label, tag, href)

数据分析


from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c = (
    Pie()
    .add("", [list(z) for z in zip(year_type, year_num)])
    .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
    .set_global_opts(title_opts=opts.TitleOpts(title="年份分布"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_set_color.html")
)
c.render_notebook()

df_title = df.apply(lambda x:x['标题'].split(' ')[0], axis=1)
title_list = df_title.value_counts().index.tolist()[:10]
title_num = df_title.value_counts().tolist()[:10]
from pyecharts import options as opts
from pyecharts.charts import Bar

c = (
    Bar()
    .add_xaxis(title_list)
    .add_yaxis("汽车品牌", title_num)
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
        title_opts=opts.TitleOpts(title="汽车品牌数量前十"),
    )

)
c.render_notebook()


from pyecharts import options as opts
from pyecharts.charts import Liquid

c = (
    Liquid()
    .add("lq", [1-per])
    .set_global_opts(title_opts=opts.TitleOpts(title="保修占比"))
    
)
c.render_notebook()

lable_num = df['标签'].value_counts().tolist()
lable_type = df['标签'].value_counts().index.tolist()
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c = (
    Pie()
    .add("", [list(z) for z in zip(lable_type, lable_num)])
    .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
    .set_global_opts(title_opts=opts.TitleOpts(title="标签分布"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_set_color.html")
)
c.render_notebook()

city_num = df['城市'].value_counts().tolist()[:10]
city_type = df['城市'].value_counts().index.tolist()[:10]
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c = (
    Pie()
    .add("", [list(z) for z in zip(city_type, city_num)])
    .set_colors(["blue", "green", "yellow", "red", "pink", "orange", "purple"])
    .set_global_opts(title_opts=opts.TitleOpts(title="城市前十"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_set_color.html")
)
c.render_notebook()

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker

c = (
    Bar()
    .add_xaxis(city_type)
    .add_yaxis("城市", city_num, color=Faker.rand_color())
    .set_global_opts(
        title_opts=opts.TitleOpts(title="城市分布"),
        datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
    )
   
)
c.render_notebook()
# print(Faker.days_attrs)
# print(Faker.days_values)
# print(Faker.rand_color())


import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Faker

c = (
    Line()
    .add_xaxis(price_list)
    .add_yaxis("价格", price_num)
    .set_global_opts(title_opts=opts.TitleOpts(title="车辆价格"))

)
c.render_notebook()



尾语

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

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

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

最后,博主要一下你们的三连呀(点赞、评论、收藏),不要钱的还是可以搞一搞的嘛~

不知道评论啥的,即使扣个6666也是对博主的鼓舞吖 💞 感谢 💐

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

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

相关文章

【生成对抗网络】GAN生成对抗网络理论知识

GAN生成对抗网络目录引入GeneratorNetwork as Generator为什么要训练Generator&#xff1a;需要输出是分布引入GANBasic Idea of GAN&#xff1a;区分Unconditional generation 与 Conditional generationUnconditional generationConditional generation引入DiscriminatorGene…

基于Bert-Lstm-Crf的命名实体识别(PyTorch 实现)

1 前言 1-1 简介 命名实体识别(NER)是自然语言处理的基础任务&#xff0c;处于工程性任务的上游&#xff0c;很多的下游任务依赖于命名实体识别的效果&#xff0c;所以命名实体识别也是自然语言处理中非常重要的一环。命名实体识别的任务非常简单&#xff0c;给出一段文本&…

MindSpore模型快速调优攻略笔记分享(上)

• 近年来&#xff0c;深度学习技术在语音识别、自然语言处理、计算机视觉、信息检索等任务上取得了突破性进展; • 深度学习模型的复杂度与规模日益扩张&#xff0c;导致模型的调试调优成为了困扰算法工程师的一大难题; • MindSpore是由华为自研的深度学习框架&#xff0c;…

整理收集python面试常见题目

1.多进程和多线程 1.python多进程和多线程看这一篇就够了_T型人小付的博客-CSDN博客 2.多进程和多线程的实现&#xff1a;一文看懂Python多进程与多线程编程(工作学习面试必读) - 知乎 3.多线程的补充&#xff1a;一文看懂Python多进程与多线程编程(工作学习面试必读) - 知乎…

软件测试面试技巧 这么准备,拿下心仪offer不是问题

拥有一个心仪的offer&#xff0c;是每个软件测试工程师们都梦寐以求的事情&#xff0c;那如何才能通过最后的面试一关&#xff0c;拿到offer呢&#xff1f; 俗话说&#xff0c;知己知彼百战不殆&#xff0c;作为测试员&#xff0c;在面试前对面试官可能提出的问题进行总结和准…

UDS - 14.2.1 RoutineControl (31) service

来自&#xff1a;ISO 14229-1-2020.pdf 目录 14.2.1 服务描述 14.2.1.1 概述 14.2.1.2 通过引用routineIdentifier来启动一个例程 14.2.1.3 通过引用routineIdentifier来停止一个例程 14.2.1.4 通过引用routineIdentifier来请求例程结果 14.2.2请求消息 14.2.2.1请求消…

【从零开始学习深度学习】31. 卷积神经网络之残差网络(ResNet)介绍及其Pytorch实现

和之前介绍的批量归一化层作用类似&#xff0c;残差网络&#xff08;ResNet&#xff09;提出的主要目的也是为了优化深度神经网络中数值稳定性问题。 1. 残差块介绍 假设输入为x\boldsymbol{x}x&#xff0c;希望学出的理想映射为f(x)f(\boldsymbol{x})f(x)。下图左右为普通网…

【GO】 K8s 管理系统项目[API部分--Namespace]

K8s 管理系统项目[API部分–Namespace] 1. 接口实现 service/dataselector.go type namespaceCell corev1.Namespacefunc(n namespaceCell) GetCreation() time.Time {return n.CreationTimestamp.Time }func(n namespaceCell) GetName() string {return n.Name }2. Namespa…

景联文科技:赋能智能安防,详谈其中运用到的数据标注类型

“数据显示&#xff0c;2013-2020年我国智能安防行业市场规模由101亿元增长至511亿元。随着智能安防在多个领域的深化应用&#xff0c;预计2023年我国智能安防行业市场规模将超1000亿元。 智能安防领域中,数据标注主要应用于计算机视觉与语音识别两个主要领域&#xff0c;具体…

人口数据可视化,深圳是人口密度最高的城市,东莞上海位居二三名

进入2022年以来&#xff0c;人口问题频频引起热议&#xff0c;人口老龄化、生育意愿再创新低、男女比例失衡等等问题频出。具体的人口问题如何&#xff0c;跟随可视化互动平台的数据可视化大屏一起来了解吧&#xff01; 我国各省人口数量从地图分布图看&#xff0c;广东省、山…

安装Pytorch

太难了 之前在学校就没安装好 各种报错 终于安装好了 浅浅记录一下 撒花撒花 菜鸡经验&#xff1a; 1.本地python 与 Anaconda 是两个独立的东西 2.可直接在Anaconda中创建不同新的虚拟环境以适配不同的需求 3.cuda 的版本与 NVIDIA版本需要一致&#xff0c;与Python环境也需要…

Echarts图表相关知识

一个基于 JavaScript 的开源可视化图表库。目前我们的前端框架中已经集成了Echarts库v5.3.2&#xff09;&#xff0c;使用的时候不需要再次安装&#xff0c;直接使用即可&#xff0c;具体安装方法不再赘述。 有些时候官网的例子不满足我们的需求&#xff0c;这个时候就要求我们…

cq:fast lookup argument

1. 引言 Ariel Gabizon等人2022年论文《cq: Cached quotients for fast lookups》。 lookup argument的核心思想为&#xff1a; 对于特定的quotient多项式&#xff0c;经某种预处理之后&#xff0c;将更易于计算其commitments。 当前的lookup argument系列方案主要有&#…

实拍视频、图片素材库,高质量、免费下载。

这几个网站的实拍素材&#xff0c;质量高&#xff0c;还可以免费下载。 1、菜鸟图库 https://www.sucai999.com/?vNTYwNDUx 菜鸟图库有超多设计类素材&#xff0c;像平面、UI、电商、办公类等等在这个网站都能找到&#xff0c;网站还有很多实拍视频素材&#xff0c;质量很高&a…

k8s集群部署01

k8s集群部署01Kubernetes简介Kubernetes部署节点部署关于yum缓存提示满了&#xff0c;Rhel7换源解决报错解决过程配置文件内容—要自己看链接是否过期集群初始化Kubernetes-kubectl命令出现错误【The connection to the server localhost:8080 was refused - did you specify t…

git chrry pickup

git chrry pickup目录概述需求&#xff1a;设计思路实现思路分析1.java2.转移分支3.git merge4.cherry pick.切换到 master 分支Cherry pick 操作参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;…

基于MVC的在线影票售卖系统/基于ASP.NET的电影院售票系统

摘 要 随着电影院规模的不断扩大&#xff0c;人流数量的急剧增加&#xff0c;有关电影院的各种信息量也在不断成倍增长。面对庞大的信息量&#xff0c;就需要有在线影票售卖系统来提高电影院工作的效率。通过这样的系统&#xff0c;我们可以做到信息的规范管理和快速查询&…

副业项目分享,旧衣回收项目怎么做

大家好&#xff0c;我是蝶衣王的小编&#xff0c;今天分享一个简单的项目 我们每个家庭都有多余的旧衣服。许多人会直接把它们扔进垃圾桶。然而&#xff0c;这里隐藏着巨大的商机。说到这里&#xff0c;每个人都应该想到&#xff1a;旧衣服的回收。 事实上&#xff0c;目前国…

《位图布隆过滤器》

【一】位图的概念 位图&#xff0c;就是用每一个比特位来存放某种状态&#xff0c;适用于海量数据&#xff0c;整数&#xff0c;数据无重复的场景&#xff0c;通常是用来判断某个数据存不存在的。例如&#xff1a;10个整数本应该存放四十个字节&#xff0c;此时用位图只需要十…

Ajax(JavaWebAjax、源生Ajax、跨域)

1.JavaWeb - Ajax 概念&#xff1a;AJAX&#xff08;Asynchronous Java JavaScript And Xml &#xff09;&#xff1a;异步的JavaScript和Xml AJAX作用&#xff1a; 与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 使用…