当前位置:
首页 > temp > python入门教程 >
-
能绕赤道(4万公里)5圈的车是什么样的?Python爬取懂车帝网站数据,并做数据
知识点:
- requests 发送网络请求
- parsel 解析数据
- csv 保存数据
第三方库
- requests >>> pip install requests
- parsel >>> pip install parsel
开发环境:
- 版 本:anaconda5.2.0(python3.6.5)
- 编辑器:pycharm
爬虫代码
导入模块
import requests import parsel import csv
发送请求
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=1' html_data = requests.get(url).text
解析数据 筛选数据
selector = parsel.Selector(html_data) lis = selector.css('#__next > div:nth-child(2) > div.new-main.new > div > div > div.wrap > ul > li') for li in lis: title = li.css('dl dt p::text').get() info_list = li.css('dl dd') info = ''.join(info_list.css('dd:nth-child(2)::text').getall()).split('|') car_age = info[0] mileage = info[1].replace('万公里', '') city = info[2]
做一个判断
if len(info_list) == 4: dcd_auth = info_list.css('dd span::text').get() price = info_list.css('dd:nth-child(4)::text').get() original_price = info_list.css('dd:nth-child(5)::text').get() else: dcd_auth = '无认证' price = info_list.css('dd:nth-child(3)::text').get() original_price = info_list.css('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)
保存数据
csv_dcd = open('dcd.csv', mode='a', encoding='utf-8', newline='') csv_write = csv.writer(csv_dcd) csv_write.writerow(['品牌', '车龄', '里程(万公里)', '城市', '认证', '售价(万元)', '原价(万元)'])
数据可视化
导入模块
import pandas as pd from pyecharts.charts import * from pyecharts.commons.utils import JsCode from pyecharts import options as opts
读取数据
df = pd.read_csv('dcd.csv', encoding = 'utf-8') df.head()
各省市二手车数量柱状图
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()
各省市二手车平均价格柱状图
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()
二手车品牌占比情况
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()
二手车里程区间
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()
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数