爬取淘宝手机数据,并进行清洗,并可视化展示

news/2024/11/20 14:20:43/

爬取所需环境

selnium安装

  1. Win+R输入cmd敲回车进入到cmd窗口;
  2. 输入“pip3 install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple”或“pip install selenium”敲回车,等待,就安装好了(附加莫管:输入“pip uninstall matplotlib”进行matplotlib的卸载)。记得测试哈:
  3. 测试:安装好后,测试是否安装成功,命令行输入“python”进入python idel,输入“import selnium”运行,没有报错,即为安装成功:
  4. 附:安装其他所需库方法类似“pip3 install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple”
    chromedriver.exe安装
    1.百度搜索下载与本地安装Chrome对应版本,将其放到Chrome安装路径,在配置环境变量即可:
    在这里插入图片描述
    2.Path中新建一个,存入以下类似Chrome安装目录路径,保存即可:
    在这里插入图片描述

爬取淘宝手机数据代码:

# 导入模块
from selenium import webdriver
import time
import csv
import re# 搜索商品,获取商品页码
def search_product(key_word):key_word += "手机"# 定位输入框browser.find_element_by_id("q").send_keys(key_word)# 定义点击按钮,并点击browser.find_element_by_class_name('btn-search').click()# 最大化窗口:为了方便我们扫码登录淘宝browser.maximize_window()# 等待15秒,给足时间我们扫码登录time.sleep(15)# 定位这个商品“页码”,获取到“共100页“这个文本page_info = browser.find_element_by_xpath('//div[@class="total"]').text# 需要注意的是:findall()返回的是一个列表,虽然此时只有一个元素它也是一个列表。page = re.findall("(\d+)", page_info)[0]print(key_word + "有" + str(page) + "页信息,请问需要爬取多少页?")page = int(input("请输入需要爬取的页面: "))return page# 获取商品信息数据
def get_data():# 通过页面分析发现:所有的信息都在items节点下items = browser.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')for item in items:# 参数信息pro_desc = item.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text# 价格pro_price = item.find_element_by_xpath('.//strong').text# 付款人数buy_num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text[:-3]# 保存到csv文件with open('{}手机.csv'.format(key_word), mode='a', newline='', encoding='utf-8-sig') as f:csv_writer = csv.writer(f, delimiter=',')csv_writer.writerow([pro_desc, pro_price, buy_num])def main():# 浏览器要获取的链接browser.get('https://www.taobao.com/')# 要获取的关键字page = search_product(key_word)print("开始爬取:")page_num = 0while page != page_num:print("*" * 60)print("正在爬取第{}页".format(page_num + 1))# 爬取页面browser.get('https://s.taobao.com/search?q={}&s={}'.format(key_word, page_num * 44))browser.implicitly_wait(15)get_data()page_num += 1print("数据爬取完毕!")if __name__ == '__main__':key_word = input("请输入你要搜索的手机品牌:")browser = webdriver.Chrome()main()

将爬取数据进行清洗,并可视化展示:

import pandas as pd
import matplotlib.pyplot as plt
import jieba
from imageio import imread
from wordcloud import WordCloud
# 项目
project = "华为手机"
# 显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 这两行需要手动设置
plt.rcParams['axes.unicode_minus'] = False
# 文件全路径+文件名
csv_file_name = '{}.csv'.format(project)
# 获取文件中的内容
data = pd.read_csv(open(csv_file_name, encoding='utf-8'), header=None)
# 设置列名
data.columns = ["desc", "price", "buynum"]# 可视化1:销量前5名手机型号折线图
# 分析:哪一型号手机销量最好
def huatu1(data_ten):x_values = data_ten["desc"]y_values = data_ten["buynum"]plt.plot(x_values, y_values, linewidth=4)plt.xlabel("手机型号", size='16')  # 设置横坐标标签plt.ylabel('销量', size='16')  # 设置纵坐标标签plt.title("销量前5名手机型号折线图", fontsize=20)# 保存图表并命名,bbox_inches='tight'表示将图表多余的空白区域裁减掉plt.savefig("销量前5名手机型号折线图", bbox_inches='tight')plt.show()# 可视化2:销量前10名手机价格折线图
# 分析:找到在这前10类好销量中,价格最低的手机
def huatu2(data_ten):x_values = data_ten["desc"]y_values = data_ten["price"]plt.plot(x_values, y_values, linewidth=4)plt.xlabel("手机型号", size='16')  # 设置横坐标标签plt.ylabel('价格', size='16')  # 设置纵坐标标签plt.title("销量前5名手机价格柱状图", fontsize=20)# 保存图表并命名,bbox_inches='tight'表示将图表多余的空白区域裁减掉plt.savefig("销量前5名手机价格柱状图", bbox_inches='tight')plt.show()# 可视化3:参数信息词云图
# 分析:发现市面上在售手机注重的信息参数
def huatu3(word_count):# 1、读取背景图片back_picture = imread("backg.jpg")# 2、设置词云参数wc = WordCloud(font_path="G:\\6Tipdm\\wordcloud\\simhei.ttf",background_color="white",max_words=2000,mask=back_picture,max_font_size=200,random_state=42)wc2 = wc.fit_words(word_count)# 3、绘制词云图plt.figure(figsize=(16, 8))plt.imshow(wc2)plt.axis("off")plt.show()wc.to_file("手机参数信息词云图.png")# 可视化4:不同价格区间手机饼图
# 分析:哪类价格区间的手机型号最多,推测出消费者最能接受的价格区间
def huatu4(data):plt.figure(figsize=(10, 5), dpi=200)x = data['level']y = data.groupby('level').count().reset_indexplt.hist(x,bins=12, color='green', align='mid')plt.title('在售手机价格区间统计')plt.xlabel('价格区间')plt.ylabel('手机型号数')plt.savefig('在售手机价格区间统计')plt.show()# 数据去重
def quchong():# 去重之前的记录数print("去重之前的记录数", data.shape)# 去重“详细信息”相同的记录,删除后出现的重复的值:data.drop_duplicates(subset=["desc"], inplace=True)# 去重之后的记录数print("去重之后的记录数", data.shape)# 销量数据清洗,将数据清洗为int类型(1万+相应进行清洗)
def xiaoliang(x):# find()方法检测字符串中是否包含子字符串”万“,不包含在指定范围内则返回-1# print(type(x))if x.find("万") != -1:x = x[0]return int(x) * 10000elif x.find("+") != -1:x = list(x)x.remove('+')x = ''.join(x)return int(x)else:return int(x)# 清洗出价格少于五百的耳机钢化膜等(假设小于五百的都是非法数据)
def data_jiage():# 如果price列的值<500d = data[data['price'] < 500]data1 = data.drop(d.index)# print(data1[data1['price'] < 500])return data1# 清洗出销量排行前五的信息,方便为后面可视化图提供数据
def data_cleansing(data):# 按照特定列的值进行排序sort_data = data.sort_values('buynum', ascending=True)# 获取前五条数据data_ten = sort_data.tail(5)# 输出每一条参数信息,设置手机型号data_ten["desc"] = data_ten["desc"].apply(set_xinghao)# data_ten.to_csv('销量前五.csv')return data_tendef set_xinghao(x):# 打印型号,设置型号print(x)x = input("型号为:")return x# 参数信息清洗,使用jieba库做词频统计,方便后面做词云图的数据
def canshu(data):# 将商品信息进行切分data["desc_cut"] = data["desc"].apply(lambda x: jieba.lcut(x))# 定义一个字符串,含有需要切割的字符,以逗号分隔stop = "手机,&,【,】,?,/,+"# 以逗号切分stop = stop.split(',')# 将包含在stop的字符切割data["desc_cut"] = data["desc_cut"].apply(lambda x: [i for i in x if i not in stop])# 存取词频数据all_words = []for i in data["desc_cut"]:for j in i:all_words.extend(i)word_count = pd.Series(all_words).value_counts()return word_count# 1000元为一个等级,呈现分区分布;于是创建价格等级字段,以便后续进行分析;
def get_price_level(p):level=p//1000if level==0:return '0~999'if level==1:return '1000~1999'if level==2:return '1999~2999'if level==3:return '2999~3999'if level==4:return '3999~4999'if level>=5:return '5000+'else:return '计算出错'def main():# 1、数据清洗# 数据去重quchong()# 销量数据清洗# data["buynum"] = data["buynum"].apply(xiaoliang)# 更改价格数据格式为float:data['price'].astype('float')# 删除非法价格(假设小于500为非法数据)data1 = data_jiage()# 增加价格区间数据data1['level'] = data1['price'].apply(get_price_level)# 获取销量前五数据data_ten = data_cleansing(data1)# 清洗出desc信息里的各种参数信息,获取参数词频数据word_count = canshu(data1)# 2、可视化huatu1(data_ten)huatu2(data_ten)huatu3(word_count)huatu4(data1)# 输出清洗后的数据data1.to_csv('2.csv')if __name__ == '__main__':main()

可视化展示图片:

销量前5名手机价格折线图
在这里插入图片描述

销量前5名手机型号折线图
在这里插入图片描述

在售手机价格区间统计
在这里插入图片描述

手机参数信息词云图
在这里插入图片描述


http://www.ppmy.cn/news/225126.html

相关文章

el-table 分页跨页默认选中全部

需求&#xff1a;使用el-table&#xff0c;分页从服务端请求数据&#xff0c;默认选中全部分页勾选项。 一、在此之前&#xff0c;实现选中当前页全部勾选项 方式一&#xff1a;请求数据之后&#xff0c;toggleAllSelection 方式二&#xff1a;请求数据之后&#xff0c;togg…

SVN搭建ubuntu服务器过程(图文超详细)

目录 步骤0&#xff1a;搭建环境&#xff1a; 步骤一&#xff1a;下载subversion安装包 步骤二&#xff1a;创建版本库目录 步骤三&#xff1a;创建版本库 步骤四&#xff1a;修改SVN配置 步骤五&#xff1a;重启SVN服务 步骤0&#xff1a;搭建环境&#xff1a; 在ubuntu…

yolov8模型训练结果分析以及如何评估yolov8模型训练的效果

1.运行结果目录 一、 confusion_matrix_normalized.png和confusion_matrix.png 混淆矩阵 混淆矩阵以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值&#xff0c;矩阵的列表示预测值。 TP&#xff08;True Positiv…

RPC接口测试技术-Tcp 协议的接口测试

【摘要】 首先明确 Tcp 的概念&#xff0c;针对 Tcp 协议进行接口测试&#xff0c;是指基于 Tcp 协议的上层协议比如 Http &#xff0c;串口&#xff0c;网口&#xff0c; Socket 等。这些协议与 Http 测试方法类似&#xff08;具体查看接口自动化测试章节&#xff09;&#xf…

python接口自动化 —— 什么是接口、接口优势、类型(详解)

简介 经常听别人说接口测试&#xff0c;接口测试自动化&#xff0c;但是你对接口&#xff0c;有多少了解和认识&#xff0c;知道什么是接口吗&#xff1f;它是用来做什么的&#xff0c;测试时候要注意什么&#xff1f;坦白的说&#xff0c;笔者之前也不是很清楚。接下来先看一下…

相机的一些基本概念 曝光/f值/焦距/光圈/景深

1.对于某个固定的镜头来说 焦距 焦点都是固定的 2.对于变焦相机来说&#xff0c;是一组镜头&#xff0c;这一组镜头是可以组成可变焦的镜头组 3.近景深(前景深)是同一概念&#xff0c;远景深和后景深是一个概念 凸透镜成像规律_百度百科凸透镜成像规律是一种光学定律。在光学…

Jetson 系列(二十八) Milvus

环境 Jetpack 4.4.1TensorRT 7.1python 3.6.8必备安装 docker-compose:参考 一、Milvus 官方:git 地址 / gitee 地址 milvus v2.1.1:地址 二、下载 YAML文件 单机版-v2.1.1: wget https://github.com/milvus-io/milvus/releases/download/v2.1.1/milvus-standalone-dock…

Jetson nano 入手系列之2—板载摄像头IMX219启动

Jetson nano 入手系列之2—板载摄像头IMX219启动 1.亚克力板安装2.摄像头启动3.nvgstcapture常用命令3.1 Set sensor orientation3.2 Get Image Capture Resolution3.3 Capture3.4 quit 参考文献 Jetson nano 入手系列&#xff1a; Jetson nano 入手系列之1—如何SSH远程登录 J…