前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

Python获取当当平台商品数据信息可视化效果展示-LMLPHP

环境使用:

  • 版 本: python 3.8

  • 编辑器:pycharm 2021.2

  • jupyter notebook

模块使用:

采集

  • requests >>> pip install requests 数据请求

  • csv <表格文件> 内置模块 保存数据

数据分析

  • pandas

  • pyecharts

第三方模块安装:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

  2. 在pycharm中点击Terminal(终端) 输入安装命令

如果出现爆红, 可能是因为 网络连接超时, 可切换国内镜像源,命令如下:

pip install -i https://pypi.doubanio.com/simple/ requests

获取数据

导入模块

# 导入数据请求模块
import requests
# 导入数据解析模块
import parsel
# 导入csv模块
import csv
f = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '书名',
    '评论',
    '推荐',
    '作者',
    '日期',
    '出版社',
    '售价',
    '原价',
    '折扣',
    '电子书',
    '详情页',
])
csv_writer.writeheader()

“”"

  1. 发送请求

    • <Response [200]> 表示请求成功

“”"

for page in range(1, 26):
    # 请求链接
    url = f'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-{page}'
    # 发送请求
    response = requests.get(url)

“”"

  1. 获取数据 -> response<响应对象>.text

    获取整个网页的数据内容

  2. 解析数据

    获取具体数据, 我们想要的数据

    当你看到获取的数据, 有这样标签格式, 用css或者xpath是最方便

    css选择器就是根据标签属性提取数据内容

    xpath节点提取

    re正则表达式

“”"

    selector = parsel.Selector(response.text)
    # 提取所有图书信息, 所对应li标签
    lis = selector.css('.bang_list_mode li')
    for li in lis:
        title = li.css('.name a::attr(title)').get()  # 标题
        star = li.css('.star a::text').get().replace('条评论', '')  # 评论
        Tui = li.css('.tuijian::text').get().replace('推荐', '')  # 推荐
        writer = li.css('.publisher_info a::attr(title)').get()  # 作者
        date = li.css('.publisher_info span::text').get()  # 日期
        # get() 提取第一个元素标签
        完整源码、教程+V:pytho8987获取,加备注“777”
        publisher = li.css('div:nth-child(6) a::text').get()  # 出版社
        # publisher = li.css('.publisher_info a::text').getall()[-1] # 出版社
        price_n = li.css('.price .price_n::text').get()  # 售价
        price_r = li.css('.price .price_r::text').get()  # 原价
        price_s = li.css('.price .price_s::text').get().replace('折', '')  # 折扣
        price_e = li.css('.price_e .price_n::text').get()  # 电子书
        href = li.css('.name a::attr(href)').get()  # 详情页
        dit = {
            '书名': title,
            '评论': star,
            '推荐': Tui,
            '作者': writer,
            '日期': date,
            '出版社': publisher,
            '售价': price_n,
            '原价': price_r,
            '折扣': price_s,
            '电子书': price_e,
            '详情页': href,
        }
        csv_writer.writerow(dit)

数据可视化

import pandas as pd
# 读取csv文件
df = pd.read_csv('data.csv')
# 显示前五行数据
df.head()
Tui_num = df['推荐'].value_counts().to_list()
Tui_type = df['推荐'].value_counts().index.to_list()
Tui_type
# 推荐量占比情况
from pyecharts import options as opts
from pyecharts.charts import Pie
# from pyecharts.faker import Faker  # 随机生成数据模块

c = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(Tui_type, Tui_num)],
        center=["35%", "50%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="推荐占比分布"),
        legend_opts=opts.LegendOpts(pos_left="15%"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_position.html")  # 保存本地html文件
)
# Faker.choose() 类目
# Faker.values() 数量
c.render_notebook()
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
c = (
    Bar()
    .add_xaxis(Tui_type)
    完整源码、教程+V:pytho8987获取,加备注“777.add_yaxis('百分比', Tui_num, stack="stack1")
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(title_opts=opts.TitleOpts(title="推荐占比分布"))
#     .render("bar_stack0.html")
)
c.render_notebook()
ZHE_num = df['折扣'].value_counts().to_list()[:10]
ZHE_type = df['折扣'].value_counts().index.to_list()[:10]
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
c = (
    Bar()
    .add_xaxis(ZHE_type)
    .add_yaxis('百分比', ZHE_num, stack="stack1")
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(title_opts=opts.TitleOpts(title="折扣分布"))
#     .render("bar_stack0.html")
)
c.render_notebook()
# 推荐量占比情况
from pyecharts import options as opts
from pyecharts.charts import Pie
# from pyecharts.faker import Faker  # 随机生成数据模块

c = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(ZHE_type, ZHE_num)],
        center=["35%", "50%"],
        完整源码、教程+V:pytho8987获取,加备注“777)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="折扣分布"),
        legend_opts=opts.LegendOpts(pos_left="15%"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
#     .render("pie_position.html")  # 保存本地html文件
)
# Faker.choose() 类目
# Faker.values() 数量
c.render_notebook()

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

Python获取当当平台商品数据信息可视化效果展示-LMLPHP

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

06-05 18:16