如何用anyproxy抓取tiKtok小视频
工具:anyproxy 安卓模拟器 mumu springmvc程序 js command脚本
原理:安卓模拟器 安装了软件后,利用代理 拦截请求,获得json通过js发送给spirngmvc程序,然后存到数据库,通过command脚本实现安卓模拟器自动翻页
先安装anyproxy
https://www.cnblogs.com/yoable/p/6374134.html
下载mumu模拟器
打开mumu模拟器 for mac or for windows
然后命令行 敲 anyproxy --intercept
到网易mumu模拟器中 设置网络代理 本机的Ip 然后8001
到模拟器的浏览器中敲
http://本机ip:8002/fetchCrtFile 下载ca证书,破解https连接
然后ctrl + c 把之前的命令行干掉
启动我们的springmvc程序
启动好之后 执行命令anyproxy --intercept --rule /Users/liyj/sample.js (sample.js的绝对地址,里面是一些回调函数,就是当Json传过来的时候回调用这些方法,方法中我用的ajax异步调用springmvc程序)
sample.js文件内容
var logMap = {} var fs = require('fs'); var http = require('http'); var querystring=require("querystring"); var logger = fs.createWriteStream('/Users/liyj/urlLog.log', {encoding: 'utf-8',flag: 'a'}); function logPageFile(url) { logger.write(url + '\r\n'); } module.exports = { *beforeSendResponse(requestDetail, responseDetail) { if(requestDetail.url.indexOf('api-eagle.amemv.com/aweme/v1/feed/') == -1 && requestDetail.url.indexOf('aweme-eagle.snssdk.com/aweme/v1/feed/') == -1) return; var options = {
//springmvc程序的ip和端口 就是本机Ip和端口 hostname:'192.168.5.62', port:8081, method: 'POST',
//requestmapping映射的哪个路径 path: '/scheduler-crawler/crawldy/do', headers: { 'Content-Type': 'application/json' }, json : {"json" : "fdsaf11"} }; var post_req = http.request(options, function(_res){ _res.setEncoding('utf8'); _res.on('data', function (chunk) { console.log('Response: ' + chunk); }); }); post_req.write(responseDetail.response.body,'utf-8'); post_req.end(); } }
然后打开模拟器中的抖音程序,向下翻页就可以抓取了。抖音是一次返回6条数据 翻6次后 重新在返回6条
利用adb连接模拟器后,adb在模拟器上模拟向下滑操作,这种就跟人为看视频操作一样,很难被察觉
adb connect 127.0.0.1
然后执行/Users/liyj/Desktop/f.command ; exit;(f.command文件的绝对路径)
f.command内容为
for (( j=40;j<50000000;j++)) do adb shell input swipe 400 850 400 200 350 done