新浪微博資料庫
① 新浪微博的「關注功能」資料庫是如何設計的
你好。方法有二個:
我覺得是這樣設計的
一個欄位記錄他所關注的好友信息
應該是json的
然後去資料庫查最新的就是更新就是
uchome就是這么乾的
sql">--用戶表(如果這個表數據相當多,可以用分區表)
createtableuserinfo
(useridnumber(38,0),--可以用序列遞增值也成,自己看著辦
usernamevarchar2(60),
phonevarchar2(20),
addressvarchar2(20),
sexchar(1),
cdatedatedefaultsysdate
--其他欄位,自己添加
);
_userinfoprimarykey(userid);
--用戶關注信息表(如果這個表數據相當多,可以用分區表):
createtableuserattention
(useridnumber(38,0),--用戶ID
attention_useridnumber(38,0),--被關注的用戶ID
statusnumber(18,0),--關注狀態(或者說關注等級,自己定義:0代表什麼,1代表什麼)
cdatedatedefaultsysdate,--創建時間
udatedatedefaultsysdate--修改時間
--其他欄位,自己添加
);
--為保持數據完整性:不管是「用戶ID」還是「被關注的用戶ID」其ID必須在userinfo表中存在!
_userattentionprimarykey(userid,attention_userid);
_userattention_useridforeignkey(userid)referencesuserinfo(userid);
_userattention_att_useridforeignkey(attention_userid)referencesuserinfo(userid);
userattention表中一個userid對應該可能有N條記錄(而不像你說的:用一條記錄,其不同的attention_userid用逗號隔開,這樣設置是不合理的)
--好比QQ號,我的QQ可以添加N個QQ好友,但我想:騰迅應該不會將我這N個QQ好友用字串連成一條記錄(這也太吝嗇啦)
② 如何通過python調用新浪微博的API來爬取數據
先上結論,通過公開的api如果想爬到某大v的所有數據,需要滿足以下兩個條件:
1、在你的爬蟲開始運行時,該大v的所有微博發布量沒有超過回溯查詢的上限,新浪是2000,twitter是3200。
2、爬蟲程序必須不間斷運行。
新浪微博的api基本完全照搬twitter,其中介面的參數特性與底層的NoSQL密不可分,建議先看點Nosql資料庫的設計理念有助於更好的理解api設計。
一般來說,如果決定爬某個大v,第一步先試獲取該用戶的基本信息,中間會包含一條最新的status,記下其中的id號作為基準,命名為baseId。
介面中最重要的兩個參數:
since_id:返回ID比since_id大的微博(即比since_id時間晚的微博),默認為0。
max_id:返回ID小於或等於max_id的微博,默認為0。
出於各種原因,獲取statuses的介面,固定為按id降序排列(scan_index_forward=false),即最新的statuses返回在前。假設該微博第一天上線,就一個用戶,發了一百條,id是1到100。而你在該用戶發了第50條的時候開始運行的爬蟲,即baseId=50。
③ 新浪微博的信息是怎麼儲存的
是存儲在sina的伺服器上面的,按照資料庫格式,當你訪問的時候,sina伺服器就會讀取資料庫數據,然後按照jason格式傳送給你。當然,圖片是另外存儲的,如果有圖片或者視頻,那麼在資料庫裡面保存的只是一個超鏈接,搭卜所以實質上保存的都只是咐蠢文本,文本即便內容很多很多,也不會顯得太過龐大的。
至於圖片,那就不說了,可以轉格式,轉大小衡枝陪,而且本來還限制你的圖片上傳格式的本來就。