如何通过python调用rest api新浪微博的API来爬取数据

这几天为了发paper,需要采集新浪微博的用户关系信息构成复杂网络的结构图,好在微博提供了API可以供我们调用,折腾一天终于小有收获,总结如下:
使用python调用API的话,首先要去下一个Python的SDK,sinaweibopy
连接地址在此:&/sinaweibopy/
可以使用pip很快的导入,github连接里的wiki也有入门的使用方法,很容易看懂。
2.理解新浪微博的授权机制
在调用API之前,首先要搞懂什么叫OAuth 2,即新浪微博的授权机制,
连接在此:&/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E
3.在新浪微博注册应用
每个人都可以通过新浪微博开发者平台注册自己的应用,我注册的是站内应用。注册后会为每个应用分配唯一的app key 和 app secret,这在上文提到的授权机制中需要用到,相当与每个应用的标示吧。
至此,我们可以尝试写代码调用新浪微博的API啦。
4.简单的调用API实例
参考了往上很多资料和文档,写了一个简单的调用过程。
# _*_ coding: utf-8 _*_
from weibo import APIClient
import webbrowser
APP_KEY = ''
APP_SECRET = ''
CALLBACK_URL = ''
#这个是设置回调地址,必须与那个&高级信息&里的一致
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
url = client.get_authorize_url()
# TODO: redirect to url
#print url
webbrowser.open_new(url)
# 获取URL参数code:
code = '2fc0b2f5dfa01fee6bd9316'
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
r = client.request_access_token(code)
access_token = r.access_token # 新浪返回的token,类似abc123xyz456
expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4
# TODO: 在此可保存access token
client.set_access_token(access_token, expires_in)
print client.friendships.friends.bilateral.ids.get(uid = )
通过以上的代码,我实现了调用相互关注API的调用,即查找与某个id的用户相互关注的人的列表。
其中,APP_KEY和APP_SECRET就是前文中分配给每个应用的信息,回调地址在每个应用的高级信息中可以看到,需要自己设置,不过随便设置一下就好
比较恶心的是code的获取,我一开始看sinaweibopy的文档的时候也没弄懂是什么意思,如上面的代码所示,url得到的是一个授权的网址,我们通过
webbrowser.open_new(url)
这行代码打开浏览器跳转到授权的界面,然后观察所在界面的网址,会显示大概如下一样的格式:
/sayarywei?code=505e3efcdad1f421d147db7276aabdbe
看到了吗? 问号后面有一个code=&&的一个东西,把等号后面的字符串拷贝下来赋给code就可以了,但是每次运行程序是code不是一成不变的,也就是说每次都要有这么一个手动获取的过程,我觉得很麻烦,以后自己再研究一下,实现自动获取code就好了。如果能有哪位大神告诉我,感激不尽~
好了,得到正确的code之后就可以完成授权认证,也就可以调用微博的API啦,至于如何在Python下调用,我拷贝一下sinaweibopy上的介绍:
首先查看新浪微博API文档,例如:
API:statuses/user_timeline
请求格式:GET
请求参数:
source:string,采用OAuth授权方式不需要此参数,其他授权方式为必填参数,数值为应用的AppKey?。
access_token:string,采用OAuth授权方式为必填参数,其他授权方式不需要此参数,OAuth授权后获得。
uid:int64,需要查询的用户ID。
screen_name:string,需要查询的用户昵称。
(其它可选参数略)
调用方法:将API的&/&变为&.&,根据请求格式是GET或POST,调用get ()或post()并传入关键字参数,但不包括source和access_token参数:
r = client.statuses.user_timeline.get(uid=123456)
for st in r.statuses:
print st.text
若为POST调用,则示例代码如下:
r = client.statuses.update.post(status=u'测试OAuth 2.0发微博')
若需要上传文件,传入file-like object参数,示例代码如下:
f = open('/Users/michael/test.png', 'rb')
r = client.statuses.upload.post(status=u'测试OAuth 2.0带图片发微博', pic=f)
f.close() # APIClient不会自动关闭文件,需要手动关闭
请注意:上传的文件必须是file-like object,不能是str,因为无法区分一个str是文件还是字段。可以通过StringIO把一个str包装成file-like object。
阅读(...) 评论()selenium_sina_text python 写的爬虫
可以爬取新浪微博wap端的内容,包括用户发表的 时间,终端 Data Mining 数据挖掘 263万源代码下载-
&文件名称: selenium_sina_text& & [
& & & & &&]
&&所属分类:
&&开发工具: Python
&&文件大小: 6277 KB
&&上传时间:
&&下载次数: 0
&&提 供 者:
&详细说明:python 写的爬虫
可以爬取新浪微博wap端的内容,包括用户发表的微博内容,时间,终端,评论数,转发数等指标,直接可用-write python reptile
You can crawl content Weibo wap side, including micro-blog content published by users, time, terminal, Comments, forwarding numbers and other indicators, directly available
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&wap绔weibo瀹&&....................\SinaWeibo_Info_best_1.txt&&....................\SinaWeibo_List_best_1.txt&&....................\spider_selenium_sina_content.py
&输入关键字,在本站263万海量源码库中尽情搜索:Python:通过摄像头抓取图像并自动上传至新浪微博 - [ Python学习笔记 ] - 看云
通过上一篇文章,突然想到将每次采集到的图片可以直接上传至微博,然后可以通过手机准实时查看要监控的地方,实现思路如下:
a.程序A 每30s通过摄像头采集一次图像,并保存;
b.程序B也是每30s将采集到的图片上传至新浪微博;
实现如下:
1. 采集图像程序A:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from VideoCapture import Device
import time
#最多保存5张抓取到的图片,超过5张,覆盖最早的那一张,依次循环
MAX_PIC_NUM = 5
#抓取频率,30秒抓取一次
SLEEP_TIME_LONG = 30
#初始化摄像头
cam = Device(devnum=0, showVideoWindow=0)
while True:
cam.saveSnapshot(str(iNum)+ '.jpg', timestamp=3, boldfont=1, quality=75)
#休眠一下,等待一分钟
time.sleep(SLEEP_TIME_LONG)
#超过5张,则覆盖之前的,否则,硬盘很快就会写满
if iNum == MAX_PIC_NUM:
上传图片到新浪微博程序B:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from weibopy.auth import OAuthHandler
from weibopy.api import API
import ConfigParser
import time
MAX_PIC_NUM = 5
SLEEP_TIME_LONG = 30
def press_sina_weibo():
调用新浪微博Open Api实现通过命令行写博文,功能有待完善
author: socrates
新浪微博:@没耳朵的羊
sina_weibo_config = ConfigParser.ConfigParser()
#读取appkey相关配置文件
sina_weibo_config.readfp(open('sina_weibo_config.ini'))
except ConfigParser.Error:
print 'read sina_weibo_config.ini failed.'
#获取需要的信息
consumer_key = sina_weibo_config.get("userinfo","CONSUMER_KEY")
consumer_secret =sina_weibo_config.get("userinfo","CONSUMER_SECRET")
token = sina_weibo_config.get("userinfo","TOKEN")
token_sercet = sina_weibo_config.get("userinfo","TOKEN_SECRET")
#调用新浪微博OpenApi(python版)
auth = OAuthHandler(consumer_key, consumer_secret)
auth.setToken(token, token_sercet)
api = API(auth)
#通过命令行输入要发布的内容
weibo_content = raw_input('Please input content:')
status = api.update_status(status=weibo_content)
print "Press sina weibo successful, content is: %s" % status.text
while True:
#上传图片,名称和内容如果重复,open api会检查,内容采用了取当前时间的机制
#图片名称从0-5循环遍历
status = api.upload(str(iNum)+ '.jpg', time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()))
time.sleep(SLEEP_TIME_LONG)
if iNum == MAX_PIC_NUM:
if __name__ == '__main__':
press_sina_weibo()
页面正在加载中

我要回帖

更多关于 java调用新浪微博api 的文章

 

随机推荐