<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          小伙爬取CSDN博客TOP100榜單,發(fā)現(xiàn)高玩博主的秘密...

          共 20996字,需瀏覽 42分鐘

           ·

          2020-12-18 10:06

          周末閑來(lái)無(wú)事,爬了爬CSDN榜單數(shù)據(jù)。

            一、數(shù)據(jù)獲取

          我們需要爬取的數(shù)據(jù)為CSDN周榜單,如下:

          URL:https://blog.csdn.net/rank/writing_rank

          檢查可以發(fā)現(xiàn),只需要簡(jiǎn)單的構(gòu)造URL去請(qǐng)求,抓取json數(shù)據(jù),再?gòu)闹刑崛〕鑫覀兿胍臄?shù)據(jù)保存到Excecl。

          代碼如下

          # -*- coding: UTF-8 -*-
          """
          @File    :demo.py
          @Author  :葉庭云
          @CSDN    :https://yetingyun.blog.csdn.net/
          """

          import requests
          import json
          import logging
          import openpyxl

          wb = openpyxl.Workbook()
          sheet = wb.active
          sheet.append(['博主昵稱''排名''綜合得分''粉絲數(shù)''獲贊數(shù)''博客等級(jí)''是否認(rèn)證為博客專(zhuān)家'])
          logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')


          headers = {
              'user-agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'
          }

          for i in range(111):
           # username={改成你的username}
              url = f'https://blog.csdn.net/api/WritingRank/weekList?username={改成你的username}&page={i}&size=10'
              rep = requests.get(url, headers=headers)
              data = json.loads(rep.text)
              datas = data['data']['list']
              for item in datas:
                  score = item['score']                   # 綜合得分
                  ranking = item['ranking']               # 排名
                  user_nickname = item['user_nickname']   # 博主昵稱
                  fans_num = item['fans_num']             # 粉絲數(shù)
                  fav_num = item['fav_num']               # 獲贊數(shù)
                  level = item['profile_level']['level']  # 博客等級(jí)
                  is_expert = item['is_expert']           # 是否認(rèn)證為博客專(zhuān)家
                  sheet.append([user_nickname, ranking, score, fans_num, fav_num, level, is_expert])
                  logging.info([user_nickname, ranking, score, fans_num, fav_num, level, is_expert])


          wb.save('rank_datas.xlsx')

            二、查看數(shù)據(jù)

          隨機(jī)抽取8行數(shù)據(jù)查看

          查看數(shù)據(jù)類(lèi)型、內(nèi)存、索引、列名信息

          數(shù)值列的統(tǒng)計(jì)信息

          各列的相關(guān)系數(shù)

            三、pyecharts數(shù)據(jù)可視化

          1. pyecharts簡(jiǎn)介和安裝

          Echarts 是一個(gè)由百度開(kāi)源的數(shù)據(jù)可視化,憑借著良好的交互性,精巧的圖表設(shè)計(jì),得到了眾多開(kāi)發(fā)者的認(rèn)可。而 Python 是一門(mén)富有表達(dá)力的語(yǔ)言,很適合用于數(shù)據(jù)處理。當(dāng)數(shù)據(jù)分析遇上數(shù)據(jù)可視化時(shí),pyecharts 誕生了。

          • 簡(jiǎn)潔的 API 設(shè)計(jì),使用如絲滑般流暢,支持鏈?zhǔn)秸{(diào)用
          • 囊括了 30+ 種常見(jiàn)圖表,應(yīng)有盡有
          • 支持主流 Notebook 環(huán)境,Jupyter Notebook 和 JupyterLab
          • 可輕松集成至 Flask,Sanic,Django 等主流 Web 框架
          • 高度靈活的配置項(xiàng),可輕松搭配出精美的圖表
          • 詳細(xì)的文檔和示例,幫助開(kāi)發(fā)者更快的上手項(xiàng)目
          • 多達(dá) 400+ 地圖文件,并且支持原生百度地圖,為地理數(shù)據(jù)可視化提供強(qiáng)有力的支持

          pyecharts版本v0.5.x 和 v1 間不兼容,v1 是一個(gè)全新的版本,語(yǔ)法也有很大不同。

          # 安裝pyecharts
          pip install pyecharts -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
          import pyecharts

          print(pyecharts.__version__)         # 查看pyecharts版本

          2. 數(shù)據(jù)可視化

          首先,來(lái)看一看Top10的大佬博主都是哪些人

          # -*- coding: UTF-8 -*-
          """
          @File    :漏斗圖_top10.py
          @Author  :葉庭云
          @CSDN    :https://yetingyun.blog.csdn.net/
          """

          import pandas as pd
          import pyecharts.options as opts
          from pyecharts.charts import Funnel
          from pyecharts.globals import CurrentConfig, ThemeType

          # 引用本地 js 資源
          CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

          # 讀取數(shù)據(jù)
          df = pd.read_excel('rank_datas.xlsx')
          # 取博主昵稱  綜合得分兩列數(shù)據(jù)
          df1 = df[['博主昵稱''綜合得分']]
          # print(df1)

          # 取Top10博主數(shù)據(jù)
          labels = list(df1['博主昵稱'][:10])
          values = list(df1['綜合得分'][:10])

          data = [[labels[x], int(values[x])] for x in range(len(labels))]

          # 漏斗圖可視化
          c = (
              Funnel(init_opts=opts.InitOpts(width="1200px", height="600px", theme=ThemeType.LIGHT))
              .add(
                  series_name='',    # 系列名稱,用于 tooltip 的顯示,legend 的圖例篩選。
                  data_pair=data,    # 系列數(shù)據(jù)項(xiàng),格式為 [(key1, value1), (key2, value2)]
                  gap=3,   # 數(shù)據(jù)圖形間距
                  label_opts=opts.LabelOpts(is_show=True, position="inside"), # 標(biāo)簽配置項(xiàng),參考 `series_options.LabelOpts`
              )
              .set_global_opts(
                  title_opts=opts.TitleOpts(title="CSDN周排Top10博主一覽"),      # 標(biāo)題
                  legend_opts=opts.LegendOpts(type_="scroll", pos_top='50%', pos_left="80%", orient="vertical"),  # 調(diào)整圖例位置
              )
              .render('funnel_chart.html')
          )

          運(yùn)行效果如下:

          排在第一的大佬博主是:一個(gè)處女座的程序猿綜合指標(biāo):894,遠(yuǎn)高于之后的其他博主,而從漏斗圖也容易看出,后面 9 位博主綜合指標(biāo)差距不大。

          再來(lái)看看周排 Top100 博主里,已認(rèn)證博客專(zhuān)家的比例

          # -*- coding: UTF-8 -*-
          """
          @File    :博客專(zhuān)家占比.py
          @Author  :葉庭云
          @CSDN    :https://yetingyun.blog.csdn.net/
          """

          import pandas as pd
          from pyecharts import options as opts
          from pyecharts.charts import Pie
          from pyecharts.globals import CurrentConfig

          # 引用本地 js 資源
          CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

          # 讀取數(shù)據(jù)   統(tǒng)計(jì)認(rèn)證了博客專(zhuān)家和沒(méi)有認(rèn)證的數(shù)量
          df = pd.read_excel('rank_datas.xlsx')
          datas = df['是否認(rèn)證為博客專(zhuān)家'].value_counts()
          print(datas)
          labels = ['已認(rèn)證博客專(zhuān)家''未認(rèn)證博客專(zhuān)家']
          value = datas.values
          data = [[i, int(j)] for i, j in zip(labels, value)]
          c = (
              Pie()
              .add(
                  series_name="",  # 系列名稱,用于 tooltip 的顯示,legend 的圖例篩選。
                  data_pair=data,  # 系列數(shù)據(jù)項(xiàng),格式為 [(key1, value1), (key2, value2)]
                  radius=["40%""60%"],  # 餅圖的半徑,數(shù)組的第一項(xiàng)是內(nèi)半徑,第二項(xiàng)是外半徑
                  # 富文本設(shè)置
                  label_opts=opts.LabelOpts(
                      position="outside",
                      formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}  {per|go7utgvlrp%}  ",
                      background_color="#eee",
                      border_color="#aaa",
                      border_width=1,
                      border_radius=4,
                      rich={
                          "a": {"color""#999""lineHeight"22"align""center"},
                          "abg": {
                              "backgroundColor""#e3e3e3",
                              "width""100%",
                              "align""right",
                              "height"22,
                              "borderRadius": [4400],
                          },
                          "hr": {
                              "borderColor""#aaa",
                              "width""100%",
                              "borderWidth"0.5,
                              "height"0,
                          },
                          "b": {"fontSize"16"lineHeight"33},
                          "per": {
                              "color""#eee",
                              "backgroundColor""#334455",
                              "padding": [24],
                              "borderRadius"2,
                          },
                      },
                  ),
              )
              .set_colors(['#FF1493''#BA55D3'])
              .set_global_opts(title_opts=opts.TitleOpts(title="周排Top100中博客專(zhuān)家占比"))
              .render("pie_rich_label.html")
          )



          運(yùn)行效果如下:

          可以發(fā)現(xiàn),在周排 Top100 的博主里,近 8 成都已認(rèn)證博客專(zhuān)家,那這些 Top100 博主的等級(jí)分布呢?

          # -*- coding: UTF-8 -*-
          """
          @File    :博客等級(jí)分布.py
          @Author  :葉庭云
          @CSDN    :https://yetingyun.blog.csdn.net/
          """

          import pandas as pd
          from pyecharts import options as opts
          from pyecharts.charts import Pie
          from pyecharts.globals import CurrentConfig

          # 引用本地 js 資源
          CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

          # 讀取數(shù)據(jù)   統(tǒng)計(jì)各博客等級(jí)博主的數(shù)量
          df = pd.read_excel('rank_datas.xlsx')
          datas = df['博客等級(jí)'].value_counts()
          # print(datas)
          labels = [f'等級(jí){i}' for i in datas.index]
          nums = [int(j) for j in datas]
          data = [[i, j] for i, j in zip(labels, nums)]

          print(data)

          c = (
              # 寬  高  背景顏色
              Pie(init_opts=opts.InitOpts(width="1000px", height="600px", bg_color="#2c343c"))
              .add(
                  series_name="博客等級(jí)",    # 系列名稱
                  data_pair=data,             # 系列數(shù)據(jù)項(xiàng),格式為 [(key1, value1), (key2, value2)]
                  rosetype="radius",        # radius:扇區(qū)圓心角展現(xiàn)數(shù)據(jù)的百分比,半徑展現(xiàn)數(shù)據(jù)的大小
                  radius="55%",             # 餅圖的半徑
                  center=["50%""50%"],    # 餅圖的中心(圓心)坐標(biāo),數(shù)組的第一項(xiàng)是橫坐標(biāo),第二項(xiàng)是縱坐標(biāo)
                  label_opts=opts.LabelOpts(is_show=False, position="center"),   #  標(biāo)簽配置項(xiàng)
              )
              .set_global_opts(
                  title_opts=opts.TitleOpts(
                      title="博客等級(jí)分布",
                      pos_left="center",
                      pos_top="20",
                      title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
                  ),
                  legend_opts=opts.LegendOpts(is_show=False),
              )
              .set_series_opts(
                  tooltip_opts=opts.TooltipOpts(
                      trigger="item", formatter="{a} 
          {b}: {c} (go7utgvlrp%)"
            # 'item': 數(shù)據(jù)項(xiàng)圖形觸發(fā),主要在散點(diǎn)圖,餅圖等無(wú)類(lèi)目軸的圖表中使用
                   ),
                  label_opts=opts.LabelOpts(color="#fff"),
              )
              .render("customized_pie.html")
          )

          運(yùn)行效果如下:

          發(fā)現(xiàn)了一些有意思的事情,周排 Top100 的博主們博客等級(jí)大都分布在等級(jí)7、等級(jí)8,分別占比42%、29%,等級(jí)5和等級(jí)11的博主都僅有一位,看看他倆是誰(shuí)

          最后來(lái)看看這些博主粉絲數(shù)和獲贊數(shù)對(duì)比

          # -*- coding: UTF-8 -*-
          """
          @File    :粉絲數(shù)量對(duì)比.py
          @Author  :葉庭云
          @CSDN    :https://yetingyun.blog.csdn.net/
          """


          import pandas as pd
          from pyecharts import options as opts
          from pyecharts.charts import Bar
          from pyecharts.globals import CurrentConfig, ThemeType

          # 引用本地 js 資源
          CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

          # 讀取數(shù)據(jù)   統(tǒng)計(jì)各博客等級(jí)博主的數(shù)量
          df = pd.read_excel('rank_datas.xlsx')
          nums = [int(x) for x in df['粉絲數(shù)']]
          rank = [int(y) for y in df['排名']]

          c = (
              Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
              .add_xaxis(xaxis_data=rank)
              .add_yaxis(
            series_name='粉絲數(shù)', yaxis_data=nums,
            label_opts=opts.LabelOpts(is_show=False)
                )
              .set_global_opts(
                              xaxis_opts=opts.AxisOpts(name='排名'),
               yaxis_opts=opts.AxisOpts(
                 name='粉絲數(shù)', min_=0, max_=320000,     # y軸刻度的最小值 最大值
               ),
               title_opts=opts.TitleOpts(
                title="Top100博主的粉絲數(shù)對(duì)比",
                title_textstyle_opts=opts.TextStyleOpts(
                 font_family="KaiTi", font_size=20, color="black"
                )
               )
              )
           .set_series_opts(label_opts=opts.LabelOpts(is_show=False),
               markpoint_opts=opts.MarkPointOpts(
               data=[
                opts.MarkPointItem(type_="min", name="最小值"),
                opts.MarkPointItem(type_="average", name="平均值")]),
               markline_opts=opts.MarkLineOpts(
               data=[
                opts.MarkLineItem(type_="average", name="平均值")]))
              .render('bar_chart.html')
          )


          運(yùn)行效果如下:

          排名第一的博主粉絲數(shù)量超多,有309147位粉絲,遠(yuǎn)高于其他博主,粉絲數(shù)量最少的也有1080

          # -*- coding: UTF-8 -*-
          """
          @File    :點(diǎn)贊數(shù)對(duì)比.py
          @Author  :葉庭云
          @CSDN    :https://yetingyun.blog.csdn.net/
          """

          import pandas as pd
          from pyecharts import options as opts
          from pyecharts.charts import Bar
          from pyecharts.globals import CurrentConfig, ThemeType

          # 引用本地 js 資源
          CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'

          # 讀取數(shù)據(jù)   統(tǒng)計(jì)各博客等級(jí)博主的數(shù)量
          df = pd.read_excel('rank_datas.xlsx')
          nums = [int(x) for x in df['獲贊數(shù)']]
          rank = [int(y) for y in df['排名']]

          c = (
              Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
              .add_xaxis(xaxis_data=rank)
              .add_yaxis(
            series_name='獲贊數(shù)', yaxis_data=nums,
            label_opts=opts.LabelOpts(is_show=False)
                )
              .set_global_opts(
                              xaxis_opts=opts.AxisOpts(name='排名'),
               yaxis_opts=opts.AxisOpts(
                 name='獲贊數(shù)', min_=0, max_=40000,     # y軸刻度的最小值 最大值
               ),
               title_opts=opts.TitleOpts(
                title="Top100博主的獲贊數(shù)對(duì)比",
                title_textstyle_opts=opts.TextStyleOpts(
                 font_family="KaiTi", font_size=20, color="#fff"
                )
               )
              )
           .set_series_opts(label_opts=opts.LabelOpts(is_show=False),
               markpoint_opts=opts.MarkPointOpts(
               data=[
                opts.MarkPointItem(type_="max", name="最小值"),
                opts.MarkPointItem(type_="min", name="最小值"),
                opts.MarkPointItem(type_="average", name="平均值")]),
               markline_opts=opts.MarkLineOpts(
               data=[
                opts.MarkLineItem(type_="average", name="平均值")]))
              .render('bar_chart1.html')
          )


          運(yùn)行效果如下:

          意想不到的事情發(fā)生了,粉絲數(shù)和綜合評(píng)價(jià)都遙遙領(lǐng)先的 Top1 博主,獲贊數(shù)不再領(lǐng)先,有很多位博主擁有的獲贊數(shù)都比他多。而獲贊數(shù)數(shù)量最少的僅有250,很是驚訝,寫(xiě)程序查看發(fā)現(xiàn)跟之前博客等級(jí)為5的是同一個(gè)博主,但這位博主粉絲數(shù)卻不少。

          庭云回到主頁(yè)看著自己的博客數(shù)據(jù),陷入了沉思~~

          作者:葉庭云 
          CSDN:https://yetingyun.blog.csdn.net/ 

          本文來(lái)自公眾號(hào)讀者投稿,歡迎各位童鞋向公號(hào)投稿,點(diǎn)擊下面圖片了解詳情!

          -END-



          掃碼添加早小起

          1. 回復(fù)「進(jìn)群」進(jìn)入Python技術(shù)交流群

          2. 回復(fù)「Python」獲得Python技術(shù)圖書(shū)

          3. 回復(fù)「習(xí)題」領(lǐng)取Python數(shù)據(jù)處理200題




          瀏覽 43
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  啊啊啊插笔网站 | 99九九99九九九99九他书对 | 12一15女人A片毛 | 五月婷婷激情视频 | 国产一区在线视频 |