• 爬取3w条『各种品牌』笔记本电脑数据,统计分析并进行可视化展示!真好看~...


    本文代码讲解已录成视频,欢迎扫码学习!

    本文手撕代码过程

    01

    前言

    在上一篇文章【教你用python爬取『京东』商品数据,原来这么简单!】教大家如何学会爬取『京东』商城商品数据

    今天教大家如何爬取『京东』平台里面『各种品牌』笔记本电脑数据约30000条进行统计分析,最后进行可视化展示(各种可视化图表真好看!!)

    本文干货内容:

    1. 爬取京东商品所有笔记本电脑数据

    2. 数据存储到excel

    3. pandas对excel数据进行统计分析

    4. 绘制各种可视化图表

    02

    爬取数据

    1.链接分析

    之前介绍了爬取其中的一种商品,这里需要爬取『各种品牌』,对应的链接也不一样,需要进行分析。

    可以分析链接中,ev参数对应着品牌的名称,因此只需要更改ev参数就可以爬取不同品牌的笔记本数据。

    避坑:

    注意不要遗漏后面的括号:联想(lenovo),少了后面括号有一些品牌的数据无法爬取(亲测证明)。

    此外不同品牌的笔记本商品数据总量(总页数)不一样,因此同样需要对应进行汇总,这里定义了字典去存储1.品牌名称和2.总页数。

    brand_dict={
        '联想(lenovo)':100,
        'ThinkPad':100,
        '戴尔(DELL)':100,
        '惠普(HP)':100,
        '华为(HUAWEI)':100,
        'Apple':100,
        '小米(MI)':47,
        '宏碁(acer)':43,
        '荣耀(HONOR)':21,
        '机械革命(MECHREVO)':31,
        '微软(Microsoft)':100,
        'LG':3,
        '神舟(HASEE)':34,
        'VAIO':3,
        '三星(SAMSUNG)':47,
    }
    

    2.获取不同品牌笔记本数据

    #李运辰 公众号:python爬虫数据分析挖掘
    #遍历每一页
    def getpage(brand_dict):
        global  count
        for k, v in brand_dict.items():
            page = 1
            s = 1
            brand = str(k)
            try:
                for i in range(1, int(v) + 1):
                    url = "https://search.jd.com/search?keyword=笔记本&wq=笔记本&ev=exbrand_" + str(brand) + "&page=" + str(
                        page) + "&s=" + str(s) + "&click=1"
                    getlist(url, brand)
                    page = page + 2
                    s = s + 60
                    print("品牌=" + str(k) + ",页数=" + str(v) + ",当前页数=" + str(i))
            except:
                pass
    

    这里加入了try-except,防止其中某一页爬取失败,造成程序终止!

    3.遍历每一页数据

    #李运辰 公众号:python爬虫数据分析挖掘
    ###获取每一页的商品数据
    def getlist(url,brand):
        global  count
        #url="https://search.jd.com/search?keyword=笔记本&wq=笔记本&ev=exbrand_联想%5E&page=9&s=241&click=1"
        res = requests.get(url,headers=headers)
        res.encoding = 'utf-8'
        text = res.text
        selector = etree.HTML(text)
        list = selector.xpath('//*[@id="J_goodsList"]/ul/li')
        for i in list:
            title=i.xpath('.//div[@class="p-name p-name-type-2"]/a/em/text()')[0]
            price = i.xpath('.//div[@class="p-price"]/strong/i/text()')[0]
    

    这里只获取商品标题商品价格

    4.数据存储到excel

    定义excel表头

    #李运辰 公众号:python爬虫数据分析挖掘
    import openpyxl
    outwb = openpyxl.Workbook()
    outws = outwb.create_sheet(index=0)
    outws.cell(row=1, column=1, value="index")
    outws.cell(row=1, column=2, value="brand")
    outws.cell(row=1, column=3, value="title")
    outws.cell(row=1, column=4, value="price")
    count = 2
    

    写数据并保存成笔记本电脑-李运辰.xls

    outws.cell(row=count, column=1, value=str(count-1))
    outws.cell(row=count, column=2, value=str(brand))
    outws.cell(row=count, column=3, value=str(title))
    outws.cell(row=count, column=4, value=str(price))
    outwb.save("笔记本电脑-李运辰.xls")  # 保存
    

    这样我们的数据就已经爬取完成。

    下面开始对这些数据进行统计分析,最后绘制可视化图

    03

    可视化分析

    1.展示每个品牌的数据量

    pandas读取excel

    #李运辰 公众号:python爬虫数据分析挖掘
    #读入数据
    df_all = pd.read_csv("笔记本电脑-李运辰.csv",engine="python")
    df = df_all.copy()
    # 重置索引
    df = df.reset_index(drop=True)
    

        

    统计分析

    #李运辰 公众号:python爬虫数据分析挖掘
    brand_counts = df.groupby('brand')['price'].count().sort_values(ascending=False).reset_index()
    brand_counts.columns = ['品牌', '数据量']
    name = (brand_counts['品牌']).tolist()
    dict_values = (brand_counts['数据量']).tolist()
    

    可视化展示

    #李运辰 公众号:python爬虫数据分析挖掘
    #链式调用
    c = (
        Bar(
            init_opts=opts.InitOpts(  # 初始配置项
                theme=ThemeType.MACARONS,
                animation_opts=opts.AnimationOpts(
                    animation_delay=1000, animation_easing="cubicOut"  # 初始动画延迟和缓动效果
                ))
        )
            .add_xaxis(xaxis_data=name)  # x轴
            .add_yaxis(series_name="展示每个品牌的数据量", yaxis_data=dict_values)  # y轴
            .set_global_opts(
            title_opts=opts.TitleOpts(title='', subtitle='',  # 标题配置和调整位置
                                      title_textstyle_opts=opts.TextStyleOpts(
                                          font_family='SimHei', font_size=25, font_weight='bold', color='red',
                                      ), pos_left="90%", pos_top="10",
                                      ),
            xaxis_opts=opts.AxisOpts(name='品牌', axislabel_opts=opts.LabelOpts(rotate=45)),
            # 设置x名称和Label rotate解决标签名字过长使用
            yaxis_opts=opts.AxisOpts(name='数据量'),
    
    
        )
            .render("展示每个品牌的数据量.html")
    )
    

    2.最高价格对比

    统计分析

    #李运辰 公众号:python爬虫数据分析挖掘
    brand_maxprice = df.groupby('brand')['price'].agg(['max'])['max'].sort_values(ascending=False).reset_index()
    brand_maxprice.columns = ['品牌', '最高价']
    name = (brand_maxprice['品牌']).tolist()
    dict_values = (brand_maxprice['最高价']).tolist()
    

    可视化展示

    #李运辰 公众号:python爬虫数据分析挖掘
    ##去掉英文名称
    for i in range(0, len(name)):
        if "(" in name[i]:
            name[i] = name[i][0:int(name[i].index("("))]
    
    
    # 链式调用
    c = (
        Bar(
            init_opts=opts.InitOpts(  # 初始配置项
                theme=ThemeType.MACARONS,
                animation_opts=opts.AnimationOpts(
                    animation_delay=1000, animation_easing="cubicOut"  # 初始动画延迟和缓动效果
                ))
        )
            .add_xaxis(xaxis_data=name)  # x轴
            .add_yaxis(series_name="最高价格对比", yaxis_data=dict_values)  # y轴
            .set_global_opts(
            title_opts=opts.TitleOpts(title='', subtitle='',  # 标题配置和调整位置
                                      title_textstyle_opts=opts.TextStyleOpts(
                                          font_family='SimHei', font_size=25, font_weight='bold', color='red',
                                      ), pos_left="90%", pos_top="10",
                                      ),
            xaxis_opts=opts.AxisOpts(name='品牌', axislabel_opts=opts.LabelOpts(rotate=45)),
            # 设置x名称和Label rotate解决标签名字过长使用
            yaxis_opts=opts.AxisOpts(name='最高价'),
    
    
        )
            .render("最高价格对比.html")
    )
    

    3.价格均值

    统计分析

    #李运辰 公众号:python爬虫数据分析挖掘
    brand_meanprice = df.groupby('brand')['price'].agg(['mean'])['mean'].sort_values(ascending=False).reset_index()
    brand_meanprice.columns = ['品牌', '价格均值']
    name = (brand_meanprice['品牌']).tolist()
    dict_values = (brand_meanprice['价格均值']).tolist()
    
    
    ##去掉英文名称
    for i in range(0, len(name)):
        if "(" in name[i]:
            name[i] = name[i][0:int(name[i].index("("))]
    
    
    #价格转为整数
    for i in range(0, len(dict_values)):
            dict_values[i] = int(dict_values[i])
    

    可视化展示

    #李运辰 公众号:python爬虫数据分析挖掘
    # 链式调用
    c = (
        Bar(
            init_opts=opts.InitOpts(  # 初始配置项
                theme=ThemeType.MACARONS,
                animation_opts=opts.AnimationOpts(
                    animation_delay=1000, animation_easing="cubicOut"  # 初始动画延迟和缓动效果
                ))
        )
            .add_xaxis(xaxis_data=name)  # x轴
            .add_yaxis(series_name="价格均值对比", yaxis_data=dict_values)  # y轴
            .set_global_opts(
            title_opts=opts.TitleOpts(title='', subtitle='',  # 标题配置和调整位置
                                      title_textstyle_opts=opts.TextStyleOpts(
                                          font_family='SimHei', font_size=25, font_weight='bold', color='red',
                                      ), pos_left="90%", pos_top="10",
                                      ),
            xaxis_opts=opts.AxisOpts(name='品牌', axislabel_opts=opts.LabelOpts(rotate=45)),
            # 设置x名称和Label rotate解决标签名字过长使用
            yaxis_opts=opts.AxisOpts(name='价格均值'),
    
    
        )
            .render("价格均值对比.html")
        )
    

    4.各大品牌标题词云

    提取文本

    #李运辰 公众号:python爬虫数据分析挖掘
    brand_title = df.groupby('brand')['title']
    brand_title = list(brand_title)
    for z in range(0,len(brand_title)):
        brandname = brand_title[z][0]
        if "(" in brandname:
            brandname = brandname[0:int(brandname.index("("))]
        brandname = str(brandname).encode("utf-8").decode('utf8')
        print(brandname)
        text = "".join((brand_title[z][1]).tolist())
        text = text.replace(brand_title[z][0],"").replace(brandname,"").replace("
    
    ","").replace("	","").replace("
    ","").replace("
    ","").replace("【","").replace("】","").replace(" ","")
        #print(text)
        with open("text/"+str(brandname)+".txt","a+") as f:
            f.write(text)
    

    这里将不同品牌的标题文本写入到txt

    可视化展示

    #李运辰 公众号:python爬虫数据分析挖掘
    def an4_pic():
        ###词云图标
        fa_list = ['fas fa-play', 'fas fa-audio-description', 'fas fa-circle', 'fas fa-eject', 'fas fa-stop',
                   'fas fa-video', 'fas fa-volume-off', 'fas fa-truck', 'fas fa-apple-alt', 'fas fa-mountain',
                   'fas fa-tree', 'fas fa-database', 'fas fa-wifi', 'fas fa-mobile', 'fas fa-plug']
        z=0
        ##开始绘图
        for filename in os.listdir("text"):
            print(filename)
            with open("text/"+filename,"r") as f:
                 text = (f.readlines())[0]
    
    
            with open("stopword.txt", "r", encoding='UTF-8') as f:
                stopword = f.readlines()
            for i in stopword:
                print(i)
                i = str(i).replace("
    ", "").replace("
    ", "").replace("
    ", "")
                text = text.replace(i, "")
            word_list = jieba.cut(text)
            result = " ".join(word_list)  # 分词用 隔开
            # 制作中文云词
            icon_name = str(fa_list[z])
            gen_stylecloud(text=result, icon_name=icon_name, font_path='simsun.ttc',output_name=str(filename.replace(".txt",""))+"词云图.png")  # 必须加中文字体,否则格式错误
            z =z+1
    

    1.Apple词云图

    2.LG词云图

    3.Thinkpad词云图

    4.VAIO词云图

    5.戴尔词云图

    6.宏碁词云图

    7.华为词云图

    8.惠普词云图

    9.机械革命词云图

    10.联想词云图

    11.荣耀词云图

    12.三星词云图

    13.神州笔记本

    14.微软词云图

    15.小米词云图

    04

    总结

    1.讲解了如何用python爬取『各种品牌』笔记本电脑数据。

    2.利用pandas对excel数据进行统计分析

    3.对统计数据进行动图展示,以及绘制各种精美词云图

    4.如果大家本文有什么地方不明白的可以在下方留言或者下方扫码观看本文代码讲解(手撕过程)

    如果大家对本文代码源码感兴趣,扫码关注『Python爬虫数据分析挖掘』后台回复:笔记本分析 ,获取完整代码!

    本文代码讲解已录成视频,欢迎扫码学习!

    本文手撕代码过程

    如果大家想加群学习,后台点击:加群交流

    ------------- 推荐阅读 -------------

    往期精彩

    1.教你用python爬取『京东』商品数据,原来这么简单!


    2.教你用python爬虫下载1w+『ppt模板』,再也不用付费去购买啦!


    3.python爬取7w+『赘婿』弹幕,发现弹幕比剧还精彩!

    爬虫入门篇

    1.今天只分享python、爬虫入门级学习资料

    爬虫框架篇

    1.以『B站』为实战案例!手把手教你掌握爬虫必备框架『Scrapy』

    2.爬取1907条『课程学习』数据,分析哪类学习资源最受大学生青睐1

    爬虫反爬篇

    1.爬虫遇到反爬机制怎么办? 看看我是如何解决的!

    耐得住寂寞,才能登得顶
    Gitee码云:https://gitee.com/lyc96/projects
  • 相关阅读:
    极致平台开发技巧介绍1如何利用升级包,快速给客户升级
    如何用极致业务基础平台做一个通用企业ERP系列之三启用期间管理设计
    caca需要用到x11作为图形输出
    spring boot 使用 mybatis 开启事务回滚 的总结
    RabbitMQ --- 直连交换机 【 同步操作,等到消费者处理完后返回处理结果 】
    RabbitMQ --- 直连交换机 【 有回调方法,获取消费结果 】
    RabbitMQ --- 直连交换机 【 无回调方法,不能获取消费结果 】
    spring boot 启动警告 WARN 15684 --- [ restartedMain] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources. 解决
    Java基础复习到此结束,统一把源码放到GitHub仓库了,响应开源精神
    用一道题 来 复习 MySQL 的 复杂 sql 语句
  • 原文地址:https://www.cnblogs.com/chenlove/p/14551688.html
Copyright © 2020-2023  润新知