Python爬虫+数据分析:爬一爬那个很懂车的网站,分析一下现阶段哪款车值得我们去冲

news/2024/5/14 6:21:13/文章来源:https://blog.csdn.net/fei347795790/article/details/121516389

文章目录

  • 一、写在前面
  • 二、准备工作
    • 1、知识点
    • 2、使用的软件
    • 3、第三方库
  • 三、大致流程
  • 四、代码展示分析
    • 1、爬虫部分
      • 1.1 代码展示
    • 2、效果展示
      • 2.1 爬取中
      • 2.2 保存的数据
    • 3、数据分析部分
      • 3.1 导入模块
      • 3.2 Pandas数据处理
      • 3.3 Pyecharts可视化
      • 3.4 二手车推荐
    • 4、数据分析代码运行

一、写在前面

兄弟们,你们的热情让我都不敢断更了,冲!
在这里插入图片描述
爬妹子什么的,虽然大家都很喜欢,但是也不能经常去爬对吧,身体重要,当然如果你们有什么好的网站,都可以推荐下,下次我爬完了给你们分享~
在这里插入图片描述
网友:其实就是你自己想看吧
在这里插入图片描述

二、准备工作

1、知识点

  • requests 发送网络请求
  • parsel 解析数据
  • csv 保存数据

2、使用的软件

  • 环境版本: python3.8
  • 编辑器版本:pycharm2021.2

不会安装软件的看我之前发的:Python入门合集
Python安装/环境配置/pycharm安装/基本操作/快捷键/永久使用都有

3、第三方库

  • requests
  • parsel
    这些是需要安装的第三方库,直接pip安装就好了。
    pip install requests
    pip install parsel

安装慢就使用镜像源安装
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/
镜像源有很多,我这里用的清华的。

实在不会安装模块看我以前的文章:Python安装第三方模块及解决pip下载慢/安装报错

三、大致流程

  1. 找到 目标网址
    https://www.dongchedi.com/usedcar/x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x?sh_city_name=%E5%85%A8%E5%9B%BD&page=1
    a 确定我们要采集的目标 年份 品牌…
    b 确定数据来源 (静态页面True 和 动态页面)
  2. 发送请求
  3. 获取数据 html网页源代码
  4. 解析数据 re css xpath bs4 …
  5. 保存数据
  6. 数据分析 简单的数据可视化 推荐功能
    工具是不一样的 anaconda(python解释器) 里面的 jupyter notebook

四、代码展示分析

1、爬虫部分

1.1 代码展示

import requests     # 发送网络请求
import parsel       # 解析数据
import csv          # 保存数据csv_dcd = open('dcd.csv', mode='a', encoding='utf-8', newline='')
csv_write = csv.writer(csv_dcd)
csv_write.writerow(['品牌', '车龄', '里程(万公里)', '城市', '认证', '售价(万元)', '原价(万元)', '链接'])
for page in range(1, 168):# 1. 找到 目标网址url = f'https://www.dongchedi.com/usedcar/x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x?sh_city_name=%E5%85%A8%E5%9B%BD&page={page}'# 2. 发送请求# 3. 获取数据 html网页源代码# <Response [200]>: 请求成功的状态码 访问这个网站成功了html_data = requests.get(url).text# 4. 解析数据 re css xpath bs4 ...selector = parsel.Selector(html_data)# get(): 获取一个# getall(): 获取全部lis = selector.css('#__next > div:nth-child(2) > div.new-main.new > div > div > div.wrap > ul li')for li in lis:# 二次提取# ::text: 提取文本内容# 品牌title = li.css('a dl dt p::text').get()# 信息 年份 里程 城市# :nth-child(2):伪类选择器info = li.css('a dl dd:nth-child(2)::text').getall()# info  列表里面有两个元素# 列表合并为字符串info_str = ''.join(info)# 字符串的分割info_list = info_str.split('|')car_age = info_list[0]mileage = info_list[1].replace('万公里', '')city = info_list[2].strip()# 链接link = 'https://www.dongchedi.com' + li.css('a::attr(href)').get()dds = li.css('a dl dd')# 如果当前 有 4个dd标签if len(dds) == 4:# 懂车帝认证dcd_auth = li.css('a dl dd:nth-child(3) span::text').get()price = li.css('a dl dd:nth-child(4)::text').get()original_price = li.css('a dl dd:nth-child(5)::text').get()else:dcd_auth = '无认证'price = li.css('a dl dd:nth-child(3)::text').get()original_price = li.css('a dl dd:nth-child(4)::text').get()price = price.replace('万', '')original_price = original_price.replace('新车含税价: ', '').replace('万', '')print(title, car_age, mileage, city, dcd_auth, price, original_price, link)csv_write.writerow([title, car_age, mileage, city, dcd_auth, price, original_price, link])
csv_dcd.close()

2、效果展示

2.1 爬取中

用pycharm打印出来有点乱码,它这个地方是有字体加密了,加密的部分就不显示,解密今天就先不分享了。
在这里插入图片描述

2.2 保存的数据

这是保存在Excel里面的数据,等下分析就分析这里面保存好的数据。
在这里插入图片描述

3、数据分析部分

3.1 导入模块

import pandas as pd
from pyecharts.charts import *
from pyecharts.commons.utils import JsCode
from pyecharts import options as opts

pyecharts 没有的话需要安装一下

3.2 Pandas数据处理

3.21 读取数据

df = pd.read_csv('dcd.csv', encoding = 'utf-8')
df.head()

在这里插入图片描述

3.22 查看表格数据描述

df.describe()

在这里插入图片描述
一共有10000条数据

3.23 查看表格是否有数据缺失

df.isnull().sum()

在这里插入图片描述

3.3 Pyecharts可视化

3.31 Pyecharts可视化

counts = df.groupby('城市')['品牌'].count().sort_values(ascending=False).head(20)
bar=(Bar(init_opts=opts.InitOpts(height='500px',width='1000px',theme='dark')).add_xaxis(counts.index.tolist()).add_yaxis('城市二手车数量',counts.values.tolist(),label_opts=opts.LabelOpts(is_show=True,position='top'),itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1,[{offset: 0,color: 'rgb(255,99,71)'}, {offset: 1,color: 'rgb(32,178,170)'}])"""))).set_global_opts(title_opts=opts.TitleOpts(title='各个城市二手车数量柱状图'),xaxis_opts=opts.AxisOpts(name='书籍名称',type_='category',                                           axislabel_opts=opts.LabelOpts(rotate=90),),yaxis_opts=opts.AxisOpts(name='数量',min_=0,max_=1400.0,splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dash'))),tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross')).set_series_opts(markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_='average',name='均值'),opts.MarkLineItem(type_='max',name='最大值'),opts.MarkLineItem(type_='min',name='最小值'),]))
)
bar.render_notebook()

可以看到成都的二手车数量是最多的,远超第二。
在这里插入图片描述

3.32 各省市二手车平均价格柱状图

means = df.groupby('城市')['售价(万元)'].mean().astype('int64').head(20)
bar=(Bar(init_opts=opts.InitOpts(height='500px',width='1000px',theme='dark')).add_xaxis(means.index.tolist()).add_yaxis('城市二手车平均价格',means.values.tolist(),label_opts=opts.LabelOpts(is_show=True,position='top'),itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1,[{offset: 0,color: 'rgb(255,99,71)'}, {offset: 1,color: 'rgb(32,178,170)'}])"""))).set_global_opts(title_opts=opts.TitleOpts(title='各个城市二手车平均价格柱状图'),xaxis_opts=opts.AxisOpts(name='城市名称',type_='category',                                           axislabel_opts=opts.LabelOpts(rotate=90),),yaxis_opts=opts.AxisOpts(name='平均价格',min_=0,max_=40.0,splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dash'))),tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross')).set_series_opts(markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_='average',name='均值'),opts.MarkLineItem(type_='max',name='最大值'),opts.MarkLineItem(type_='min',name='最小值'),]))
)
bar.render_notebook()

不过价格的话,成都就比较平均,帝都遥遥领先。
在这里插入图片描述

3.33 二手车品牌占比情况

dcd_pinpai = df['品牌'].apply(lambda x:x.split(' ')[0])
df['品牌'] = dcd_pinpai
pinpai = df['品牌'].value_counts()
pinpai = pinpai[:5]
datas_pair_1 = [[i, int(j)] for i, j in zip(pinpai.index, pinpai.values)]
datas_pair_1
pie1 = (Pie(init_opts=opts.InitOpts(theme='dark',width='1000px',height='600px')).add('', datas_pair_1, radius=['35%', '60%']).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%")).set_global_opts(title_opts=opts.TitleOpts(title="懂车帝二手车\n\n数量占比区间", pos_left='center', pos_top='center',title_textstyle_opts=opts.TextStyleOpts(color='#F0F8FF',font_size=20,font_weight='bold'),))
)
pie1.render_notebook() 

以宝马奥迪这几款车型来看,二手车品牌占比情况,宝马比奥迪胜出一筹。
在这里插入图片描述

2.34 二手车里程区间

def tranform_price(x):if x <= 5.0:return '0~5万公里'elif x <= 10.0:return '5~10万公里'elif x <= 15.0:return '10~15万公里'elif x <= 20.0:return '15~20万公里'else:return '20万公里以上'
df['里程分级'] = df['里程(万公里)'].apply(lambda x:tranform_price(x))
price_1 = df['里程分级'].value_counts()
datas_pair_1 = [(i, int(j)) for i, j in zip(price_1.index, price_1.values)]
pie1 = (Pie(init_opts=opts.InitOpts(theme='dark',width='1000px',height='600px')).add('', datas_pair_1, radius=['35%', '60%']).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%")).set_global_opts(title_opts=opts.TitleOpts(title="懂车帝二手车\n\n里程占比区间", pos_left='center', pos_top='center',title_textstyle_opts=opts.TextStyleOpts(color='#F0F8FF',font_size=20,font_weight='bold'),))
)
pie1.render_notebook() 

基本上都是10公里以内的里程,还是非常有搞头的。看得我都想去冲两台了~
在这里插入图片描述

3.4 二手车推荐

k_list = []
the_list = []
keyword = input('请输入品牌:')
data5 = df.loc[df['品牌'].str.contains(str(keyword))]
keyword1 = eval(input('请输入里程(万公里)上限:'))
data6 = data5[data5['里程(万公里)'] <= keyword1]
city = input('请输入城市:')
data7 = data6[data6['城市'] == str(city)]
day1 = eval(input('请输入售价(万元)下限:'))
day2 = eval(input('请输入售价(万元)上限:'))
data8 = data7[(data7['售价(万元)']>=day1)&(data7['售价(万元)']<=day2)]
data8

哈哈 长沙居然没有奥迪 ,不给力啊
在这里插入图片描述

4、数据分析代码运行

数据分析代码的话,一般都是ipynb格式的,对于刚学数据分析的兄弟来说,就比较迷茫了,我简单分享下。

首先打开我们存放代码的文件夹,然后在地址栏输入 jupyter notebook 然后按回车。
在这里插入图片描述
如果你实在找不到代码存放的位置,右键点击代码打开属性。
在这里插入图片描述
比如我是放在C:\Users\Administrator\Desktop
然后打开一个新的文件窗口,把这个地址粘贴进去按回车进入这个位置。在这里插入图片描述继续前面讲的,我们按回车之后就会弹出这个窗口。
在这里插入图片描述找到你要运行的代码点进去就打开这个代码了
在这里插入图片描述运行都是一样的 点 run 就好了,运行之前你下载的数据一定要准备好,没数据怎么分析呢,对吧~在这里插入图片描述

兄弟们,文章看不会的话,我把视频教程放在评论区置顶了。

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

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

相关文章

Python爬虫:二十行代码获取某知名网站高质量视频,带视频讲解

文章目录一、写在前面二、爬虫原理三、案例实现四、视频讲解一、写在前面 兄弟们&#xff0c;自从上次爬虫热门后&#xff0c;我就没发高质量爬虫了&#xff0c;看的人都少了&#xff0c;唉~ 原来你们都是这样的人 二、爬虫原理 作用: 批量获取互联网数据(文本, 图片, 音频…

死党暗恋校花失败,我爬了这个网站发给他分分钟治愈,男人的快乐往往很简单(每天一遍,忘却初恋)

死党一直暗恋校花&#xff0c;但是校花对他印象也不差&#xff0c;就是死党一直太怂了&#xff0c;不敢去找校花&#xff0c;直到昨天看到校花登上了校董儿子的豪车&#xff0c;死党终于彻底死心&#xff0c;大醉一场&#xff0c;作为他的兄弟&#xff0c;我怎么能看他郁郁不振…

要不是这个沙雕网站,我这辈子都见不到这么多沙雕网站!

点击上方SQL数据库开发&#xff0c;关注获取SQL视频教程SQL专栏SQL数据库基础知识汇总SQL数据库高级知识汇总来源&#xff1a;差评&#xff08;chaping321&#xff09;到目前为止&#xff0c; 大多数已知的网站已经得到了网民们详细的解读。功能详尽的同城网站&#xff0c;仿佛…

为了防止这个网站消失,我连夜用Python离线了上万张图片

文章目录吐槽一下事前准备1、环境配置**2、模块使用3、如何配置pycharm里面的python解释器?4、pycharm如何安装插件?5、基本流程代码解析1、模块导入2、发送请求3、获取数据4、解析数据5、保存数据吐槽一下 之前好多高质量网站都不见了&#xff0c;肯定是你们整活整多了&…

除了 P 站,程序员居然还喜欢上这些网站?快来摸鱼呀!

说到p站&#xff0c;估计不知道的人已经很少了&#xff0c;除了p站还有哪些站&#xff1f;应该很多人思考过这个问题了 二次元可是有ABCDEFGHJKNMT站…等等诸多圣地的&#xff01;外面的世界很精彩&#xff0c;别抱着一个站啃了~ 1、A站 Acfun AcFun&#xff0c;中国第一家…

干货 | 程序员必备的16个实用的网站

最近看到很多网友分享了好多比较酷炫的网站&#xff0c;好多都放进小艾的收藏夹了&#xff0c;(__) 嘻嘻……看的我也忍不住想分享了&#xff0c;因为是IT行业&#xff0c;所以分享几个收集的比较实用而且酷炫的网站O(∩_∩)O~ 1.“Hello World”大全 网站一共收集了大约481种…

别去送si了!Selenium 与 Puppeteer 能被网站探测的几十个特征

很多人喜欢使用Selenium 或者 Puppeteer(Pyppeteer)通过模拟浏览器来编写爬虫&#xff0c;自以为这样可以不被网站检测到&#xff0c;想爬什么数据就爬什么数据。 但实际上&#xff0c;Selenium 启动的浏览器&#xff0c;有几十个特征可以被网站通过 JavaScript 探测到。Puppe…

Yii2.0 网站开发流程记录 反馈网页统计

2019独角兽企业重金招聘Python工程师标准>>> 这里不再多说&#xff0c;欢迎各位踊跃提意见&#xff0c;书籍第一部分草稿在&#xff1a; http://download.csdn.net/detail/bubifengyun/9541785 后续还在添加中。 谢谢。转载于:https://my.oschina.net/bubifengyun/b…

java 企业门户网站 源码 自适应响应式 freemarker 静态引擎 html5 SSM

前台&#xff1a; 支持五套模版&#xff0c; 可以在后台切换系统介绍&#xff1a;1.网站后台采用主流的 SSM 框架 jsp JSTL&#xff0c;网站后台采用freemaker静态化模版引擎生成html2.因为是生成的html&#xff0c;所以访问速度快&#xff0c;轻便&#xff0c;对服务器负担小3…

我的天,适合程序员的史上醉强“摸鱼”网站!!!

分享8个提升学习能力以及工作效率的神奇网站&#xff0c;谁用谁知道。 1、 IData-知识检索 大学生涯中大家都会用到各种文献资料往往都是从知网下载的&#xff0c;但如果不在学校或者学校没有购买知网权限&#xff0c;我们就需要一个新的文献下载工具——IData。 如果需要查询相…

Crazy!这个算法可视化网站真的是太棒了!

最近在学习算法的时候&#xff0c;发现一个非常不错的编程网站&#xff0c;特别适合学习算法&#xff0c;感官体验十分不错。 这个网站是「VisuAlgo」&#xff0c;它是一个算法可视化网站。 谁这么良心&#xff0c;免费搞这么优质的动画算法教程网站呢&#xff1f; 这个网站是…

使用LNMP架构部署动态网站环境。 Linux+PHP

1、配置php服务 &#xff08;1&#xff09;yasm源码包&#xff0c;其解压、编译、安装过程. &#xff08;2&#xff09;libmcrypt源码包&#xff0c;其解压、编译、安装过程. &#xff08;3&#xff09;libvpx源码包&#xff0c;其解压、编译、安装过程.libvpx源码包的后缀是.t…

程序员接私活月入2万?分享10个接私活的网站快收藏~

最近&#xff0c;在和身边的程序员聊天中&#xff0c;听不少朋友分享了自己接私活的经历&#xff0c;那收入真是让我“瞠目结舌” … 程序员A&#xff1a;我Java程序员&#xff0c;工作两年&#xff0c;月薪13K&#xff0c;私活20K。 程序员B&#xff1a;之前在单位上班&#…

网站title标题被改并被百度网址安全中心提醒的解决办法

国庆假日期间我们Sine安全接到众多网站站长求助网站标题被改导致在百度搜索中百度安全中心提醒被拦截,导致网站正常用户无法浏览网站被跳转到一些菠菜du博网站&#xff0c;而且很明显的一个特征就是在百度中搜索关键词的网站快照标题被修改成了一些与网站本身内容不相关的页面,…

github网站介绍、并使用git命令管理github(详细描述)

本章学习: 1)熟悉github网站2)通过git命令远程管理github,3)git命令使用ssh key密钥无需输入账号密码 1.首先我们来熟悉github网站 1.1 注册github 登录http://github.com/,然后点击sign up,来注册账户: 注册好了,以及验证邮箱后,然后进入github主页: 1.2点击start a project(启…

十周后,62%的PHP网站将运行在一个不受支持的PHP版本上

根据W3Techs的统计数据&#xff0c;目前约有78.9&#xff05;的网站使用PHP开发。\\但是&#xff0c;PHP 5.6.x的安全支持将在2018年12月31日正式停止&#xff0c;这标志着对古老的PHP 5.x分支版本的支持都将结束。\\也就是说&#xff0c;从明年开始&#xff0c;大约62&#xf…

常见的网站服务器架构有哪些?

初始阶段的网站架构一般来讲&#xff0c;大型网站都是从小型网站发展而来&#xff0c;一开始的架构都比较简单&#xff0c;随着业务复杂和用户量的激增&#xff0c;才开始做很多架构上的改进。当它还是小型网站的时候&#xff0c;没有太多访客&#xff0c;一般来讲只需要一台服…

快速用Discuz搭建论坛网站教程

Discuz! 是全球成熟度最高、覆盖率最大的论坛软件系统之一。自 2001 年 6 月面世以来&#xff0c;Discuz! 已拥有 15 年以上的应用历史和 200 多万网站用户案例。目前&#xff0c;Discuz! 已经发展成为一个以社区为基础的专业建站平台&#xff0c;让论坛&#xff08;BBS&#x…

刚学编程的程序员必备这5大编程网站,你知道几个?

一个好的网站&#xff0c;就是程序员学编程的基地。虽说新手程序员也许知道一些在线编程网站&#xff0c;但是质量上乘的编程网站又知道几个呢?下面就来给大家推荐5个质量上乘的编程网站&#xff1a;0、LeetcodeLeetCode是大名鼎鼎的在线刷题网站&#xff0c;通过该网站的刷题…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…