新浪微博数据库
① 新浪微博的“关注功能”数据库是如何设计的
你好。方法有二个:
我觉得是这样设计的
一个字段记录他所关注的好友信息
应该是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格式传送给你。当然,图片是另外存储的,如果有图片或者视频,那么在数据库里面保存的只是一个超链接,搭卜所以实质上保存的都只是咐蠢文本,文本即便内容很多很多,也不会显得太过庞大的。
至于图片,那就不说了,可以转格式,转大小衡枝陪,而且本来还限制你的图片上传格式的本来就。