转载于:微信公众号 爬虫黑科技
做js逆向,一般是将js的加解密的源码抽出来然后用python的pyexecjs包来调用,但这样的话会有一部分性能丢失。
这里推荐一种http调用方式
1.将js的加解密入口封装成一个函数,例如:
function getSignature(url, cookiesStr) {
if (cookiesStr !== undefined) {
for (let cookies of cookiesStr.split(";")) {
cookie = cookies.split("=");
addCookies(cookie[0], cookie[1]);
}
}
window.document.cookie = cookiesStr;
return window.byted_acrawler.sign({url: url});
# return exports.sign.call(exports,{url:url});
}
2.创建一个服务模块,采用http方式调用该函数
// 导入http模块:
var http = require('http');
// 创建http server,并传入回调函数:
var server = http.createServer(function (request, response) {
// 回调函数接收request和response对象,
// 获得HTTP请求的method和url:
var url = request.url;
request.on('data', function (chunk) {
var alldata = "";
alldata += chunk;
var dataString = alldata.toString();
//url解码
var data=decodeURI(dataString);
//将接收到的字符串转换位为json对象
var json_data = JSON.parse(data);
var resp = getSignature(json_data["url"], json_data["ck"]);
// console.log(resp);
// 将HTTP响应200写入response, 同时设置Content-Type: text/html:
response.writeHead(200, {'Content-Type': 'text/html'});
// 将HTTP响应的HTML内容写入response:
response.end(resp);
});
});
// 让服务器监听8081端口:
server.listen(8081, '0.0.0.0');
3.在python程序中使用requests模块调用
import requests
url = 'http://127.0.0.1:8081/api/SignAture'
data = {"url": url, "ck":ck}
_signature = requests.post(url, json=data, timeout=5).content.decode()
print(_signature)
4.使用pm2守护node进程
功能和supervisor类似,node进程专用
安装
npm install pm2
启动js服务
pm2 start xxx.js
停止js服务
pm2 stop xxx.js
重启js服务
pm2 restart xxx.js
查看所有js服务
pm2 ls
查看日志
pm2 log