新浪微博數(shù)據(jù)抓取及情緒分析
- 微博數(shù)據(jù)爬蟲
- 開始爬蟲之前請先了解
- 代碼實現(xiàn)
- (一)利用高級搜索抓取指定微博
- (二)抓取任意微博數(shù)據(jù)
- 文本情緒分析
- 工具及原理
- 數(shù)據(jù)預(yù)處理和模型訓(xùn)練
本文包含內(nèi)容:借助Python抓取微博數(shù)據(jù),可以實現(xiàn)對 微博用戶信息 , 微博內(nèi)容,微博點贊數(shù)評論數(shù)轉(zhuǎn)發(fā)數(shù),評論內(nèi)容 等信息的抓取,并對抓取的數(shù)據(jù)進行情緒分析
代碼實現(xiàn):微博用戶的行為與情感分析
爬蟲過程中如有問題請 留言 ,或者在github的代碼中開 issue ,我們會及時解答。
微博數(shù)據(jù)爬蟲
開始爬蟲之前請先了解
-
Q:有哪些微博提供的數(shù)據(jù)是我們可以利用的?
A:微博數(shù)據(jù)可以分為幾類: 博文 相關(guān)數(shù)據(jù), 用戶信息 數(shù)據(jù),單條微博 評論 數(shù)據(jù), 社交關(guān)系 網(wǎng)絡(luò)數(shù)據(jù)。
博文相關(guān)數(shù)據(jù) 包括:微博的URL,微博作者的ID,微博的內(nèi)容,發(fā)布的工具,微博發(fā)表時間,微博附帶圖的URL,轉(zhuǎn)發(fā)數(shù),評論數(shù),點贊數(shù),是否是轉(zhuǎn)發(fā)的微博,源微博的URL
用戶信息 數(shù)據(jù)包括:用戶ID,昵稱,所在省,所在市,個人簡介,生日,性別,會員等級,認證情況,微博發(fā)表數(shù),粉絲數(shù),關(guān)注數(shù)
評論數(shù)據(jù) 包括:評論的URL,評論的用戶ID,weibo的URL,評論內(nèi)容,評論創(chuàng)建時間
社交關(guān)系 網(wǎng)絡(luò)數(shù)據(jù)包括:關(guān)注者的用戶ID,被關(guān)注者的用戶ID -
Q:抓取哪個微博平臺的數(shù)據(jù)?
A:微博包含有手機端,網(wǎng)頁端,即 weibo.cn 和 weibo.com ,對于爬取微博的數(shù)據(jù)這一任務(wù)而言,選擇 weibo.cn 是最好的,其網(wǎng)頁結(jié)構(gòu)更為簡單,解析網(wǎng)頁更為方便,并且?guī)缀醢怂形覀冃枰臄?shù)據(jù),因此能用weibo.cn就不用其他的網(wǎng)站進行爬蟲。 -
Q:微博爬蟲存在哪些難點?
A:微博登錄是微博爬蟲的一個基礎(chǔ),在爬蟲之前需要先實現(xiàn)微博的 自動登錄 ,weibo.cn 和 weibo.com 兩者的自動登錄方式是不一樣的,前者更為簡單,本文講解的是前者的數(shù)據(jù)爬蟲,其自動登錄方式為通過自動化工具 selenium 獲取 cookie ,之后攜帶cookie發(fā)出請求。
另外,微博可能存在 封帳號 的問題,因此可以買好小號用 小號抓取數(shù)據(jù) 。微博小號購買地址 -
Q:使用的是什么工具?
A:本文介紹的是使用 scrapy 框架構(gòu)建爬蟲。給定初始的url,爬蟲工具就會將該頁面下載下來,并解析該頁面的信息,得到該頁面的微博數(shù)據(jù),同時產(chǎn)生下一頁的地址,并接著去抓取下一頁 -
Q:如果需要抓取大量的微博數(shù)據(jù),有什么注意事項?
A:與其他網(wǎng)站不同,微博不會封IP,因此不用構(gòu)建IP池,但是微博會存在封帳號的問題,因此需要構(gòu)建一個 賬號池 ,并針對賬號池中的所有賬號獲取cookie并存儲。賬號購買地址上面已經(jīng)提供了,本文在抓取數(shù)據(jù)時最多購買了40個賬號,進行多線程的大量微博數(shù)據(jù)抓取。
代碼實現(xiàn)
代碼實現(xiàn)地址:https://github.com/CUHKSZ-TQL/WeiboSpider_SentimentAnalysis
(一)利用高級搜索抓取指定微博
首先介紹附帶微博高級搜索功能的爬蟲步驟。請參考鏈接中的
WeiboSpider
文件夾中的內(nèi)容。
高級搜索意味著在抓取微博時,可以對目標微博的
發(fā)布時間,發(fā)布地點,包含的關(guān)鍵詞,是否為熱門微博
等進行限制,可以縮小爬蟲范圍,并且更具有實用性。一般而言如果要對抓取的數(shù)據(jù)進行分析,都會采用這一方法來明確抓取的微博類型。
本文提供的代碼可以抓取到
博文
相關(guān)數(shù)據(jù),
用戶
相關(guān)數(shù)據(jù)以及
微博評論
相關(guān)數(shù)據(jù)。
步驟:
-
安裝依賴
mongodb
phantomjs
redis
requirements.txt -
構(gòu)建賬號池
購買微博小號
將賬號密碼復(fù)制到WeiboSpider/sina/account_build/account.txt
運行WeiboSpider/sina/account_build/login.py
運行成功會顯示cookie創(chuàng)建成功 -
修改
WeiboSpider/sina/redis_init.py
中的日期,關(guān)鍵詞,運行該文件進行微博檢索(代碼中默認抓取熱門微博,如需更改可將url中的sort設(shè)置為time) -
開始爬蟲:
運行WeiboSpider/sina/spider/weibo_spider.py
抓取目標數(shù)據(jù)
建議采取多線程同時抓取,提高速度
Mac用戶在命令行中輸入scrapy crawl weibo_spider
Windows用戶在命令行中輸入scrapy runspider weibo_spider.py
(二)抓取任意微博數(shù)據(jù)
如果只是想要抓取任意微博,本文提供另外一種簡單的方法,可以抓取目標用戶的所有微博。請參考鏈接中的
WeiboSpiderSimple
文件夾中的內(nèi)容。
步驟:
-
安裝依賴
mongodb
requirements.txt -
訪問 https://weibo.cn/ 并登陸,獲取對應(yīng)的cookie,將
WeiboSpiderSimple/sina/settings.py
中的cookie換成你自己獲取到的cookie
DEFAULT_REQUEST_HEADERS = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) Gecko/20100101 Firefox/61.0',
'Cookie':'OUTFOX_SEARCH_USER_ID_NCOO=1780588551.4011402; browser=d2VpYm9mYXhpYW4%3D; SCF=AsJyCasIxgS59OhHHUWjr9OAw83N3BrFKTpCLz2myUf2_vdK1UFy6Hucn5KaD7mXIoq8G25IMnTUPRRfr3U8ryQ.; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WFGJINkqaLbAcTzz2isXDTA5JpX5KMhUgL.Foq0e0571hBp1hn2dJLoIp7LxKML1KBLBKnLxKqL1hnLBoMpe0ec1h5feKMR; SUB=_2A252a4N_DeRhGeBI61EV9CzPyD-IHXVVly03rDV6PUJbkdAKLRakkW1NRqYKs18Yrsf_SKnpgehmxRFUVgzXtwQO; SUHB=0U15b0sZ4CX6O4; _T_WM=0653fb2596917b052152f773a5976ff4; _WEIBO_UID=6603442333; SSOLoginState=1536482073; ALF=1539074073'
}
-
指定爬取的用戶ID將
WeiboSpiderSimple/sina/spider/weibo_spider.py
中的start_uids
換成你想抓取的對象的微博ID。 -
開始爬蟲,執(zhí)行
scrapy crawl weibo_spider
或者直接在pycharm當中運行WeiboSpiderSimple/sina/spider/weibo_spider.py
文本情緒分析
工具及原理
基于Python的snowNLP庫作為情緒分析的模型。模型原理是機器學(xué)習(xí)中的樸素貝葉斯分類方法。在對文本進行分詞和去除停用詞等一系列基礎(chǔ)處理后,將單句評論的詞匯作為模型的特征:
( ω 1 , ω 2 , . . . , ω n ) (\omega_1,\omega_2,...,\omega_n)
(
ω
1
?
,
ω
2
?
,
.
.
.
,
ω
n
?
)
再利用樸素貝葉斯公式打分:
P ( C 1 ∣ ω 1 , ω 2 , . . . , ω n ) = P ( ω 1 ∣ C 1 ) . . . P ( ω n ∣ C 1 ) P ( C 1 ) P ( ω 1 ) . . . P ( ω n ) P(C_1|\omega_1,\omega_2,...,\omega_n)=\frac{P(\omega_1|C_1)...P(\omega_n|C_1)P(C_1)}{P(\omega_1)...P(\omega_n)}
P
(
C
1
?
∣
ω
1
?
,
ω
2
?
,
.
.
.
,
ω
n
?
)
=
P
(
ω
1
?
)
.
.
.
P
(
ω
n
?
)
P
(
ω
1
?
∣
C
1
?
)
.
.
.
P
(
ω
n
?
∣
C
1
?
)
P
(
C
1
?
)
?
其中
C 1 C_1
C
1
?
代表積極類情緒,等式右邊的計算基于訓(xùn)練好的模型,分數(shù)越高代表語句越積極。實際上是計算了訓(xùn)練出的特征的條件概率。
數(shù)據(jù)預(yù)處理和模型訓(xùn)練
- 利用 jieba 分詞工具進行分詞
- 使用哈工大停用詞表去除停用詞
- 基于 snowNLP 原有模型對數(shù)據(jù)進行積極和消極情感的分類
- 得到情感標簽后,計算每個詞在全部文本、積極文本和消極文本的頻率,用以訓(xùn)練新的模型
代碼參考:Sentiment analysis.ipynb
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
