一位同学的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大作业【分析当当网书籍价格、出版社、电子书版本占比数据】
一位同学的Python大作业【分析当当网书籍价格、出版社、电子书版本占比数据】

可视化图表

书籍总体价格区间
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() 

 

一位同学的Python大作业【分析当当网书籍价格、出版社、电子书版本占比数据】

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() 

 

一位同学的Python大作业【分析当当网书籍价格、出版社、电子书版本占比数据】

各个出版社书籍数量柱状图
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()

 

一位同学的Python大作业【分析当当网书籍价格、出版社、电子书版本占比数据】

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

 

一位同学的Python大作业【分析当当网书籍价格、出版社、电子书版本占比数据】

书籍评论数据

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)

 

一位同学的Python大作业【分析当当网书籍价格、出版社、电子书版本占比数据】

词云

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大作业【分析当当网书籍价格、出版社、电子书版本占比数据】 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python爬取全球疫情数据,制作数据可视化图

    前言 开发环境 python 3.8: 解释器 pycharm: 代码编辑器 requests 发送请求 pyecharts 绘制图表 pandas 读取数据 爬虫案例思路流程: 一. 数据来源分析: 确定需求, 采集那个网站上面什么数据 抓包分析, 通过开发者工具进行抓包分析<浏览器自带工具>开发者工具F12 刷新网页 清空数据, 点击选择找相…

    Python开发 2023年4月2日
    00
  • Python爬取网易云歌曲评论,做词云分析

    前言 emmmm 没什么说的,想说的都在代码里 环境使用 Python 3.8 解释器 3.10 Pycharm 2021.2 专业版 selenium 3.141.0 本次要用到selenium模块,所以请记得提前下载好浏览器驱动,配置好环境 对于本篇文章有疑问的同学可以加【资料白嫖、解答交流群:753182387】 代码实现 先是安装、导入所需模块 fr…

    Python开发 2023年4月2日
    00
  • Python获取手机4K壁纸,一个入门练手的案例

    前言 一. 数据来源分析 明确需求, 我们采集网上什么数据内容, 在什么地方 分析我们想要高清原图在什么地方有 浏览器自带工具: 开发者工具 F12 鼠标右键点击 插件 选择 network 刷新网页 点击选择 Img 可以直接找到图片地址 通过搜索分析, 可以知道, 我们想要图片原图url 就在 图片详情页网页源代码里面 二. 代码大概实现步骤 发送请求,…

    Python开发 2023年4月2日
    00
  • 用代码收集每天热点内容信息,并发送到自己的邮箱

    前言 本篇文章内容主要为如何用代码,把你想要的内容,以邮件的形式发送出去内容可以自己完善,还可以设置一个定时发送,或者开机启动自动运行代码 代理注册与使用 注册账号并登录 生成api 将自己电脑加入白名单 http://api.tianqiip.com/white/add?key=xxx&brand=2&sign=xxx&ip=输入自己电脑的ip地址 1. …

    Python开发 2023年4月2日
    00
  • Python获取“双十一”商品评论,做词云分析,一个简单的案例教学

    前言 环境使用 Python 3.8 Pycharm 模块使用 requests jieba 结巴分词 wordcloud 词云 数据来源分析 明确需求 <数据来源分析> 采集数据是什么东西? 通过那个url地址得到想要数据的内容 抓包分析: 浏览器自带工具 –> 开发者工具I. F12 或者 鼠标右键点击检查 选择 network 点击…

    Python开发 2023年4月2日
    00
  • Python tkinter 制作一个经典的登录界面和点击事件

    前言 Tkinter(即 tk interface) 是 Python 标准 GUI 库,简称 “Tk”;从本质上来说,它是对 TCL/TK 工具包的一种 Python 接口封装。Tkinter 是 Python 自带的标准库,因此无须另行安装,它支持跨平台运行,不仅可以在 Windows 平台上运行,还支持在 Linux 和 Mac 平台上运行。 Tkin…

    Python开发 2023年4月2日
    00
  • 近段时间天气暴热,所以采集北上广深去年天气数据,制作可视化图看下

    前言 最近天气异常暴热,看到某些地方地表温度居然达到70°,这就离谱所以就想采集一下天气的数据,做个可视化图,回忆一下去年的天气情况 开发环境 python 3.8 运行代码 pycharm 2021.2 辅助敲代码 requests 第三方模块 对于本篇文章有疑问的同学可以加【资料白嫖、解答交流群:753182387】 天气数据采集 1. 发送请求 url…

    Python开发 2023年4月2日
    00
  • Python采集1000多所世界大学排名数据,制作可视化图

    前言 QS世界大学排名(QS World University Rankings)是由英国一家国际教育市场咨询公司Quacquarelli Symonds(简称QS)所发表的年度世界大学排名 采集全球大学排名数据(源码已分享,求点赞) import requests # 发送请求 import re import csv with open(‘rank.cs…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部