<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)高玩博主的秘密...

          共 10357字,需瀏覽 21分鐘

           ·

          2020-12-24 02:42

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

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

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

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

          檢查可以發(fā)現(xiàn),只需要簡單的構(gòu)造URL去請求,抓取json數(shù)據(jù),再從中提取出我們想要的數(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ù)',?'博客等級',?'是否認(rè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(1,?11):
          ?#?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']??#?博客等級
          ????????is_expert?=?item['is_expert']???????????#?是否認(rè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ù)類型、內(nèi)存、索引、列名信息

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

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

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

          1. pyecharts簡介和安裝

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

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

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

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

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

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

          首先,來看一看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)差距不大。

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

          #?-*-?coding:?UTF-8?-*-
          """
          @File ???:博客專家占比.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)證了博客專家和沒有認(rèn)證的數(shù)量
          df?=?pd.read_excel('rank_datas.xlsx')
          datas?=?df['是否認(rèn)證為博客專家'].value_counts()
          print(datas)
          labels?=?['已認(rèn)證博客專家',?'未認(rè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":?[4,?4,?0,?0],
          ????????????????},
          ????????????????"hr":?{
          ????????????????????"borderColor":?"#aaa",
          ????????????????????"width":?"100%",
          ????????????????????"borderWidth":?0.5,
          ????????????????????"height":?0,
          ????????????????},
          ????????????????"b":?{"fontSize":?16,?"lineHeight":?33},
          ????????????????"per":?{
          ????????????????????"color":?"#eee",
          ????????????????????"backgroundColor":?"#334455",
          ????????????????????"padding":?[2,?4],
          ????????????????????"borderRadius":?2,
          ????????????????},
          ????????????},
          ????????),
          ????)
          ????.set_colors(['#FF1493',?'#BA55D3'])
          ????.set_global_opts(title_opts=opts.TitleOpts(title="周排Top100中博客專家占比"))
          ????.render("pie_rich_label.html")
          )



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

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

          #?-*-?coding:?UTF-8?-*-
          """
          @File ???:博客等級分布.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ì)各博客等級博主的數(shù)量
          df?=?pd.read_excel('rank_datas.xlsx')
          datas?=?df['博客等級'].value_counts()
          #?print(datas)
          labels?=?[f'等級{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="博客等級",????#?系列名稱
          ????????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="博客等級分布",
          ????????????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)圖,餅圖等無類目軸的圖表中使用
          ?????????),
          ????????label_opts=opts.LabelOpts(color="#fff"),
          ????)
          ????.render("customized_pie.html")
          )

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

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

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

          #?-*-?coding:?UTF-8?-*-
          """
          @File ???:粉絲數(shù)量對比.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ì)各博客等級博主的數(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ù)對比",
          ??????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ù)對比.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ì)各博客等級博主的數(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ù)對比",
          ??????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ù)和綜合評價(jià)都遙遙領(lǐng)先的 Top1 博主,獲贊數(shù)不再領(lǐng)先,有很多位博主擁有的獲贊數(shù)都比他多。而獲贊數(shù)數(shù)量最少的僅有250,很是驚訝,寫程序查看發(fā)現(xiàn)跟之前博客等級為5的是同一個(gè)博主,但這位博主粉絲數(shù)卻不少。

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

          PS公號內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起?100 天計(jì)劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下如果感覺文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!

          神秘禮包獲取方式

          識別文末二維碼,回復(fù):1024

          瀏覽 35
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  大荫蒂视频另类XX | 人人操人人操人人操人人 | 逼色网站亚洲 | www.久久久 | 国产777视频 |