禁止套娃!用csdn写在csdn上的爬取的csdnTop100热榜,并进行数据分析(巨简单,快进来看看!)

分析

通过f12,再XHR过滤掉其它内容,容易找到Top100的接口
是这样的

url = 'https://blog.csdn.net/phoenix/web/blog/hotRank?page=' + \
        str(i)+'&pageSize=25'

总共4页,用一个循环搞定
接着博主采用了json库解析

ps,csdn的cookie真持久,昨晚来不及爬取了,现在没更新cookie,依然能用…

最后用二维列表储存
用pandas输出csv文件
总共20行有效代码吧,非常easy
代码如下

import requests
from bs4 import BeautifulSoup
import time
import re
import pandas as pd
import json

headers={#自行填写cookie以及user-agent
}

target = []
for i in range(4):
    url = 'https://blog.csdn.net/phoenix/web/blog/hotRank?page=' + \
        str(i)+'&pageSize=25'

    html = requests.get(url, headers=headers).text
    res = json.loads(html)
    for x, y in res.items():
        if x == 'data':
            d = y
    for i in d:
        target.append([i['hotRankScore'], i['articleTitle'],
                       i['commentCount'], i['favorCount'], i['viewCount']])

out = pd.DataFrame(target)
out.columns = ['hotRankScore', 'artivleTitle',
               'commentCount', 'favorCount', 'viewCount']
out.to_csv('csdnTop100.csv')

爬取到的是这个
禁止套娃!用csdn写在csdn上的爬取的csdnTop100热榜,并进行数据分析(巨简单,快进来看看!)

数据分析

import matplotlib.pylab as plt
import seaborn as sns
from pandas_profiling import ProfileReport
import pandas as pd

df=pd.read_csv(r'C:\Users\hp\Desktop\python\leetcode\csdnTop100.csv')
df.info()

#在最后一列插入排名,方便做回归分析
df.insert(6,'rank',[x for x in range(1,101)])

df=df.drop(['Unnamed: 0'],axis=1)

df.head()

df.describe()

Row, Col = df.shape
print(f'There are {Row} rows and {Col} columns')

df.isna().sum()

#频率直方图
sns.distplot(df['hotRankScore'],color='g')

#散点图
sns.scatterplot(data=df['hotRankScore'])

#变量关系图
sns.pairplot(df)

f, ax = plt.subplots(figsize=(14, 8))

sns.heatmap(df.corr(), annot=True, cmap="Blues", fmt='.0f',
            ax=ax, linewidths=5, cbar=False,
            annot_kws={"size": 16})

plt.xticks(size=18)
plt.yticks(size=12, rotation=0)
plt.ylabel("Variables")
plt.title("Descriptive Statistics", size=16)
plt.show()

#热力图
sns.heatmap(abs(df.corr()), annot=True)

plt.figure(figsize=(18, 10))
ax1=plt.subplot(2,2,1)
ax2=plt.subplot(2,2,2)
ax3=plt.subplot(2,1,2)

#线性图
plt.sca(ax1)
sns.lineplot(x='rank',y='commentCount',data=df)
 
plt.sca(ax2)
sns.lineplot(x='rank',y='favorCount',data=df)

plt.sca(ax3)
sns.lineplot(x='rank',y='viewCount',data=df)

这些是数据分析的代码,可以跟着敲一下,注意,使用的是Jupyter
由于时间关系,就不放图了
时间关系,简单分析一下
由图可以看出,热度是影响排名最重要的因素
从热力图,view,comment以及favor和热度都有一定程度的联系,其中点赞数是最重要的

看官,点个赞呀~

上一篇:系统架构-基于卫星的导航


下一篇:2021-04-16