【Python爬虫+数据分析】采集电商平台数据信息,并做可视化演示(带视频案例)

news2024/11/26 0:28:49

前言

随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。

接下来就让我来教你 如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据

在这里插入图片描述

本次案例实现目标

  • 书籍基本数据
  • 实现可视化图表
  • 书籍评论数据
  • 评论可以实现词云图

最基本思路流程: <通用>

一. 数据来源分析

1.只有当你知道你想要数据内容, 是来自于哪里的时候, 才能通过代码请求得到数据
2.打开 F12 开发者工具进行抓包分析
3.通过关键字进行搜索查询数据包是请求那个url地址

二. 代码实现步骤过程: 代码实现基本四大步骤

1.发送请求, 模拟浏览器对于url地址<刚刚分析得到的url地址>发送请求
2.获取数据, 获取服务器返回响应数据 —> 开发者工具里面 response
3.解析数据, 提取我们想要的数据内容 —> 书籍基本信息
4.保存数据, 把数据内容保存到表格里面

请添加图片描述

代码实现

获取书籍详情信息

发送请求

源码.资料.素材.点击领取即可

url = f'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-1'
# 代码模拟浏览器发送请求 ---> headers请求头 <可以复制粘贴>
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)

解析数据

# 转换数据类型 ---> 可解析对象
selector = parsel.Selector(response.text)
# 第一次提取, 获取所有li标签
lis = selector.css('.bang_list_mode li')  # 返回列表
# for循环遍历, 把列表里面的元素一个一个提取出来
for li in lis:
    title = li.css('.name a::attr(title)').get()  # 标题/书名
    recommend = li.css('.tuijian::text').get().replace('推荐', '')  # 推荐
    star = li.css('.star a::text').get().replace('条评论', '')  # 评价
    author = li.css('div:nth-child(5) a:nth-child(1)::attr(title)').get()  # 作者
    date = li.css('div:nth-child(6) span::text').get()  # 出版日期
    press = li.css('div:nth-child(6) a::text').get()  # 出版社
    price_r = li.css('.price .price_r::text').get()  # 原价
    price_n = li.css('.price .price_n::text').get()  # 售价
    price_e = li.css('.price_e span::text').get()  # 电子书价格
    href = li.css('.name a::attr(href)').get()  # 详情页
    dit = {
        '标题': title,
        '推荐': recommend,
        '评价': star,
        '作者': author,
        '出版日期': date,
        '出版社': press,
        '原价': price_r,
        '售价': price_n,
        '电子书价格': price_e,
        '详情页': href,
    }
    csv_writer.writerow(dit)
    print(dit)

保存数据

f = open('书籍.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '推荐',
    '评价',
    '作者',
    '出版日期',
    '出版社',
    '原价',
    '售价',
    '电子书价格',
    '详情页',
])
# 写入表头
csv_writer.writeheader()

运行代码得到结果

请添加图片描述

请添加图片描述

在这里插入图片描述

可视化图表

书籍总体价格区间

python学习交流Q群:770699889 ###
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'
            ),
        )
    )
    .set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA'])
)
pie1.render_notebook() 

请添加图片描述

pie1 = (
    Pie(init_opts=opts.InitOpts(theme='dark',width='1000px',height='600px'))
    
    .add('', datas_pair_2, 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'
            ),
        )
    )
    .set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA'])
)
pie1.render_notebook() 

请添加图片描述

各个出版社书籍数量柱状图

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_=29.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()

请添加图片描述

电子书版本占比

c = (
    Liquid()
    .add("lq", [1-per], is_outline_show=False)
    .set_global_opts(title_opts=opts.TitleOpts(title="电子书版本占比"))
)
c.render_notebook()

请添加图片描述

书籍评论数据

源码点击文末名片获取
for page in range(1, 11):
    time.sleep(1)
    # 确定请求url地址
    url = 'http://product.dangdang.com/index.php'
    # 请求参数
    data = {
        'r': 'comment/list',
        'productId': '29129370',
        'categoryPath': '01.43.79.01.00.00',
        'mainProductId': '29129370',
        'mediumId': '0',
        'pageIndex': page,
        'sortType': '1',
        'filterType': '1',
        'isSystem': '1',
        'tagId': '0',
        'tagFilterCount': '0',
        'template': 'publish',
        'long_or_short': 'short',
    }
    # headers 请求头
    headers = {
        '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, params=data, headers=headers)
    # response.json() 获取响应json字典数据 键值对取值 ---> 根据冒号左边的内容, 提取冒号右边的内容
    html_data = response.json()['data']['list']['html']
    content_list = re.findall("<span><a href=.*?' target='_blank'>(.*?)</a></span>", html_data)
    with open('评论.txt', mode='a', encoding='utf-8') as f:
        f.write('\n'.join(content_list))
        f.write('\n')
        print(content_list)

请添加图片描述

词云

import jieba # 分词模块 pip install jieba
import wordcloud
import imageio
img = imageio.imread('123.png')
# wordcloud
# 1. 打开文件 获取弹幕数据
# mode='r' 一定要写吗  不一定 默认以 r
# encoding='' 要写吗?  肯定要的
f = open('评论.txt', mode='r', encoding='utf-8')
txt = f.read()
# print(txt)
# 2. jieba分词 分割词汇
txt_list = jieba.lcut(txt)
# print(txt_list)
# 列表转字符串怎么转
string = ' '.join(txt_list)
# print(string)
# 3. 词云图设置
wc = wordcloud.WordCloud(
    width=800,  # 宽度
    height=500, # 高度
    background_color='white', # 背景颜色
    mask=img, # 设置图片样式
    font_path='msyh.ttc',
    scale=15,
    stopwords={'了', '的'},
    contour_width=5,
    contour_color='red'
)
# 4. 输入文字内容 (字符串的形式)
wc.generate(string)
# 5. 输出图片
wc.to_file('output2.png')

请添加图片描述

视频教程

源码.资料.素材.点击领取即可

有一说一 这个案例当成自己的python作业,感觉还挺不错的

【爬虫+可视化】采集当当网商品数据信息,做可视化分析

好啦,今天的分享到这里就结束了 ~

对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

请添加图片描述

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

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

相关文章

互动酷投票平台网络投票链接做网络链接投票

关于微信投票&#xff0c;我们现在用的最多的就是小程序投票&#xff0c;今天的网络投票&#xff0c;在这里会教大家如何用“活动星投票”小程序来进行投票。 我们现在要以“垃悦享端午”为主题进行一次投票活动&#xff0c;我们可以在在微信小程序搜索&#xff0c;“活动星投票…

ProtoBuf—3

文章目录 1、默认值2、更新规则3、未知字段4、option字段5、通信录网络版6、总结 1、默认值 反序列化消息时&#xff0c;如果被反序列化的二进制序列中不包含某个字段&#xff0c;反序列化对象中相应字段时&#xff0c;就会设置为该字段的默认值。不同的类型对应的默认值不同&…

使用GeoPandas进行地理空间数据可视化

大家好&#xff0c;在当今数据驱动的世界中&#xff0c;将信息可视化到地图上可以提供有价值的见解&#xff0c;帮助有效地传达复杂的模式。GeoPandas是一个建立在pandas和shapely之上的Python库&#xff0c;使用户能够通过将地理空间数据与各种变量合并来创建令人惊叹的地图。…

css实现鼠标悬停时滑出层提示

css实现鼠标悬停时滑出层提示的方法介绍 这是一个简单的鼠标悬停提示特效&#xff0c;类似于alt标签&#xff0c;不过这一种是用纯CSS实现&#xff0c;扩展性好&#xff0c;而且在提示的层里可以加入图片或其它布局&#xff0c;这个要根据你的需要了。 代码如下: <!DOCTYPE…

一次日志配置未生效问题排查记录

某天排查业务问题时,在我司的日志收集平台上,未能发现相关业务服务接口访问日志。经过和相关同事确定,发现业务服务未能将接口访问日志吐到日志收集平台,由此开启一段有点漫长的排查之旅。 业务服务是典型的SpringBoot web应用&#xff0c;日志记录采用slf4jlog4j2组合。 通过…

《BlazePose: On-device Real-time Body Pose tracking》在移动设备端实时人体姿态追踪(2006)

BlazePose: On-device Real-time Body Pose tracking 论文地址&#xff1a;https://arxiv.org/pdf/2006.10204.pdf GoogleBolg&#xff1a;https://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html 模型下载地址&#xff1a;https://github.com/PIN…

clop勒索软件攻击活动频发,西门子能源中招

自6月初被通报利用MOVEit Transfer服务器中的零日漏洞窃取加密组织数据后&#xff0c;clop勒索软件攻击活动频繁&#xff0c;全球陆续发生了多起clop软件攻击事件。本周&#xff0c;Clop团伙在其数据泄露网站上列出了西门子能源公司的信息&#xff0c;表示该公司的数据被泄露。…

must declare a single constructor

1、异常详细描述 Test ignored.org.junit.platform.commons.PreconditionViolationException: Class [org.bc.offer.datastructure.Stack] must declare a single constructorProcess finished with exit code -12、源码 package org.bc.offer.datastructure;import org.jun…

SUI Token释放计划时间表和几个相关问题

Sui主网于2023年5月3日正式上线&#xff0c;网络原生token SUI用于链上交易、支付gas费用、保护网络以及提供链上流动性。SUI的长期流通总供应量为100亿。在主网上线时&#xff0c;大约有5%的token在流通&#xff0c;其余的将按照下面的图表所示的计划释放&#xff0c;以保持网…

特异性抑制剂:FAPI-4 NH2 ,FAPI4Amine,成纤维细胞活化蛋白 (FAP) 抑制剂连接氨基

编辑来源||陕西新研博美生物科技有限公司小编MISSwu FAPI-4-NH2中FAPI是FAP的特异性抑制剂。在这些FAPI中&#xff0c;含有DOTA配体(FAPI-04)的[68Ga]Ga-DOTA-FAPI-04 PET/CT能显示出良好的体内药代动力学&#xff0c;导致快速kidney清除和注射后10分钟至3小时的低背景活性。 …

JAVA C++的权限区别

访问级别的名称和个数&#xff1a;在C中&#xff0c;有三个访问级别关键字&#xff1a;public、protected和private。而在Java中&#xff0c;有四个访问级别关键字&#xff1a;public、protected、private和默认&#xff08;没有关键字修饰&#xff09;。 默认访问级别不同&…

【三层交换机】网络杂谈(16)之三层交换机技术

涉及知识点 什么是三层交换机&#xff0c;三层交换技术的由来&#xff0c;三层交换机&#xff0c;三层交换的应用范例。深入了解三层交换机技术。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多内容可去其主页关注下哈&#xff0c;不胜感激 文章目录 涉及知…

SAP-QM质量管理视图字段解析

QM物料授权:如果在物料主记录中输入物料授权组,则系统将检查(在物料基础上)用户是否具有对以上名称对象的授权。如果未输入授权组,则不进行授权检查。要通过授权检查,用户需要 物料授权,其中包含有字段值所表示的相关授权组。 收货处理时间:收货后的加盐时间(天数)如…

深度学习(五)—— 卷积神经网络(CNN)

卷积神经网络&#xff08;CNN&#xff09; 1 CNN的组成2 卷积层2.1 卷积的计算2.2 多通道卷积2.3 多卷积核卷积2.4 特征图大小2.5 卷积层 api 实现 3 池化层3.1 最大池化3.2 平均池化 4 全连接层5 CNN的构建5.1 数据加载5.2 数据处理5.3 模型搭建5.4 模型编译5.5 模型训练5.6 模…

Go语言使用net/http实现简单登录验证和文件上传功能

最近再看Go语言web编程&#xff0c;使用net/http模块编写了一个简单的登录验证和文件上传的功能&#xff0c;在此做个简单记录。 目录 1.文件目录结构 2.编译运行 3.用户登录 4.文件上传 5.mime/multipart模拟form表单上传文件 代码如下&#xff1a; package mainimport …

【C语言】递归实战,通过几个例子带你深入走进递归算法

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello&#xff0c;这里是君兮_&#xff0c;今天给大家带来一篇递归的实战教学文章&#xff0c;由于递归算法不仅对于初学者十分不易理解并且在我们以后的数据结构中也非常重要。我们今天就通过几个应用递归的实际例子来给…

Apache Doris 在头部票务平台的应用实践:报表开发提速数十倍、毫秒级查询响应

作者&#xff5c;国内某头部票务平台 大数据开发工程师 刘振伟 本文导读&#xff1a; 随着在线平台的发展&#xff0c;票务行业逐渐实现了数字化经营&#xff0c;企业可以通过在线销售、数字营销和数据分析等方式提升运营效率与用户体验。基于此&#xff0c;国内某头部票务平…

【Java】Java核心 81:Git 教程(4)差异比较 版本回退

文章目录 06.GIT本地操作-差异比较目标内容小结 07.GIT本地操作-版本回退目标内容小结 在Git中&#xff0c;可以使用差异比较命令和版本回退命令来查看文件之间的差异并回退到早期的版本。 以下是对这些操作的简要解释&#xff1a; 差异比较&#xff1a;你可以使用git diff命…

本地Linux 部署 Dashy 并远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章&#xff1a;本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…

video-04-videojs配置及使用

videojs是一种轻框架&#xff0c;可以帮我们快速开发一个video视频组件 目录 一、参考资料 二、引入videojs 三、简单了解使用 四、配置项和事件 4.1 常用配置项 4.2 常用事件 4.3 常用方法 4.4 网络状态 4.5 播放状态 4.6 视频控制 五、实例&#xff08;可直接复制…