爬取微博热搜榜并进行数据分析

这篇具有很好参考价值的文章主要介绍了爬取微博热搜榜并进行数据分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

设计方案

爬虫爬取的内容

:爬取微博热搜榜数据。

网络爬虫设计方案概述

用requests库访问页面用get方法获取页面资源,登录页面对页面HTML进行分析,用beautifulsoup库获取并提取自己所需要的信息。再讲数据保存到CSV文件中,进行数据清洗,数据可视化分析,绘制数据图表,并用最小二乘法进行拟合分析。

主题页面的结构特征分析

1.主题页面的结构与特征分析

:通过观察页面HTML源代码,可以发现每个热搜名称的标题都位于"td",class_='td-02’标签的子标签中,热度和排名则分布在"td",class_='td-03’和"td",class_='td-01’标签中,他们的关系是 class>a>span。按照标签的从属关系 可从标签中遍历出我们所需要的内容。

2.Htmls页面解析

通过页面定位分析发现这是标题所在标签位置,td",class_='td-02“的子标签a 中,我们可以通过find all 函数来提取我们所需要的标题信息
爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
继续审查页面元素 发现热度和排名所在的标签位置,查到所需要的内容的标签位置后,就可以开始编写爬虫程序了
爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘

三、网络爬虫程序设计

1.数据爬取与采集

import requests
from bs4 import BeautifulSoup
import bs4
#定义函数第一步从网络上获取热搜排名网页内容
url = "https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6"
def getHTMLText(url):
    try:
        #设置表头信息
        kv={"User-Agent":"Mozilla/5.0"} 
        r = requests.get(url, headers=kv, timeout=30)  #请求时间30s
        # 解决乱码问题
        r.raise_for_status() 
        r.encoding=r.apparent_encoding  #修改编码方式
        return r.text
    except:
        return ""  #若出现异常则会返回空字符串
#使用BeautifulSoup工具解析页面
html = getHTMLText(url)
soup=BeautifulSoup(html,'html.parser')
# 爬取热搜名字
sou = soup.find_all("td",class_='td-02')
#创立空列表 把热搜名字数据填入
name = []
for x in sou:
    name.append(x.a.string)
# 获取热度排名 
# 同理创立空列表
paiming = []
top = soup.find_all('span')
for y in top:
    paiming.append(y.string)
#用字符串格式化输出数据
print('{:^40}'.format('微博热搜'))
print('{:^15}\t{:^25}\t{:^40}'.format('排名', '热搜内容', '热度'))
list = []
#输出数据的前20条
for i in range(21):
    print('{:^15}\t{:^25}\t{:^40}'.format(i+1, name[i], paiming[i]))
    list.append([i+1,name[i],paiming[i]])
#用pandas对数据进行储存,并生成文件
df= pd.DataFrame(list,columns = ['排名','热搜内容','热度'])
df.to_csv('resou.csv')

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
生成文件
爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘

2.对数据进行清洗和处理

读取文件


df = pd.DataFrame(pd.read_csv('resou.csv'))
#输出信息
print(df)

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
开始进行数据清洗
删除无效列与行


df.drop('热搜内容', axis=1, inplace = True)
df.head() #输出数据前五行

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
检查是否有重复值


df.duplicated() 

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
检查是否有空值


print(df['热度'].isnull().value_counts())
#若有则删除缺失值
df[df.isnull().values==True]
df.corr()

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
将数据统计信息打印出来

df.describe()

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘

3.数据分析与可视化

继续数据分析与可视化
构建线性回归预测模型


from sklearn.linear_model import LinearRegression
X = df.drop("热度", axis = 1)
predict_model = LinearRegression()
predict_model.fit(X, df['排名'])    #训练模型
print("回归系数为:", predict_model.coef_)   # 判断相关性

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
绘制散点图


import matplotlib.pyplot as plt
from scipy.optimize import leastsq
import numpy as np
%matplotlib inline  
排名 = (df["排名"])
热度 = (df["热度"])
plt.rcParams['font.sans-serif']=['SimHei'] #用于正常显示中文标签
plt.figure(figsize=(8,5))
plt.scatter(排名,热度,color=[0,0,1,0.4],label=u"样本数据",linewidth=2)  #颜色用RGB值
plt.title("排名 scatter",color="blue")
plt.xlabel("排名")
plt.ylabel("热度")
plt.legend()
plt.grid()
plt.show()

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
回归散点图


import seaborn as sns
sns.regplot(df.排名,df.热度)
plt.title('排名热度回归散点图')

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
绘制柱状图


plt.figure()
x=np.arange(0,20)
y=df.loc['1':'20','热度']  #选取画图数据范围
plt.bar(x, y,color='c',alpha=0.5) #增加透明度 使图更加美观
plt.xlabel('排名')
plt.ylabel('热度')
plt.title("热搜数据")
plt.show()

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
绘制折线图


plt.figure()
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
x=np.arange(0,20)
y=df.loc['1':'20','热度']  #选取画图数据范围
plt.plot(x, y,'r-o',color='blue')
plt.xlabel('排名')
plt.ylabel('热度')
plt.title("热搜数据")
plt.show()

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
绘制盒图


def box():
    plt.title('热度与排名盒图')
    sns.boxplot(x='排名',y='热度', data=df)
box()

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
用Seaborn绘制各种分布图


import seaborn as sns
sns.jointplot(x="排名",y='热度',data = df, kind='kde', color='r')
sns.jointplot(x="排名",y='热度',data = df, kind='hex')
sns.distplot(df['热度'])

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
绘制单核密度图


sns.kdeplot(df['热度'])

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘
绘制排名与热度的回归图


sns.regplot(df.排名,df.热度)

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘

4…根据排名与热度数据之间的关系,分析两个变量拟合一元二次曲线,建立变量之间的回归方程

# 用最小二乘法得出一元二次拟合方程
import numpy as np
from numpy import genfromtxt
import scipy as sp
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
plt.figure(figsize=(13,6))
plt.scatter(排名,热度,color=[0,0,0.8,0.4],label=u"样本数据",linewidth=2)
plt.xlabel("排名")
plt.ylabel("热度")
plt.legend()
def func(p,x):
    a,b,c=p
    return a*(x**2)+(b*x)+c
def er_func(p,x,y):
    return func(p,x)-y
p0=[2,3,4]
P=leastsq(er_func,p0,args=(排名,热度))
a,b,c=P[0]
x=np.linspace(0,55,100)
y=a*(x**2)+(b*x)+c
plt.plot(x,y,color=[0,0,0.8,0.4],label=u"拟合直线",linewidth=2)
plt.scatter(x,y,color="c",label=u"样本数据",linewidth=2)
plt.legend()
plt.title('排名热度回归曲线')
plt.grid()
plt.show()

爬取微博热搜榜并进行数据分析,数据分析项目,数据分析,信息可视化,数据挖掘

5.完整程序代码

import requests
from bs4 import BeautifulSoup
import bs4
import pandas as pd   #引入pandas用于数据可视化
from pandas import DataFrame
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
from sklearn.linear_model import LinearRegression
#定义函数第一步从网络上获取热搜排名网页内容
url = "https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6"
def getHTMLText(url):
    try:
        #设置表头信息
        kv={"User-Agent":"Mozilla/5.0"} 
        r = requests.get(url, headers=kv, timeout=30)  #请求时间30s
        # 解决乱码问题
        r.raise_for_status() 
        r.encoding=r.apparent_encoding  #修改编码方式
        return r.text
    except:
        return ""  #若出现异常则会返回空字符串


#使用BeautifulSoup工具解析页面
html = getHTMLText(url)
soup=BeautifulSoup(html,'html.parser')


# 爬取热搜名字
sou = soup.find_all("td",class_='td-02')


#创立空列表 把热搜名字数据填入
name = []
for x in sou:
    name.append(x.a.string)


# 获取热度排名 
# 同理创立空列表
paiming = []
top = soup.find_all('span')
for y in top:
    paiming.append(y.string)


#用字符串格式化输出数据
print('{:^40}'.format('微博热搜'))
print('{:^15}\t{:^25}\t{:^40}'.format('排名', '热搜内容', '热度'))
list = []


#输出数据的前20条
for i in range(21):
    print('{:^15}\t{:^25}\t{:^40}'.format(i+1, name[i], paiming[i]))
    list.append([i+1,name[i],paiming[i]])


#用pandas对数据进行储存,并生成文件
df= pd.DataFrame(list,columns = ['排名','热搜内容','热度'])
df.to_csv('resou.csv')


#读取文件
df = pd.DataFrame(pd.read_csv('resou.csv'))
#输出信息
print(df)


#开始进行数据清洗
#删除无效列与行
df.drop('热搜内容', axis=1, inplace = True)
df.head() #输出数据前五行



#检查是否有重复值
df.duplicated()   


#检查是否有空值
print(df['热度'].isnull().value_counts())
#若有则删除缺失值
df[df.isnull().values==True]
df.corr()


# 将数据统计信息打印出来
df.describe()


#进行数据分析与可视化
X = df.drop("热度", axis = 1)
predict_model = LinearRegression()
predict_model.fit(X, df['排名'])    #训练模型
print("回归系数为:", predict_model.coef_)   # 判断相关性



#绘制散点图
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
import numpy as np
%matplotlib inline  
排名 = (df["排名"])
热度 = (df["热度"])
plt.rcParams['font.sans-serif']=['SimHei'] #用于正常显示中文标签
plt.figure(figsize=(8,5))
plt.scatter(排名,热度,color=[0,0,1,0.4],label=u"样本数据",linewidth=2)  #颜色用RGB值
plt.title("排名 scatter",color="blue")
plt.xlabel("排名")
plt.ylabel("热度")
plt.legend()
plt.grid()
plt.show()


#回归散点图
import seaborn as sns
sns.regplot(df.排名,df.热度)
plt.title('排名热度回归散点图')


#绘制柱状图
plt.figure()
x=np.arange(0,20)
y=df.loc['1':'20','热度']  #选取画图数据范围
plt.bar(x, y,color='c',alpha=0.5) #增加透明度 使图更加美观
plt.xlabel('排名')
plt.ylabel('热度')
plt.title("热搜数据")
plt.show()


# 绘制折线图
plt.figure()
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
x=np.arange(0,20)
y=df.loc['1':'20','热度']  #选取画图数据范围
plt.plot(x, y,'r-o',color='blue')
plt.xlabel('排名')
plt.ylabel('热度')
plt.title("热搜数据")
plt.show()


#绘制盒图
def box():
    plt.title('热度与排名盒图')
    sns.boxplot(x='排名',y='热度', data=df)
box()


#用Seaborn绘制各种分布图
sns.jointplot(x="排名",y='热度',data = df, kind='kde', color='r')
sns.jointplot(x="排名",y='热度',data = df, kind='hex')
sns.distplot(df['热度'])


# 绘制单核密度图
sns.kdeplot(df['热度'])


#绘制排名与热度的回归图
sns.regplot(df.排名,df.热度)


# 用最小二乘法得出一元二次拟合方程
plt.figure(figsize=(13,6))
plt.scatter(排名,热度,color=[0,0,0.8,0.4],label=u"样本数据",linewidth=2)
plt.xlabel("排名")
plt.ylabel("热度")
plt.legend()
def func(p,x):
    a,b,c=p
    return a*(x**2)+(b*x)+c
def er_func(p,x,y):
    return func(p,x)-y
p0=[2,3,4]
P=leastsq(er_func,p0,args=(排名,热度))
a,b,c=P[0]
x=np.linspace(0,55,100)
y=a*(x**2)+(b*x)+c
plt.plot(x,y,color=[0,0,0.8,0.4],label=u"拟合直线",linewidth=2)
plt.scatter(x,y,color="c",label=u"样本数据",linewidth=2)
plt.legend()
plt.title('排名热度回归曲线')
plt.grid()
plt.show()

四、结论

1.通过对热搜主题的数据分析与可视化的回归曲线可以看出 热度和排名是成正相关的,数据的可视化与图表可以清晰明了的将数据的关系体现出来,让我们直观的了解热度和排名的变化。

2.此次程序设计对于我来还是有难度的,初期对HTML页面的不熟悉,我不断的去查阅资料和视频一次次的去解决,通过这次设计我了解学习了BeautifulSoup库的使用,BeautifulSoup库在用于HTML解析和提取相关信息方面是非常厉害的,BeautifulSoup库的学习对以后的爬虫设计上很有帮助文章来源地址https://www.toymoban.com/news/detail-609295.html

到了这里,关于爬取微博热搜榜并进行数据分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬虫—爬取微博评论数据

    今日,分享编写Python爬虫程序来实现微博评论数据的下载。 具体步骤如下👇👇👇: Step1 :电脑访问手机端微博_https://m.weibo.cn/_ Step2 :打开一条微博_https://m.weibo.cn/detail/4907031376694279_ Step3 :URL地址中的_49070__31376694279_就是需要爬取的微博ID Step4 :将ID填写到_main_下即可,也支

    2024年03月21日
    浏览(59)
  • Python爬虫 | 爬取微博和哔哩哔哩数据

    目录 一、bill_comment.py 二、bili_comment_pic.py 三、bilibili.py 四、bilihot_pic.py 五、bilisearch_pic.py 六、draw_cloud.py 七、weibo.py 八、weibo_comment.py 九、weibo_comment_pic.py 十、weibo_pic.py 十一、weibo_top.py 十二、weibo_top_pic.py 十三、weibo_top_pie.py 十四、pachong.py 十五、代码文件说明 pachong: b站、

    2024年02月12日
    浏览(57)
  • 六个步骤学会使用Python爬虫爬取数据(爬虫爬取微博实战)

    用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。 第一步:安装requests库和BeautifulSoup库 在程序中两个库的书写是这样的: 由于我使用的是pycharm进行的python编程。所以

    2024年02月08日
    浏览(60)
  • 【爬虫实战】用python爬取微博任意关键词搜索结果、exe文件

    项目功能简介: 1.交互式配置; 2.两种任意来源(直接输入、本地文件); 3.自动翻页(无限爬取); 4.指定最大翻页页码; 5.数据保存到csv文件; 6.程序支持打包成exe文件; 7.项目操作说明文档; 一.最终效果 视频演示: 用python爬取微博搜索结果、exe文件

    2024年02月02日
    浏览(70)
  • 【爬虫、数据可视化实战】以“人口”话题为例爬取实时微博数据并进行舆情分析

    近期在weibo上讨论的比较热的话题无非就是“人口”了。TaoTao也看了一些大家发的内容。但是感觉单纯的看文字内容不能很直观的反应出来大家的关切。索性就使用爬虫对数据进行爬取,同时结合着数据可视化的方式让数据自己开口说话。那么接下来就让我们使用技术进行分

    2024年01月23日
    浏览(54)
  • 用python语言爬虫爬取微博评论--上--初步爬虫(超详细版,大学生不骗大学生)

    目录 一、找到页面  二、学会使用检查元素 2.1 打开检查元素界面 2.2 找到所有评论所在的位置 2.2.1 搜索评论 2.2.2  找到data表 三、基础部分代码实现 ​​​​​​​ 全部已经更完(下面两个链接是中和下) https://blog.csdn.net/m0_68325382/article/details/137234661?spm=1001.2014.3001.5502 爬

    2024年04月10日
    浏览(56)
  • 屏蔽百度热搜榜

    电脑上网查询资料或者问题时,百度热搜榜紧贴着搜索结果,且占了将近一半的页面,此时注意力很容易被分散,有时候点几个吸引人的热搜后就忘了一开始要做的事情。因此,屏蔽百度热搜榜很有必要。但是百度设置是不能关闭热搜榜的,所以我们需要借助一些插件来实现

    2024年02月07日
    浏览(43)
  • 【python】爬取百度热搜排行榜Top50+可视化【附源码】【送数据分析书籍】

        这篇博客将介绍如何使用Python编写一个爬虫程序,从斗鱼直播网站上获取图片信息并保存到本地。我们将使用 request s 模块发送HTTP请求和接收响应,以及 os 模块处理文件和目录操作。         如果出现模块报错         进入控制台输入:建议使用国内镜像源    

    2024年02月03日
    浏览(56)
  • Python|30行代码实现微博热榜爬虫(及可视化进阶)

    当你想要跟踪微博的热门话题时,通过编写一个Python爬虫,来获取微博热搜榜单上的实时数据,并将其可视化展示出来,通过邮件或QQ机器人将其推送,亦可以将其存档,用以保留不同时期的舆论热点。 此外,排行榜项目一向是学习Python爬虫时必备的练手项目,通过本项目,

    2024年02月05日
    浏览(51)
  • 【可视化大屏】用Python开发「淄博烧烤」微博热评舆情分析大屏

    目录 一、开发背景 二、爬虫代码 2.1 爬微博列表 2.2 爬微博评论 2.3 导入MySQL数据库 三、可视化代码 3.1 大标题 3.2 词云图(含:加载停用词) 3.3 玫瑰图(含:snownlp情感分析) 3.4 柱形图-TOP10 3.5 折线图-讨论热度趋势 3.6 地图-IP分布 3.7 Page组合大屏 四、彩蛋-多种颜色主

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包