爬取微博用戶數(shù)據(jù)

前言

微博數(shù)據(jù)基本上可以說(shuō)是社交圈里面最大的了。但是單純的使用urllib,是不足以獲取數(shù)據(jù)的。

今天來(lái)使用Cookie的方式繞開(kāi)微博權(quán)限驗(yàn)證這一關(guān)卡, 爬取一下數(shù)據(jù)。

查找的過(guò)程

打開(kāi)ChromeF12之后,刷新頁(yè)面,真的是眼花繚亂的數(shù)據(jù)流啊,飛流直下。找了好久,發(fā)現(xiàn)大部分?jǐn)?shù)據(jù)都是通過(guò)JavaScript腳本渲染到頁(yè)面上的。

這也就是為什么單純的使用urllib抓不到的原因了。因?yàn)檫@是動(dòng)態(tài)頁(yè)面,而Urllib則是抓取靜態(tài)頁(yè)面。明白了這一點(diǎn),就找到了方向了。

那就是找到數(shù)據(jù)源接口。后來(lái)經(jīng)過(guò)我的仔細(xì)審核,發(fā)現(xiàn)了類似于這樣的一個(gè)URL。

http://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=103505&is_search=0&visible=0&is_hot=1&is_tag=0&profile_ftype=1&page=2&pagebar=0&pl_name=Pl_Official_MyProfileFeed__23&id=1035051198367585&script_uri=/kqdpku&feed_type=0&pre_page=2&domain_op=103505&__rnd=1495367966928
接口數(shù)據(jù)源

然后發(fā)現(xiàn)服務(wù)器端返回的數(shù)據(jù)內(nèi)容是JSON格式的。大致內(nèi)容如下;

關(guān)聯(lián)頁(yè)碼的服務(wù)器端返回的數(shù)據(jù)

然后這姑且算是找到一個(gè)人的數(shù)據(jù)了吧。那么問(wèn)題接著來(lái)了,如果我想看其他人的頁(yè)面怎么辦呢?

思路有如下兩個(gè):

  • 一是按照剛才的方法,一個(gè)個(gè)的去查找。(費(fèi)時(shí)費(fèi)力,不贊同)
  • 二是走捷徑,對(duì)比URL,我們會(huì)發(fā)現(xiàn)一個(gè)domain的參數(shù),而對(duì)應(yīng)的值就是目標(biāo)博主的ID。
    比如我要看劉強(qiáng)東的主頁(yè),http://weibo.com/p/1003061866402485/home?from=page_100306&mod=TAB&is_hot=1#place
    里面的from參數(shù)的page值后面的數(shù)據(jù)就是我們需要的domain值了。拿過(guò)來(lái)就可以直接使用。

核心

經(jīng)過(guò)了剛才的各種鋪墊,下面直接上代碼。體驗(yàn)一把吧。

# coding: utf8

# @Author: 郭 璞
# @File: login.py                                                                 
# @Time: 2017/5/21                                   
# @Contact: 1064319632@qq.com
# @blog: http://blog.csdn.net/marksinoberg
# @Description: 新浪微博登錄測(cè)試

import requests
import json
from bs4 import BeautifulSoup
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36',
    'Host': 'weibo.com'
}

Cookies = {
    "Cookie": "SCF=Asl3BNSxfmhmaP2cIVfnvOp-mmfHwOPYfdoMZIz6y4WtkH4xK0jdB0Hr0Tll4RzJ0xUHIi5HOLBAjEASrqSGDiQ.; SUB=_2A250JQA2DeThGeNI41UX8ifJyziIHXVXU3b-rDV8PUNbmtBeLWbGkW9yh-AUBKZFFYCHZ2zA0zH1I-l4dg..; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5yNOfs44nTEDRpARDUs7Yl5JpX5K2hUgL.Fo-c1hMceo.fehB2dJLoIcBLxK-LBo5L12qLxK-LBo5L12qLxK-LBo5L12qLxK-LBo5L12qLxK-LBo5L12qpi--fi-z7iKysi--fi-z7iKysi--Ni-z0i-8si--Ni-zpi-z0i--fiKLFi-2Ei--fi-82iK.7; SUHB=0HTxO_F0SbtSsP; ALF=1526899685; SSOLoginState=1495363686; YF-V5-G0=8d4d030c65d0ecae1543b50b93b47f0c; _s_tentry=my.sina.com.cn; Apache=9206065364153.127.1495363942807; SINAGLOBAL=9206065364153.127.1495363942807; ULV=1495363942825:1:1:1:9206065364153.127.1495363942807:; YF-Page-G0=fc0a6021b784ae1aaff2d0aa4c9d1f17; YF-Ugrow-G0=ea90f703b7694b74b62d38420b5273df; wvr=6; wb_publish_fist100_5687629504=1; UOR=blog.csdn.net,widget.weibo.com,www.sina.com.cn"
}


# 劉強(qiáng)東
url = 'http://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=103505&is_search=0&visible=0&is_hot=1&is_tag=0&profile_ftype=1&page=2&pagebar=0&pl_name=Pl_Official_MyProfileFeed__23&id=1035051198367585&script_uri=/kqdpku&feed_type=0&pre_page=1&domain_op=100306&__rnd=1495367966928'
response = requests.get(url=url, headers=headers, cookies=Cookies)

data = json.loads(response.text)

result = data['data']

soup = BeautifulSoup(result, 'html.parser')

blogs = soup.find_all('div', {'class': 'WB_detail'})
for blog in blogs[0:8]:
    print("微博發(fā)文:", blog.find_all('div')[2].get_text())
    # 為了減少控制臺(tái)內(nèi)容輸出,這里注釋掉即可
    # print("配圖:", blog.find_all('div', {'class': 'media_box'}))
    print('======='*36)

# WB_innerwrap

運(yùn)行結(jié)果如何呢?

C:\Users\biao\Desktop\network\env\Scripts\python.exe C:/Users/biao/Desktop/network/code/sina/login.py
微博發(fā)文: 
                                                                                                    騙人,南通沒(méi)有普洱!//@普洱玫瑰湯:啊哈,我也是南通人呢。                                            
===========================================================
微博發(fā)文: 
                                                                                                    回復(fù)@流氓無(wú)產(chǎn)者劉爺:即使那樣死了,無(wú)恥的看客們還要說(shuō)不過(guò)癮哩。//@流氓無(wú)產(chǎn)者劉爺:不僅不應(yīng)該收費(fèi),還應(yīng)該累死餓死是不?還應(yīng)該綁著炸彈跟恐怖分子對(duì)炸去是不?還應(yīng)該拎著菜刀跟漢奸對(duì)砍去是不?說(shuō)話之前掂量掂量自己,考慮考慮別人不行么?                                            
===========================================================
微博發(fā)文: 
                                                                                                    給隊(duì)里多買(mǎi)點(diǎn)。                                            
===========================================================
微博發(fā)文: 
                                                                                                    聰明。//@遇見(jiàn)那兵荒馬亂:還是那天紅場(chǎng)閱兵那天您閱的未名湖嗎?                                            
===========================================================
微博發(fā)文: 
                                                                                                    你這眼神??!//@鐵匠--孫:上面怎么還有肉渣渣,還是饞嘴                                            
===========================================================
微博發(fā)文: 
                                                                                                    這哥倆才超過(guò)五百。                                            
===========================================================
微博發(fā)文: 
                                                                                                    順也是一種孝,但不可機(jī)械教條。//@夜半有人私語(yǔ)時(shí):以前只知道“以順行孝”,原來(lái)也可以“以諫行孝”。謝謝孔老師。                                            
===========================================================
微博發(fā)文: 
                                                                                                    美夢(mèng)與歹命。我回答了 @NEW七七 的問(wèn)題,問(wèn)題價(jià)值¥433.00,大家快來(lái)花1元圍觀~ O微博問(wèn)答 ????                                            
===========================================================
Process finished with exit code 0

如此,微博數(shù)據(jù)也能搞到手了。

總結(jié)

使用Cookie繞開(kāi)登錄選項(xiàng),確實(shí)是一個(gè)比較好的捷徑。但是由于時(shí)效的問(wèn)題,治標(biāo)不治本。

從上面的結(jié)果也可以看出,這里簡(jiǎn)單的打印出了前幾條數(shù)據(jù)內(nèi)容。也算是拋磚引玉了。而且對(duì)比網(wǎng)頁(yè)源碼之后,我發(fā)現(xiàn)了更多好玩的數(shù)據(jù)源。圖片,短視頻,都會(huì)是很好的素材。

然后對(duì)XX進(jìn)行文本分析,做成詞云啊,或者做一下社交網(wǎng)絡(luò)分析啊等等。

今天其實(shí)真的是太閑了,所以才搞了一下微博數(shù)據(jù)的爬取。文章內(nèi)容,排版都挺失敗的。(⊙﹏⊙)b

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容