1、爬取公众号文章接口
现在有两个地方可以搜索微信公众号文章,一是搜狗的微信搜索(weixin.sougou.com/)
可以搜文章,也可以搜公众号。未登陆的情况下搜文章的只能显示十页内容,每页有10篇文章。搜公众号的话只会显示最近10篇文章。登录的情况下搜文章可以显示所有文章,搜公众号依然是显示最近10篇。
第二个接口就是个人微信公众号的素材库可以添加其他公众号文章链接,这个是必须要登陆。登陆后会显示公众号所有历史文章,以及可以按关键字搜索。
2、爬取思路
(1)模拟登陆搜狗微信搜索,然后输入关键字+股票查询所有相关公众号文章。首先利用fiddler抓包。
搜狗公众号搜索登陆流程
请求登录二维码
返回
jQuery.ajax({type:"GET",url:"https://long.open.weixin.qq.com/connect/l/qrconnect?uuid=061zm-EBn-ERrwOO"+(d?"&last="+d:""),dataType:"script",cache:!1,timeout:6e4,success:function(d,e,f)
</script>
</body>
</html>
然后会一直向后台询问是否扫码
下面就利用webdriver模拟登陆,就是用webdriver打开登陆界面点击登陆,但需要自己扫码。登陆后获取所有cookie信息交给webmagic爬取关键字。
(2)模拟登陆个人微信公众号,搜索所有公众号历史文章。
个人微信公众号登录流程
1.请求登录
请求
2.输入账号密码登录
3.请求获取二维码
request line:GET
4.轮训访问是不是手机认了
扫码并同意访问
失败情况:status!=1
request line:GET https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=ask&f=json&ajax=1&random=0.72205102949145856 HTTP/1.1
成功情况:status=1
请扫码并同意访问
request line:GET https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=ask&f=json&ajax=1&random=0.5624547854744200 HTTP/1.1
5.确定登录,目的获取token
request line:POST https://mp.weixin.qq.com/cgi-bin/bizlogin?action=login HTTP/1.1
6.登录成功,获取指定公众号信息 目标获取fakeid
request line:GET https://mp.weixin.qq.com/cgi-bin/searchbiz?action=search_biz&token=608398971&lang=zh_CN&f=json&ajax=1&random=0.56995298448885424&query=girlnba&begin=0&count=5 HTTP/1.1
方法与上述一样,需要人工扫码。
(3)模拟扫码
上两种方法每次都是需要登录时人工扫码,然后程序接着运行。所以就想能不能模拟手机扫码登录。Fiddler抓包发现每次请求登录二维码,二维码中包含的URL都会随机带一个qrticket。而且这个qrticket有过期时间,一定时间不登录就失效。
接下来当需要扫码时,选择页面元素获取二维码请求地址,利用URLConnection将二维码下载到本地,利用解码程序zxing获取二维码中的连接,模拟手机登录。
报错:
这只能使用代理模拟手机登录,或者拦截手机的登录请求,目前还没做。