东京奥运会禁止选手握手,却发15万个避孕套?
主办方解释:
希望运动员们将套套带回家,预防相关疾病!
另一方面发套也是奥运会、世界杯的传统
成年人总会有生理需求的时候,当然奥运选手也不例外。
在历史的莫斯科奥运会时,因为当时的避孕条件并不普及,
俄罗斯在运动会之后就出现了许多的奥运宝宝
例如一些拉丁美洲,亚洲的混血儿。
在此之后,奥运会主办方就开始对发套套这件事情十分重视了,在1992年的巴塞罗那奥运会,主办方就疯狂采购了一批避孕套。
在2000年的新年奥运会上,主办方也在奥运村放这了七万个避孕套,但是在奥运会期间却不得不又补充了两万个避孕套。
而在16年的里约奥运会期间,巴西为奥运村的运动员们,提供了总共45万个避孕套。这个数字也是奥运有史以来发放避孕套的最高记录了。
当年,伦敦市长也曾吐槽过:“奥运会的口号是激励下一代,而不是创造下一代。”
需求分析
网友们都是如何看待这一操作的呢?
八千评论告诉你
我们要获取的数据如有微博评论下的
用户id、用户名称、用户座右铭、发帖时间和发帖内容。
网页分析
F12打开浏览器开发者模式,找到如下链接。
经过测试发现,目前它是通过Js经行渲染的,想通了这一点,那就可以马上去找接口了。
可以看到我们所有爬取的评论信息全在在一个的json文件当中
发送请求
我们首先模拟浏览器来发送请求获取到这个json数据集,然后获取具体的
用户id、用户名称、用户座右铭、发帖时间和发帖内容
url ='https://m.weibo.cn/comments/hotflow?id=4659897109841690&mid=4659897109841690&max_id_type=0'
print('当前url是:', url)
headers = {
'cookie':'SUB=_2A25NyTOqDeRhGeVG7lAZ9S_PwjiIHXVvMl3irDV6PUJbktB-LVDmkW1NT7e8qozwK1pqWVKX_PsKk5dhdCyPXwW1; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WFGibRIp_iSfMUfmcr5kb295NHD95Q01h-E1h-pe0.XWs4DqcjLi--fi-2Xi-2Ni--fi-z7iKysi--Ri-8si-zXi--fi-88i-zce7tt; _T_WM=98961943286; MLOGIN=1; WEIBOCN_FROM=1110006030; XSRF-TOKEN=70a1e0; M_WEIBOCN_PARAMS=oid%3D4648381753067388%26luicode%3D20000061%26lfid%3D4648381753067388%26uicode%3D20000061%26fid%3D4648381753067388',
'referer':'Referer: https://m.weibo.cn/detail/4665088419561949',
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4573.0 Safari/537.36'
}
resp = requests.get(url, headers=headers).json()
ic(resp)
部分截图如下:
上一步已经成功模拟浏览器获取到了数据。
接下来就是如何在其中提取出我们的目标数据
for item in wb_info:
user_id = item.get('user')['id']# 用户id
author = item['user']['screen_name']# 作者名称
auth_sign = item['user']['description']# 作者座右铭
time = str(item['created_at']).split(' ')[1:4]
rls_time ='-'.join(time)# 发帖时间
text =''.join(re.findall('[\u4e00-\u9fa5]', item['text']))# 发帖内容
ic(user_id, author, auth_sign, rls_time, text)
部分截图如下:
数据成功获取!
实现翻页爬取
因为我们要获取的数据不止一页,所以咱们来接着分析翻页。就从每一页的url开始。
https://m.weibo.cn/comments/hotflow?id=4659897109841690&mid=4659897109841690&max_id_type=0
https://m.weibo.cn/comments/hotflow?id=4659897109841690&mid=4659897109841690&max_id=152459469424517&max_id_type=0
https://m.weibo.cn/comments/hotflow?id=4659897109841690&mid=4659897109841690&max_id=141326913106518&max_id_type=0
https://m.weibo.cn/comments/hotflow?id=4659897109841690&mid=4659897109841690&max_id=140364839614257&max_id_type=0
从第二页开始,每个连接的后面都多了一个叫做max_id的参数。
并且这个max_id是跟随页数随机变化的。
通过第一页的链接获取到了第二页的max_id,
然后通过第二页的链接获取到第三页max_id
以此类推,获取到全部数据......
for page in range(2,100+1):
url =f'https://m.weibo.cn/comments/hotflow?id=4659897109841690&mid=4659897109841690&max_id={max_id}&max_id_type={max_id_type}'
保存数据
最后将爬取下来的数据,使用openpyxl保存至Excel文件中
数据处理
这里我们使用熊猫来读取数据,并去除空行
使用jieba制作分词
rcv_data = pd.read_excel('奥运会避孕套.xlsx')
exist_col = rcv_data.dropna()# 删除空行
c_title = exist_col['发帖内容'].tolist()
# 观影评论词云图
wordlist = jieba.cut(''.join(c_title))
result =' '.join(wordlist)
pic ='img.jpg'
可视化
最后我们使用stylecloud来生成多样形式的词云
gen_stylecloud(text=result,
icon_name='fas fa-trash',
font_path='msyh.ttc',
background_color='white',
output_name=pic,
custom_stopwords=['你','我','的','了','在','吧','是','也','都','不','吗','就','人','去','不是','一个','就是','上',
'有','还','没','被','好','呢','啊','很做','这个','那个','很','这','发','更']
)
print('绘图成功!')