前言
微博數(shù)據(jù)基本上可以說是社交圈里面最大的了俄认。但是單純的使用urllib往毡,是不足以獲取數(shù)據(jù)的蒙揣。
今天來使用Cookie的方式繞開微博權(quán)限驗證這一關(guān)卡, 爬取一下數(shù)據(jù)开瞭。
查找的過程
打開Chrome 的F12之后懒震,刷新頁面,真的是眼花繚亂的數(shù)據(jù)流啊嗤详,飛流直下个扰。找了好久,發(fā)現(xiàn)大部分?jǐn)?shù)據(jù)都是通過JavaScript腳本渲染到頁面上的葱色。
這也就是為什么單純的使用urllib抓不到的原因了递宅。因為這是動態(tài)頁面,而Urllib則是抓取靜態(tài)頁面苍狰。明白了這一點办龄,就找到了方向了。
那就是找到數(shù)據(jù)源接口舞痰。后來經(jīng)過我的仔細(xì)審核土榴,發(fā)現(xiàn)了類似于這樣的一個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
然后發(fā)現(xiàn)服務(wù)器端返回的數(shù)據(jù)內(nèi)容是JSON格式的响牛。大致內(nèi)容如下玷禽;
然后這姑且算是找到一個人的數(shù)據(jù)了吧赫段。那么問題接著來了,如果我想看其他人的頁面怎么辦呢矢赁?
思路有如下兩個:
- 一是按照剛才的方法糯笙,一個個的去查找。(費時費力撩银,不贊同)
- 二是走捷徑给涕,對比URL,我們會發(fā)現(xiàn)一個domain的參數(shù)额获,而對應(yīng)的值就是目標(biāo)博主的ID够庙。
比如我要看劉強東的主頁,http://weibo.com/p/1003061866402485/home?from=page_100306&mod=TAB&is_hot=1#place
里面的from參數(shù)的page值后面的數(shù)據(jù)就是我們需要的domain值了抄邀。拿過來就可以直接使用耘眨。
核心
經(jīng)過了剛才的各種鋪墊,下面直接上代碼境肾。體驗一把吧剔难。
# coding: utf8
# @Author: 郭 璞
# @File: login.py
# @Time: 2017/5/21
# @Contact: 1064319632@qq.com
# @blog: http://blog.csdn.net/marksinoberg
# @Description: 新浪微博登錄測試
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"
}
# 劉強東
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())
# 為了減少控制臺內(nèi)容輸出,這里注釋掉即可
# print("配圖:", blog.find_all('div', {'class': 'media_box'}))
print('======='*36)
# WB_innerwrap
運行結(jié)果如何呢奥喻?
C:\Users\biao\Desktop\network\env\Scripts\python.exe C:/Users/biao/Desktop/network/code/sina/login.py
微博發(fā)文:
騙人偶宫,南通沒有普洱!//@普洱玫瑰湯:啊哈环鲤,我也是南通人呢纯趋。
===========================================================
微博發(fā)文:
回復(fù)@流氓無產(chǎn)者劉爺:即使那樣死了,無恥的看客們還要說不過癮哩楔绞。//@流氓無產(chǎn)者劉爺:不僅不應(yīng)該收費结闸,還應(yīng)該累死餓死是不唇兑?還應(yīng)該綁著炸彈跟恐怖分子對炸去是不酒朵?還應(yīng)該拎著菜刀跟漢奸對砍去是不?說話之前掂量掂量自己扎附,考慮考慮別人不行么蔫耽?
===========================================================
微博發(fā)文:
給隊里多買點。
===========================================================
微博發(fā)文:
聰明留夜。//@遇見那兵荒馬亂:還是那天紅場閱兵那天您閱的未名湖嗎匙铡?
===========================================================
微博發(fā)文:
你這眼神啊碍粥!//@鐵匠--孫:上面怎么還有肉渣渣鳖眼,還是饞嘴
===========================================================
微博發(fā)文:
這哥倆才超過五百。
===========================================================
微博發(fā)文:
順也是一種孝嚼摩,但不可機械教條钦讳。//@夜半有人私語時:以前只知道“以順行孝”矿瘦,原來也可以“以諫行孝”。謝謝孔老師愿卒。
===========================================================
微博發(fā)文:
美夢與歹命缚去。我回答了 @NEW七七 的問題,問題價值¥433.00琼开,大家快來花1元圍觀~ O微博問答 ????
===========================================================
Process finished with exit code 0
如此易结,微博數(shù)據(jù)也能搞到手了。
總結(jié)
使用Cookie繞開登錄選項柜候,確實是一個比較好的捷徑搞动。但是由于時效的問題,治標(biāo)不治本渣刷。
從上面的結(jié)果也可以看出滋尉,這里簡單的打印出了前幾條數(shù)據(jù)內(nèi)容。也算是拋磚引玉了飞主。而且對比網(wǎng)頁源碼之后狮惜,我發(fā)現(xiàn)了更多好玩的數(shù)據(jù)源。圖片碌识,短視頻碾篡,都會是很好的素材。
然后對XX進(jìn)行文本分析筏餐,做成詞云啊开泽,或者做一下社交網(wǎng)絡(luò)分析啊等等。
今天其實真的是太閑了魁瞪,所以才搞了一下微博數(shù)據(jù)的爬取穆律。文章內(nèi)容,排版都挺失敗的导俘。(⊙﹏⊙)b