龙空技术网

Python基于官方API实现对新浪微博数据爬取(1)

薅毛成羊 387

前言:

眼前各位老铁们对“python获取微博”都比较关切,小伙伴们都想要分析一些“python获取微博”的相关内容。那么小编在网摘上汇集了一些有关“python获取微博””的相关文章,希望你们能喜欢,大家一起来了解一下吧!

上次准备用selenium + python 来模拟登陆新浪微博(这种方式太不好了)。最后我卡在了验证码环节。对于我这种菜鸟来说,新浪实在太不友好了。一点都不考虑我的感受。附上模拟登陆代码。

问题出在获取验证码图片的环节,这里新浪不知道怎么做的。地址相同,但是每次访问得到的验证码不同,导致我无法获取到正确的验证码。本来准备用selenium 截屏获取到验证码交给百度Orc来识别,发现百度对于新浪的这种验证码,识别正确率低的可怕。

So, 我放弃了。改用官方的提供的正确做法。这样又不会被封号。还是挺不错的。官方的API基本全是 rest 接口。可以很方便的调用,获取。下面主要写一下。如何能成功的获取授权。授权完成后就可以调用新浪接口获取数据了(光明正大)。

官方的Api 还算是比较丰富。我主要使用 它们的 评论,还有搜索接口。所以我觉得挺完美的。

首先,访问这些东西,你需要有一个新浪的账号。然后点击:"微连接" 创建一个应用。

创建完成后。可以在"我的应用"中查询到:

点击应用进入后,可以看到应用的app key ,App Secret。这两个很重要,后面的授权会用到。

获取授权。这里新浪采用一种叫:OAuth2.0 的授权机制: 简单来说就是 你访问授权服务器,授权服务器给你返回一个凭证,然后你拿着这个凭证就可以访问 新浪的其他接口了。

授权服务器相当于门卫的意思。你来到一栋大厦。然后门卫给了一一个身份牌。之后你进入大厦。每进一个房间。门口的门卫都需要你提供刚进大厦的人给你的身份牌。否则则拒绝你进入。大概就是这么个意思。

长话短说直接看怎么获取授权:

授权需要自己配置一个回调地址。需要能访问。这个地址除了在参数里加,还需要写在你的应用里。也就是:

这里。我直接用 Flask 搭建了一个本地服务器:

之后借助内网穿透软件。免费的有:natapp:

穿透出去。这样我们就有了回调的地址。

接下来看官方API:

首先我们需要访问:

;response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

这个需要我们填写之前穿件应用后得到的 app key 以及我们搭建的接受回调的地址:

之后在浏览器中打开这个地址:

点击授权(我的回调函数写的打印code,所以这里直接打印出了code。地址栏你也可以获取到这个code):

之后,我们使用新浪给的第二个url:

;client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=CODE

这个 url 需要使用post 方法提交。

Code还有自己的app key ,app secret 。

填写完毕后提交:

会得到一段json格式的返回:

{ "access_token": "asdasdasdadasdasdsadda", "remind_in": "1233566966", "expires_in": 1233566966, "uid": "15666996666", "isRealName": "true"}

这就是我们最后得到的 结果。代表我们授权成功了。

接下来访问接口就简单了。我们只要把 access_token 保存下来。每次访问调用接口时带上这个就可以了。

接口测试可以使用谷歌的postman,或者新浪提供的测试工具

新浪提供了接口测试工具可以直接在线测试接口:这里我从我之前爬取的微博列表中选择了一个文章的ID 。请求后得到了新浪返回的评论结果json 串。

大概瞥了一下(1万多行的串):

这应该就是所有的评论了。

后续,我会写出我能访问调用的所有接口方法,以及解析返回的json数据。

其他的接口,调用方式,都是一样的。关键在于我们授权之后,获取到的access_token 这是验证我们身份的标志。

评论区欢迎指点,讨论。

标签: #python获取微博