利用搜狗抓取微信公众号文章
2015-06-02 09:54
411 查看
微信一直是一个自己玩的小圈子,前段时间搜狗推出的微信搜索带来了一丝曙光。搜狗搜索推出了内容搜索和公众号搜索两种,利用后者可以抓取微信公众号的最新内容,看了下还是比较及时的。
每个公众号都有一个openid,最早可以直接利用
利用httpFox追踪一下访问的行为,如下图:
可以看到从按下回车到页面返回还是做了不少工作的。
倒着看吧,倒数第二行,很多*的,如果用浏览器访问这个地址,返回的就是要显示的数据。如下所示:
稍微看下吧,返回的是一个函数,参数是json格式,里边的“items”项包含了我们需要的数据,数据是用xml封装的。
我们的目标就是拿到这个地址,看一下地址格式吧:
里边有几个参数:
cb:固定为“sogou.weixin.gzhcb”
openid:根据公众号来填
eqs:这个比较麻烦,下面再说
ekv:貌似填4就可以了
page:页码,默认每页显示10条,需要查看更多的时候用它来翻页
t:时间参数,貌似并没有什么O用
首先看看上边这些参数缺省的情况下会发生什么,t缺省了没什么影响,page缺省默认返回第一页,ekv或eqs缺省的话返回的结果里没有数据,也就是items里的数据是“[]”
所以现在的关键就在“eqs”上了。
利用chrome的开发者工具看看吧
有两个js
下面这个就是我们需要的返回数据
看看上边那个,主要的是前面两句:
字面上来看,是对openid进行了加密操作,有一个办法,就是模拟参数,然后调用这些js,需要继续看看js代码,有点头大。
另辟蹊径吧,发现加密操作中的参数都是固定的,不像新浪微博的加密操作,去看看加密后的结果吧,果然也都是固定的,以“人民日报”为例,openid=“oIWsFt_a1YRtD7vlIAkWmeqAWcBU”,加密后的eqs=“u2sOoEZgaZS/oFkRolp3ouB8PR5ws8VLuA6UkIOcm/sE6V1su3gtWzdYQvnCCEr9/DBil”……
这说明完全不需要那么复杂了,参数都是固定的,自己准备好就成。
ok,在搜狗再度改版之前,这样子是完全可以实现的。
不过好像搜狗推出了发爬虫措施,实际抓数据的时候还是小心一点。
每个公众号都有一个openid,最早可以直接利用
http://weixin.sogou.com/gzh?openid=***来获取页面,但改版后对openid进行了加密操作,使用原来的方法返回的数据为空。
利用httpFox追踪一下访问的行为,如下图:
可以看到从按下回车到页面返回还是做了不少工作的。
倒着看吧,倒数第二行,很多*的,如果用浏览器访问这个地址,返回的就是要显示的数据。如下所示:
sogou.weixin.gzhcb({"page":1,"items":["<?xml version=\"1.0\" encoding=\"gbk\"?><DOCUMENT><docid><\/docid><item> <key><![CDATA[http://mp.weixin.qq.com/]]><\/key><tplid><![CDATA[555]]><\/tplid><classid>11002601<\/classid> <display> <docid>ab735a258a90e8e1-6bee54fcbd896b2a-6deb4d71ff08347f1929b25ff173e5de<\/docid> <tplid>550<\/tplid><title><![CDATA[【突发】一艘载有400余人的客轮在长江沉没 搜救正在进行]]><\/title><url><![CDATA[http://mp.weixin.qq.com/s?__biz=MjM5MjAxNDM4MA==&mid=216655341&idx=1&sn=fd0396cb30456a310475ff351e9fa975&3rd=MzA3MDU4NTYzMw==&scene=6#rd]]><\/url><title1><![CDATA[【突发】一艘载有400余人的客轮在长江沉没 搜救正在进行]]><\/title1><imglink>……
稍微看下吧,返回的是一个函数,参数是json格式,里边的“items”项包含了我们需要的数据,数据是用xml封装的。
我们的目标就是拿到这个地址,看一下地址格式吧:
http://weixin.sogou.com/gzhjs?cb=sogou.weixin.gzhcb&openid=oIWsFt8_jYUmdw1PQgNVhH9vOEvI&eqs=u2sOoEZgaZS%2FoFkRolp3ouB8PR5ws8VLuA6UkIOcm%2FsE6V1su3gtWzdYQvnCCEr9%2FDBil&ekv=4&page=1&t=1433207090966
里边有几个参数:
cb:固定为“sogou.weixin.gzhcb”
openid:根据公众号来填
eqs:这个比较麻烦,下面再说
ekv:貌似填4就可以了
page:页码,默认每页显示10条,需要查看更多的时候用它来翻页
t:时间参数,貌似并没有什么O用
首先看看上边这些参数缺省的情况下会发生什么,t缺省了没什么影响,page缺省默认返回第一页,ekv或eqs缺省的话返回的结果里没有数据,也就是items里的数据是“[]”
所以现在的关键就在“eqs”上了。
利用chrome的开发者工具看看吧
有两个js
下面这个就是我们需要的返回数据
看看上边那个,主要的是前面两句:
<script> SogouEncrypt.setKv("8d44ae022be","4"); window.aes=SogouEncrypt.encryptquery("oIWsFt_a1YRtD7vlIAkWmeqAWcBU","sogou"); </script>
字面上来看,是对openid进行了加密操作,有一个办法,就是模拟参数,然后调用这些js,需要继续看看js代码,有点头大。
另辟蹊径吧,发现加密操作中的参数都是固定的,不像新浪微博的加密操作,去看看加密后的结果吧,果然也都是固定的,以“人民日报”为例,openid=“oIWsFt_a1YRtD7vlIAkWmeqAWcBU”,加密后的eqs=“u2sOoEZgaZS/oFkRolp3ouB8PR5ws8VLuA6UkIOcm/sE6V1su3gtWzdYQvnCCEr9/DBil”……
这说明完全不需要那么复杂了,参数都是固定的,自己准备好就成。
ok,在搜狗再度改版之前,这样子是完全可以实现的。
不过好像搜狗推出了发爬虫措施,实际抓数据的时候还是小心一点。
相关文章推荐
- 用c#开发微信 (10) JS-SDK 基本用法- 分享接口“发送到朋友”
- 微信js-sdk图片接口实现一键上传.md
- 微信打赏功能暗示内容付费时代渐近
- 微信开发学习笔记之五(CI框架 常用封装)
- 仿微信通讯录列表
- 【Android】仿微信通讯录中的右侧字母表控件
- 微信学习笔记之四(媒体文件的上传与下载)
- 微信公众号开发
- Mate7微信指纹支付来了 比Touch ID整合微信早一点
- 答读者问总结 & 微信群欢迎你
- 进一步封装微信JS SDK,使开发人员对JS SDk透明
- 安卓微信overflow-x overflow-y引发的bug
- 我为微商疗伤
- 【Android】仿微信通讯录中的右侧字母表控件
- 24小时进制转换12小时进制的小程序
- 如何将密切好友的微信聊天记录恢复到自己的微信中
- 微信获取openID以及token
- 小企业先做APP还是先做微信
- Android开发--仿微信语音对讲录音
- 公安部:微博、微信和百度贴吧上线网警巡查执法账号