昨天在看头条的时候发现,结婚登记人数已连续7年下降,去年创17年来新低
我都惊呆了
细看发现2020年,官方统计的结婚登记人数共计814.33万对,较2019年减少了113万对。
这也是自2013年达到1346.93万对后,连续7年下降。2020年814.33万对的结婚登记人数,也创下了自2003年(国家统计局官网数据:811.4万对)以来,近17年中的新低。
我们观察评论发现,大家对结婚率低这种现象都有自己的看法
我们今天就用爬虫来获取这些评论数据,看看除了看到的这些原因还有哪些是不为我们所知的
需求分析
我们要获取的数据有当前文章下的评论者的
用户名称、
评论内容、
帖子回复数、
评论点赞数、
和评论时间等
网页分析
首先我们F12打开浏览器开发者模式如下:
找到如上图评论所在位置以及网页请求的真实url
观察url特点,count=20代表每页十条评论数据,offset=0、20、40控制翻页,其余参数不发生变化
https://www.toutiao.com/article/v2/tab_comments/?aid=24&app_name=toutiao_web&offset=0&count=20&group_id=7032951744313164295&item_id=7032951744313164295
https://www.toutiao.com/article/v2/tab_comments/?aid=24&app_name=toutiao_web&offset=20&count=20&group_id=7032951744313164295&item_id=7032951744313164295
https://www.toutiao.com/article/v2/tab_comments/?aid=24&app_name=toutiao_web&offset=40&count=20&group_id=7032951744313164295&item_id=7032951744313164295
https://www.toutiao.com/article/v2/tab_comments/?aid=24&app_name=toutiao_web&offset=60&count=20&group_id=7032951744313164295&item_id=7032951744313164295
据此我们可以构造出多页请求的请求连接
url =f'https://www.toutiao.com/article/v2/tab_comments/?aid=24&app_name=toutiao_web&offset={(page-1)*20}&count=20&group_id=7032951744313164295&item_id=7032951744313164295'
发送请求
我们使用刚才找到的url先来获取单页请求信息
url =f'https://www.toutiao.com/article/v2/tab_comments/?aid=24&app_name=toutiao_web&offset={(page-1)*20}&count=20&group_id=7032951744313164295&item_id=7032951744313164295'
headers = {
'cookie':'xxxxxxxxxx',
'referer':'xxxxxxxxxx',
'user-agent':'xxxxxxxxxx'
}
resp = requests.get(url, headers = headers)
结果如下:
可以看到这是一个json格式的数据集,我们要获取的信息都在data列表的comment中。
分析到这里了,接下来就很简单了。
foriteminjson_data:
# 用户名称
user = item['comment']['user_name']
# 评论内容
text = item['comment']['text']
# 贴子回复数
reply = item['comment']['reply_count']
# 评论时间
times = item['comment']['create_time']
rls_time = time.strftime('%Y-%m-%d %H:%M', time.localtime(times))
# 评论点赞数
stars = item['comment']['digg_count']
ic(user, stars, rls_time, reply, text)
'''
ic| user: '快乐饼干Zp'
stars: 1741
rls_time: '2021-11-21 17:42'
reply: 239
text: '别再说是疫情惹的祸'
ic| user: '桐庐夜读'
stars: 253
rls_time: '2021-11-21 17:47'
reply: 43
text: '连续七年结婚率下降,不结婚何来生育率'
ic| user: 'Lily王之涵'
stars: 148
rls_time: '2021-11-21 17:50'
reply: 59
text: '2020年结婚的新人有我一个[可爱]'
ic| user: '小涛仔的生活视频'
stars: 206
rls_time: '2021-11-21 17:52'
reply: 43
text: '农村男光棍太多,结不起婚,也没有女的,我村有三十多个光棍,却没有一个未婚女的,真实的'
ic| user: '番茄1543353620246856'
stars: 197
rls_time: '2021-11-21 18:48'
reply: 11
text: ('现在有多少人敢结婚啊,万一遇到个渣渣,聊离婚都是麻烦。
'
'我朋友,遇到个渣男,各种上诉,终于男的答应离婚了,从广东到四川的车费都是我朋友给的,不给就不来。
'
'给了,来先申请离婚。结果中间遇到疫情,拖着了。错过了。又要重新来过。然后那男的就嫌麻烦,不来了。。。
'
'从13年结了婚生了孩子,这男人就没管过。还打我朋友。把我朋友打跑了,我朋友自己带孩子。这男人口口声声还说跟孩子讲,他爸爸死了。')
'''
多页获取
先获取2000条数据作为测试使用
forpageinrange(1,200+1):
url =f'https://www.toutiao.com/article/v2/tab_comments/?aid=24&app_name=toutiao_web&offset={(page-1)*20}&count=20&group_id=7032951744313164295&item_id=7032951744313164295'
数据保存
接下来我们使用openpyxl将数据保存在excel中。
共计1500+条
# 创建workbook
ws = op.Workbook()
# 创建worksheet
wb = ws.create_sheet(index=0)
# 创建表头
wb.cell(row=1, column=1, value='用户名称')
wb.cell(row=1, column=2, value='评论点赞')
wb.cell(row=1, column=3, value='评论时间')
wb.cell(row=1, column=4, value='贴子回复')
wb.cell(row=1, column=5, value='评论内容')
# 保存数据
ws.save('结婚率.xlsx')
print('数据保存完毕!')
数据预处理
我们首先使用熊猫读取excel。然后使用
pandas去除重复数据和缺失值。
# 读取数据
rcv_data = pd.read_excel('./结婚率.xlsx')
# 删除重复记录
rcv_data = rcv_data.drop_duplicates()
# 删除缺失值
rcv_data = rcv_data.dropna()
# 抽样展示5条数据
print(rcv_data.sample(5))
'''
用户名称 评论点赞 评论时间 贴子回复 评论内容
943 用户4947984566248 1 2021-11-21 17:50 0 合伙过日子不香吗,结什么婚呢?
635 成都绅士男士西宸天街 1 2021-11-21 19:00 0 这很正常啊
1594 黑矮子ReFuelYourlife 0 2021-11-21 23:15 0 互联网这个东西是好东西,也是坏东西,八几年,九几年攀比的人没那么多,因为好多数据他们都不知道...
12 等名等 188 2021-11-21 19:05 11 好事,,房价再高一点,加油 ,,[捂脸][捂脸][捂脸]
1854 kevin师傅 0 2021-11-21 21:17 0 结婚结不起 离婚也离不起
'''
词云展示
使用结巴分词
最后使用stylecloud绘制漂亮的词云图展示
# 词云展示
defvisual_ciyun():
pic ='./img.jpg'
gen_stylecloud(text=result,
icon_name='fas fa-feather-alt',
font_path='msyh.ttc',
background_color='white',
output_name=pic,
custom_stopwords=stop_words
)
print('词云图绘制成功!')
对词云有兴趣的小伙伴可以参考
词频展示
文章评论出现频率最高的前十个词分别如下:
defvisual_cipin():
# 词频设置
all_words = [wordforwordinresult.split(' ')iflen(word) >1andwordnotinstop_words]
wordcount = Counter(all_words).most_common(10)
x1_data, y1_data = list(zip(*wordcount))
'''
('结婚', '离婚', '不想', '离婚率', '孩子', '房价', '单身', '彩礼', '房子', '人口')
(805, 211, 210, 113, 98, 98, 79, 73, 63, 63)
'''
接下来我们使用可视化来直观的展示如下:
柱状图
饼图
气泡图
点赞最多&&回复最多
我们通过如下函数找到点赞最多的评论和回复最多的评论
defdatas_anay():
max_stars = rcv_data[rcv_data['评论点赞'] == rcv_data['评论点赞'].max()]
ic(max_stars)
max_reply = rcv_data[rcv_data['贴子回复'] == rcv_data['贴子回复'].max()]
ic(max_reply)
'''
用户名称 评论点赞 评论时间 贴子回复 评论内容
0 快乐饼干Zp 1615 2021-11-21 17:42 216 别再说是疫情惹的祸
用户名称 评论点赞 评论时间 贴子回复 评论内容
27 你们城里人真会玩111 182 2021-11-21 17:58 285 现在养女儿比养殖什么都划算。投资小风险小赚钱多。我三个姐那时候收的彩礼钱是5000/2000...
'''
点赞数最多的网友看法
获得点赞最多的是一名为快乐饼干Zp的用户评价,他的评论点赞数为1970
别再说是疫情惹的祸
再来看看用户评论点赞排行榜:
回复数最多的网友看法
获得回复最多的是一个名为你们城里人真会玩111的用户评价,他的评论回复数为285,看来大货丢这条评论异议很大啊
现在养女儿比养殖什么都划算。投资小风险小赚钱多。我三个姐那时候收的彩礼钱是5000/20000/20000。彩礼钱钱是用来买家电家具摩托车再送过去。要彩礼钱就是男方出钱女方挑家电。少有贪污聘金的,被人知道贪污会背后说他们卖女儿。女方富裕的还会倒贴钱。放在现在人口买卖的形式,有三个姐轻松入手百万
再来看看用户评论回复排行榜:
评论点赞时间
从下图我们可以直观的看到大家点赞的时间大多分布在
17:00-19:00
大家可以着这个时间点多发点评论可以后去到更多的赞哦
评论回复时间
想要获得更多回复可以选择在17:00-18:00之间去对文章进行评论
情感分析
我们以点赞最多评论为例分析观众对知乎的一些看法进行简单分析
我们是使用的库是SnowNLP
SnowNLP是一个基于Python的情感分析工具库,可以进行中文分词、词性标注、情感分析、文本分类、文本关键词提取等。
SnowNLP的情感值取值范围为0到1之间,值越大,说明情感倾向越积极。
# 情感分析
defanay_data():
all_words = [wordforwordinresult.split(' ')iflen(word) >1andwordnotinstop_words]
positibe = negtive = middle =0
foriinall_words:
pingfen = SnowNLP(i)
ifpingfen.sentiments >0.7:
positibe +=1
elifpingfen.sentiments <0.3:
negtive +=1
else:
middle +=1
print(positibe, negtive, middle)
'''
2499 919 7662
'''
从图中,我们可以看到,大家的评论积极态度的有22%,中等态度的占69%,消极态度只占8%,看来大家的心态还是很平和的。
情感分析树状图