近来爬一网站,想把它的影片的下载地址爬下来,直接request,网页源码是没有对应的,分析一下发现script处有加密处理的,就是eval(function(p,a,c,k,e,d) 这种形式的,最后的p是var xxx='xxxxxxxxx',后面的是json字符串,先用execjs处理script处内容,把return p改成console.log(p),但execjs.eval执行有很多问题,别外json字符串跟python的有很多的不同,没想出很好的办法转换,最后决定用subprocess执行node test.js这样处理,js用script = script + "\nconsole.log(JSON.stringify(JSON.parse(down_urls)))" 这样形式拼接,然后保存为js,然后subprocess.Popen("node test.js", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,encoding='utf-8'),直接获取命令行的返回结果,拿到了符合python环境的json字符串,直接规格化就可以使用了~,利用了js环境的下的对json的序列化处理