1. 介绍
微博是中国最大的社交媒体之一,樊振东超话是最受粉丝喜欢的一个乒乓球运动员的超话。在这篇文章中,我们将使用Python来分析樊振东超话下粉丝的评论、粉丝的地区及性别。我们将抓取超话下面的评论并使用Python对其进行情感分析,同时提取出评论者的地区和性别。
2. 数据抓取
为了对樊振东超话下粉丝的评论进行分析,我们需要抓取评论数据。我们可以使用Python的requests、beautifulsoup以及selenium等模块来实现。下面是Python爬虫的核心代码:
import time
from selenium import webdriver
from bs4 import BeautifulSoup
# 设置Chrome选项
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--start-maximized')
chrome_options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36')
# 打开Chrome浏览器
driver = webdriver.Chrome(options=chrome_options)
# 设置等待时间
wait_time = 2
# 设置评论地址
url = "https://weibo.com/ttarticle/p/show?id=2309404990312280589797"
# 打开评论链接
driver.get(url)
# 模拟滚动
for i in range(5):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(wait_time)
# 解析网页源代码
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
# 获取评论内容
comments_list = []
comments = soup.find_all('div', {'class' : 'WB_text'})
for comment in comments:
comment_text = comment.get_text().strip()
comments_list.append(comment_text)
# 关闭浏览器
driver.quit()
2.1 接口介绍
在上面的代码中,我们使用了selenium模块来模拟浏览器行为,加载评论数据。我们使用了Chrome作为浏览器内核,并使用了--headless
和--start-maximized
选项来模拟无头浏览器,并将浏览器最大化。此外,我们设置了等待时间wait_time
,以确保页面完全加载完成。
2.2 数据抓取
在抓取了评论页面之后,我们使用了beautifulsoup模块来解析页面源代码,并使用了find_all()
函数来查找所有评论的div
元素,我们将所有评论存储在一个列表comments_list
中,每个评论使用get_text()
来获取评论文本信息。
3.情感分析
在抓取了评论数据之后,我们需要对其进行情感分析。我们可以使用Python的TextBlob
来实现自然语言处理任务,包括情感分析。
from textblob import TextBlob
# 把每条评论的情感分析结果存储在字典中
sentiment = {}
for comment in comments_list:
blob = TextBlob(comment)
sentiment[comment] = blob.sentiment.polarity
在这里,我们遍历所有的评论,使用TextBlob
库对其进行情感分析,并将情感分析结果存储在一个字典sentiment
中。情感分析结果是一个介于-1到1的数字,表示评论的情感倾向,其中-1表示负面情感,0表示中立情感,1表示正面情感。
4.数据分析
4.1 粉丝地区统计
为了统计粉丝地区信息,我们可以使用Python的pandas
模块。下面是代码:
import pandas as pd
# 数据清洗
data = pd.DataFrame({
'Comment' : [k for k, v in sentiment.items() if v != 0],
'Sentiment' : [v for k, v in sentiment.items() if v != 0]
})
# 获取评论者地区
area = []
for comment in data['Comment']:
try:
result = re.search(r'\[(.*?)\]', comment).group(1)
except AttributeError:
result = ''
area.append(result)
# 统计地区数据并可视化
area_data = pd.DataFrame({'Area' : area, 'Count' : [1] * len(area)})
result = area_data.groupby(['Area'])['Count'].agg('sum').reset_index().sort_values(by=['Count'], ascending=False)
print(result)
在上面的代码中,我们首先使用pandas
库创建了一个DataFrame对象,其中Comment
列存储了所有评论的文本,Sentiment
列存储了情感分析结果。我们对情感分析结果进行了清洗,只保留了情感极性不为0的评论。
接下来,我们使用正则表达式re.search(r'\[(.*?)\]', comment).group(1)
从每条评论中提取出地区信息,并存储在一个新的列表area
中。
最后,我们使用groupby()
函数将area_data
按地区进行分组,并统计每个地区的评论数。我们将结果按评论数从高到低排序,并打印出来。
4.2 粉丝性别分析
为了分析粉丝性别信息,我们需要从评论用户名中提取粉丝的性别信息。我们可以通过观察用户名规律,发现男性用户名通常以“先生”或“Boy”结尾,而女性用户名通常以“女士”或“Girl”结尾。
# 获取评论者性别
gender = []
for comment in data['Comment']:
if '先生' in comment or 'Boy' in comment:
gender.append('男')
elif '女士' in comment or 'Girl' in comment:
gender.append('女')
else:
gender.append('未知')
# 统计性别分布
gender_data = pd.DataFrame({'Gender' : gender, 'Count' : [1] * len(gender)})
result = gender_data.groupby(['Gender'])['Count'].agg('sum').reset_index().sort_values(by=['Count'], ascending=False)
print(result)
在上面的代码中,我们使用类似的方式从每个评论中提取出评论者的性别信息,并存储在一个新的列表gender
中。如果未找到性别信息,我们将其标记为未知
。
接下来,我们将性别数据存储在DataFrame
对象中,并使用groupby()
函数对性别进行分组,然后统计每个性别的评论数,并按评论数从高到低排列,最后将结果打印出来。
5. 结论
本文中我们使用Python分析了樊振东超话下粉丝的评论、粉丝的地区和性别。我们首先使用Python的selenium和beautifulsoup模块抓取并解析评论数据,然后使用TextBlob对评论进行情感分析,并将结果存储在一个字典中。我们进一步对评论者的地区和性别进行了统计和分析。通过本文的研究,我们可以了解到樊振东的粉丝主要来自哪些地区以及粉丝的性别分布情况。