利用 Python 爬取“工商祕密”微博,看看大家都在關注些什麼?
微博作為我的日常軟體之一,平時除了看看熱搜、肖戰(哈哈),我還會時不時看看祕密,雖然從來都沒有投過稿,但還是會對一些感興趣的內容評論評論或者點點贊,前兩天刷祕密突然很想知道,
- 祕密為同學們釋出最多的是哪些內容?與哪些相關?
- 或者哪些同學喜歡去祕密下方評論?
- 評論最多的微博多於什麼相關?
- 祕密經常會在什麼時間釋出微博?
- 釋出的微博都是情感正向的還是負向的?
當然這些問題後臺應該最清楚,也有直接的資料,不過這裡我想通過爬取的資料來看看這些問題,或許會得出不一樣的結論。
開始爬蟲之旅(注:內容只是娛樂,微博內容是公開的,評論者的ID名將進行處理,只顯示一部分)
抓取網址 祕密
想要的資料包括:
釋出時間、釋出的微博內容、評論、評論者、評論中的評論、評論者中的評論者
未拿資料:
評論數、點贊數、轉發數、釋出微博來源等
知道想要的資料後,接下來就開始尋找資料
一般介面資料都會存在 XHR,所以沿著這個方向基本能找到資料
部分程式碼
for i in cards:
# 在提取json資料時,使用get方法,有就提取,沒有就為空
# mblog可能有可能沒有
if i.get('mblog'):
result1 = i.get('mblog')['text']
ids = i.get('mblog')['id']
# print(result1,ids)
# print('\n')
cop = re.compile("[^\u4e00-\u9fa5]") # 匹配不是中文、大小寫、數字的其他字元
string1 = cop.sub('', result1)
# print(string1)
# print('\n')
# result2 = re.sub('<[^<]+?>', '', result1).replace('\n', '').strip()
sheet.append([string1,'0','0','0','0','0'])
# =======微博下面的評論
# time.sleep(1)
# md = re.findall('<a href="(.*?)">',result1)[0].split('/')[-1]
url = 'https://m.weibo.cn/comments/hotflow?id='+ ids +'&mid='+ ids +'&max_id_type=0'
response1 = requests.get(url,timeout=30,headers=headers)
dat1 = response1.json()
if dat1['ok'] == 1:
pinglun_num = dat1['data']['total_number']
da = dat1['data']['data']
for i in da:
pinglun = cop.sub('', i['text'])
created_at = i['created_at']
user1 = i['user']['screen_name']
sheet.append(['0',created_at,pinglun,user1,'0','0'])
# =======微博下面的評論的評論
if i['total_number'] > 0 and i['comments']!=False:
comments = i['comments']
for g in comments:
text = cop.sub('', g['text'])
user2 = g['user']['screen_name']
sheet.append(['0','0','0','0',text,user2])
為了防止被封,這裡在爬取時設定了隨機頭以及2秒的睡眠,並且沒有一次性拿太多,分批次拿,每個批次儲存在不同的excel檔案,最終利用線上excel合併得到如下資料:
這裡總的拿到接近10000條資料(包括無效資料),其中祕密內容和相關評論大概有近2000條,評論者8000左右(包括重複ID)…
對資料進行處理,包括刪除重複值、異常值(特殊字元)、資料脫敏等
基本的髒資料處理好之後,下面就可以開始分析啦~~~
(1)祕密微博詞雲圖
首先,把爬取到的所有微博篩選出來
接下來,將資料匯入程式中,得到如下的詞雲圖
或者,修改一下蒙版
可以發現在最近這段時間,祕密釋出的微博內容中這幾個詞出現得最多,包括:考研、圖書館、寢室、學校等,臨近考研,同學們可能都比較關心學校啊、圖書館啊、座位位置啊這些,這裡也祝願我們們學校的考研人都能取得理想成績,但行好事,莫問前程。
除此之外,喜歡、女朋友、男朋友等詞語也常常出現在微博中,也許是冬天適合談戀愛吧,記得多買一杯古茗奶茶,把它捧在手心裡,暖暖的,很貼心!
2 祕密微博評論者
這裡我一共拿到8010個使用者ID(包括重複值),均進行了處理
用資料透視表進行統計後,得到如下資料,可以看到最近一段時間在祕密下方評論最多的ID名是 海嘯*****,其次是尋找****道長、最好*****18881、我可*****假猴子ha、工商**精。
資料視覺化呈現
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import os
os.chdir(r'C:\Users\Administrator\Desktop')
ID = ['海嘯****','尋找****道長','最好****18881','我可****假猴子ha','工商***精']
values = [53,47,36,34,34]
c = (
Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
.add("", zip(ID,values),radius=["40%", "70%"])
.set_global_opts(
title_opts=opts.TitleOpts(title="祕密微博評論者TOP5",subtitle="賣山楂啦prss",pos_top="2%",pos_left = 'center'),
toolbox_opts=opts.ToolboxOpts(
# 是否顯示該工具
is_show=True,
))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}",font_size=18))
.render("資料視覺化.html")
)
下面在看一下 ID 名為 海嘯****同學,都在祕密平臺上評論了些什麼詞語(這裡資料較少)
評論的微博與哪些相關
3 祕密微博情感分析
這裡使用模型對每一條微博進行情感分析,分析其積極分值和消極分值
但有個問題是
祕密前段時間“改版了”,許多內容合併成一條釋出,這就會導致最終的模型訓練結果會有偏差,這裡我並沒有解決這個問題,所以結果可能具有不合理性。
進一步的判斷出每條微博的情感傾向。
資料視覺化
總的來說,最近祕密釋出的微博的情感傾向還是比較均衡的,差異並不大,正向情感略高於負向情感。
4 祕密微博釋出時間分析
由於忘記拿釋出時間的資料,所以這裡從頭在爬取一次,這次只要釋出是時間
拿到的資料如下
這裡的時間資料是中國標準時間,需要進行轉換
import pandas as pd
import numpy as np
df = pd.read_excel('C:\\Users\\Administrator\\Desktop\\釋出時間.xlsx')
def trans_format(time_string, from_format='%a %b %d %H:%M:%S +0800 %Y', to_format='%Y-%m-%d %H:%M:%S'):
"""
@note 時間格式轉化
:param time_string:
:param from_format:
:param to_format:
:return:
"""
time_struct = time.strptime(time_string,from_format)
times = time.strftime(to_format, time_struct)
return times
if __name__ == "__main__":
df["處理後的時間"] = df['時間'].apply(trans_format)
轉換後的資料如下:
利用python 將時分秒變成小數
因為時間就是至1之間的小數,0是一天的開始,1就是1天了,所以時間是至1之間的小數,也就是中午12點是0.5。
比如這裡
最終處理結果
接下來開始分箱
bins = pd.read_csv(r"處理後的資料.csv")
bins
def cut_bins(x):
if 0.083333<= x <0.250000:
return '02:00:00--06:00:00'
elif 0.250000 <=x <0.458333:
return '06:00:00--11:00:00'
elif 0.458333 <=x <0.541667:
return '11:00:00--13:00:00'
elif 0.541667 <=x <0.708333:
return '13:00:00--17:00:00'
elif 0.708333 <=x <0.791667:
return '17:00:00--19:00:00'
elif 0.791667 <=x <0.916667:
return '19:00:00--22:00:00'
else:
return '22:00:00--02:00:00'
bins['所在時間段'] = bins['將時分秒改成常規'].map(cut_bins)
bins
統計
bins['所在時間段'].value_counts()
'''
22:00:00--02:00:00 341
13:00:00--17:00:00 222
06:00:00--11:00:00 183
19:00:00--22:00:00 156
17:00:00--19:00:00 101
11:00:00--13:00:00 98
02:00:00--06:00:00 19
Name: 所在時間段, dtype: int64
'''
資料視覺化
可以看到,祕密經常會在 22:00:00 – 02:00:00 這個時間段釋出微博,其次是下午13:00:00–17:00:00
至此,所有分析結束。
相關文章
- Python實現微博爬蟲,爬取新浪微博Python爬蟲
- 為什麼大家都在用 WebP?Web
- 用Python爬取分析【某東618】暢銷商品銷量資料,帶你看看大家都喜歡買什麼!Python
- CSDN學院1月視訊教程好評榜(部分)-- 看看大家都在學什麼好課?
- python為什麼叫爬蟲?Python和爬蟲有什麼關係?Python爬蟲
- 關於 Windows Terminal,人民群眾都在聊些什麼?Windows
- CSDN學院1月視訊教程好評榜(部分)-- 看看大家都在學什麼好課(2)
- JB的Python之旅-爬蟲篇-新浪微博內容爬取Python爬蟲
- 看看webpack都打出了些什麼Web
- 房產資料爬取、智慧財產權資料爬取、企業工商資料爬取、抖音直播間資料python爬蟲爬取Python爬蟲
- 我用 Python 爬取微信好友,最後發現一個大祕密Python
- 利用Python爬取必應桌布Python
- 利用Python爬蟲爬取天氣資料Python爬蟲
- 大家都在聊的人工智慧,究竟是什麼?人工智慧
- python實現微博個人主頁的資訊爬取Python
- Python爬取微博資料生成詞雲圖片Python
- 為什麼Python受關注?Python熱門的原因!Python
- 微博跟微軟是什麼關係?微軟
- Python網路爬蟲2 - 爬取新浪微博使用者圖片Python爬蟲
- 大家都在說的分散式系統到底是什麼?分散式
- Python 超簡單爬取微博熱搜榜資料Python
- 暑期買量報告指南:在這個火熱的暑假裡,你期待的使用者都在關注些什麼?
- 程式猿在關注什麼?
- 為什麼這麼多人都在學PythonPython
- [python爬蟲] Selenium爬取新浪微博內容及使用者資訊Python爬蟲
- 利用python爬取城市公交站點Python
- Python爬蟲可以幹什麼?Python爬蟲有什麼用?Python爬蟲
- Python 超簡單爬取新浪微博資料 (高階版)Python
- 利用智慧數字經營賺錢的商家,關注的是什麼?
- 輕鬆利用Python爬蟲爬取你想要的資料Python爬蟲
- 關於python爬取網頁Python網頁
- 用Java這麼多年,這些祕密你知道嗎?Java
- 爬蟲實戰(一):爬取微博使用者資訊爬蟲
- 為什麼說Python是Fintech與金融變革的祕密武器Python
- 利用python爬取58同城簡歷資料Python
- 利用python爬取某殼的房產資料Python
- 利用requests+BeautifulSoup爬取網頁關鍵資訊網頁
- Python為什麼叫爬蟲?Python為什麼適合寫爬蟲?Python爬蟲