分析
通过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')
爬取到的是这个
数据分析
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和热度都有一定程度的联系,其中点赞数是最重要的