使用新浪微博开放平台api同步微博内容至自己网站(一下怎么模拟登陆新浪微博()(图))
优采云 发布时间: 2021-12-01 08:14使用新浪微博开放平台api同步微博内容至自己网站(一下怎么模拟登陆新浪微博()(图))
最近需要爬取微博的数据进行分析。对于新浪微博,官方提供了API,但是有几个致命的限制(调用次数限制和授权期限限制),所以我觉得有必要研究一下爬虫直接爬取获取微博数据的可行性通过微博。
由于模拟登录微博是爬虫爬取微博信息的第一步,下面介绍模拟登录微博的方法(以下以新浪微博为例)。
这个过程主要分为两步:
1 脚本模拟登录新浪微博并保存cookie;
2 获得cookie信息后,使用cookie信息直接访问微博url。
其中,第一步是这里讨论的重点。为了更好地模拟这一步,需要一个好的网络监控工具。可以使用火狐的Firebug和Chrome以及IE自带的开发工具(注意IE必须是IE9以上的才有网络监控功能。Chrome的网络交互消息可以在网络部分查看)。另外前两天发现python支持的包比较多,用python自定义自己的网络消息比较方便,所以这里使用python作为我的开发语言。
好的,让我们开始先决条件工作。下面开始分析用户在登录新浪微博的过程中进行的操作。在以下示例中,我使用 chrome 附带的开发人员工具作为我的网络数据包监控工具。
首先打开(如果你之前设置了浏览器自动记住密码并自动登录,则需要清除cookie),然后通过网络监控工具,我们会发现浏览器与服务器交互三用户登录过程中的次数。它们如下:
一、第一个Get请求获取一些参数
在用户名字段中输入您的微博帐户,然后确认。这时候你会发现,当你的焦点离开用户名输入框时,浏览器会自动提示“(v1.4. 5)&_=83” 发送GET请求如下:
仔细看这个GET请求的响应内容,你会发现这个JSON字符串收录了几个参数。也许你不明白他们的意思,但没关系。现在您只需要知道这些参数将在后续处理中使用。能。
二、发送POST请求
这部分是整个登录过程的重点。该部分用于向服务器提交用户信息,服务器判断用户信息是否正确,从而判断登录是否成功。
通过Chrome内置的开发者工具,可以观察到POST消息的相关信息(url、headers、data)。下图是我的POST消息截图:
网址信息如下:
数据包的头信息如下:
POST的消息数据信息如下:
接下来的工作比较简单。我们要做的就是模仿上面消息的内容和格式,用python发送一个类似的消息。在自定义类似消息之前,我觉得有必要简单说明一下上面消息中DATA形式的每一项的含义。
其中,“su”为加密用户名,“sp”为加密密码。“servertime”、“nonce”和“rsakv”是上一步GET请求返回的JSON字符串的内容。其他参数不变。然后,重点介绍“su”和“sp”的加密算法。
1. "su" 加密算法
su 由用户名通过 BASE64 计算: su = base64.encodestring( urllib.quote(username) )[:-1];
2. "sp" 加密算法
sp的加密算法可能会经常变化(考虑到网站的安全性,一段时间后登录修改消息格式和加密算法是正常的)。目前新浪使用的是RSA算法(如果你比较js如果你是牛人,可以直接去网页源码里找加密方法,我没找到,参考网上)。
这里简单介绍一下RSA算法的解密过程。
2.1 安装RSA模块,下载地址为:
2.2 创建 rsa 公钥。公钥的两个参数在新浪微博中都是固定值给出的,但都是16进制字符串。第一步是登录的第一步。pubkey,第二个是js加密文件中的'10001'。这两个值需要从十六进制转换为十进制,但也可以写在代码中。我直接把'10001'写成65537
<p style="line-height:21px; font-family:tahoma,helvetica,arial; white-space:normal; color:rgb(69,69,69)">rsaPublickey = int(pubkey, 16)
key = rsa.PublicKey(rsaPublickey, 65537) #创建公钥
message = str(servertime) + '\t' + str(nonce) + '\n' + str(password)#拼接明文 js加密文件中得到
passwd = rsa.encrypt(message, key)#加密
passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。
</p>
如果上述所有步骤进展顺利,您将得到以下响应:
这是一个自动重定向语句,其中收录要重定向的 URL。如果你登录正确,这个URL中德语retcode的值为0,否则需要仔细检查以上步骤。
三、 跳转到对应的微博页面
上面我们已经得到了要重定向的URL,所以现在我们只需要请求这个URL。这里需要注意的一点是,为了让服务器知道你是否登录,这一步的请求需要用到上一步操作的cookie信息(因为第二步的登录是否成功的信息会会自动记录在cookie中),所以我们在整个程序开始时就打开cookie,以确保在以后的操作中可以正确使用cookie。同时,对于python用户,这一步不要自己自定义header,因为urllib2默认会自动打包cookie信息,如果手动自定义header,可能会遗漏cookie信息。
下面附上我的参考代码:
参考文章:
1、
2、
转载: