1.首先在瀏覽器中進入WAP版微博的網址,因為手機版微博的內容較為簡潔,方便后續使用正則表達式或者beautifulSoup等工具對所需要內容進行過濾
https://login.weibo.cn/login/
2.人工輸入賬號、密碼、驗證字符,最后最重要的是勾選(記住登錄狀態)
3.使用Wireshark工具或者火狐的HttpFox插件對GET請求進行分析,需要是取得GET請求中的Cookie信息
在未登錄新浪微博的情況下,是可以通過網址查看一個用戶的首頁的,但是不能進一步查看該用戶的關注和粉絲等信息,如果點擊關注和粉絲,就會重定向回到登錄頁面
比如使用下面函數對某個用戶 http://weibo.cn/XXXXXX/fans 的粉絲信息進行訪問,會重定向回登錄頁面
#獲取網頁函數 def getHtml(url,user_agent="wswp",num_retries=2): #下載網頁,如果下載失敗重新下載兩次 print '開始下載網頁:',url # headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0'} headers = {"User-agent":user_agent} request = urllib2.Request(url,headers=headers) #request請求包 try: html = urllib2.urlopen(request).read() #GET請求 except urllib2.URLError as e: print "下載失敗:",e.reason html = None if num_retries > 0: if hasattr(e,'code') and 500 <= e.code < 600: return getHtml(url,num_retries-1) return html
所以需要在請求的包中的headers中加入Cookie信息,
在勾選了記住登錄狀態之后,點擊關注或者粉絲按鈕,發出GET請求,並使用wireshark對這個GET請求進行抓包
可以抓到這個GET請求
右鍵Follow TCP Stream,圖片中打碼的部分就Cookie信息
4.加入Cookie信息,重新獲取網頁
有了Cookie信息,就可以對Header信息就行修改
#獲取網頁函數 def getHtml(url,user_agent="wswp",num_retries=2): #下載網頁,如果下載失敗重新下載兩次 print '開始下載網頁:',url # headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0'} headers = {"User-agent":user_agent,"Cookie":"_T_WM=XXXXXXXX; SUB=XXXXXXXX; gsid_CTandWM=XXXXXXXXX"} request = urllib2.Request(url,headers=headers) #request請求包 try: html = urllib2.urlopen(request).read() #GET請求 except urllib2.URLError as e: print "下載失敗:",e.reason html = None if num_retries > 0: if hasattr(e,'code') and 500 <= e.code < 600: return getHtml(url,num_retries-1) return html
import urllib2 if __name__ == '__main__': URL = 'http://weibo.cn/XXXXXX/fans' #URL替代 html = getHtml(URL) print html
成功訪問到某個用戶的粉絲信息
試一試訪問一下最近一年很火的papi醬的微博,她的個人信息頁面
import urllib2 if __name__ == '__main__': URL = 'http://weibo.cn/2714280233/info' #URL替代 html = getHtml(URL) print html