用好anyproxy提高公众号文章采集效率
php  /  管理员 发布于 7年前   226
影响因素主要会有以下几点: 1、网络环境不佳; 2、手机或模拟器中微信客户端崩溃; 3、其它一些网络传输错误; 因为我比较看重采集系统的运行成本,这个成本包括硬件投入,运算力投入和占用的人工精力。所以必须提高运行的稳定性。因此如果采集中断,必然增加人工精力的成本。所以针对这一点我对anyproxy做了一些进阶的改造,并且借助了其它一些工具提高了运行效率。以下就是具体的解决方法: 一、代码升级 1)微信浏览器白屏 解决方法:修改文件requestHandler.js,还是在rule_default.js同级目录下,(mac系统/usr/local/lib/node_modules/anyproxy/lib/;win系统评论区网友cnbattle提供C:\Users\Administrator\AppData\Roaming\npm\node_modules\anyproxy\lib) 在代码中找到proxyReq.on("error",function(e){这个函数,并修改内容 这样当发生错误时,会返回一个刷新当前页面的js;这样程序就能继续下去了 2)替换所有图片,减轻浏览器负担 首先需要制作一张非常小的图片,我做的是1x1像素,png透明图;放到任意文件夹里。然后修改文件rule_default.js的代码: 在文件开头有许多var的位置加入以下代码 在下面的代码中找到shouldUseLocalResponse : function(req,reqBody){函数,在函数内插入代码: 继续在下面的代码中找到dealLocalResponse : function(req,reqBody,callback){函数,在函数内插入代码: 这三段代码就会将公众号里面的所有图片替换成本地图片,减轻网络传输压力和浏览器占用的内存,有效的提高运行效率; 3)禁止手机或模拟器访问一些无用的和会导致错误的网址 同样在rule_default.js里找到代码replaceRequestOption : function(req,option){函数,在函数内部插入代码: 这个修改之前的文章也提到过了,在这里重新再详细介绍一下。他的用途很多,不同的手机和模拟器都有可能访问一些无用的地址导致设备变慢,通过这个代码就可以阻止访问。 二、使用pm2管理anyproxy进程 pm2 是一个带有负载均衡功能的Node应用的进程管理器. 当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。它非常适合IaaS结构,但不要把它用于PaaS方案(随后将开发Paas的解决方案). 主要特性: 内建负载均衡(使用Node cluster 集群模块) 后台运行 0秒停机重载,我理解大概意思是维护升级的时候不需要停机. 具有Ubuntu和CentOS 的启动脚本 停止不稳定的进程(避免无限循环) 控制台检测 提供 HTTP API 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 ) 测试过Nodejs v0.11 v0.10 v0.8版本,兼容CoffeeScript,基于Linux 和MacOS. 首先安装pm2 在pm2环境下运行anyproxy 现在anyproxy就在pm2的环境中运行了 之后还有几个pm2的命令可以帮助管理和监控anyproxy 特别提示:pm2运行后,终端窗口是可以关闭的。 使用pm2管理anyproxy进程,最重要的目的是:anyproxy因为错误而退出程序之后,pm2可以另anyproxy自动重启。 三、取消sudo密码,并使pm2开机自启 以下内容是在mac环境下的方法,windows也应该有类似的方法,如果了解的网友可以私信发给我。 1)首先取消sudo的密码 运行命令: 找到代码: 修改为: 这样sudo的密码就取消掉了,然后就可以将pm2加入到开机自启动中了 2)设置开机自启 在终端中输入命令: 然后进入编辑模式,按键盘字母i开始编辑,粘贴代码: 编辑完之后,按esc,再键入命令wq保存退出编辑模式。 再执行命令: 这样一个可执行文件就建立好了 然后打开mac系统的“系统偏好设置”,找到“用户与群组”,在左侧选择当前用户,右侧选择登录项;然后点击+号,找到当前用户的根目录(可以按shift+command+h快捷键),选择autoexec.sh文件,添加到登录项中,就可以开机自启动了。 经过以上的几项设置之后,anyproxy系统就会比原来更加稳定,其实主要原因是模拟器或手机的不稳定导致的anyproxy发生的错误。经过实际测试,anyproxy目前可以长时间运行不崩溃。而微信客户端还是在运行大约6个小时之后崩溃,以2秒翻一页的速度,采集总数大约1万个页面。如果不采集阅读量,就可以是1万个公众号的历史消息页。 微信客户端的崩溃现象是退出微信浏览器,停留在查看公众号资料页面。所以如果希望再进一步提高自动化,也可以使用触动精灵之作自动化脚本,定时推出微信浏览器,再点击历史消息页。这样应该就可以实现长时间自动化采集了。//userRes.end();//把这一行注释掉userRes.end('');//插入这一行
var fs = require("fs"), img = fs.readFileSync("/Library/WebServer/Documents/space.png");//代码绝对路径替换成自己的
if(/mmbiz\.qpic\.cn/i.test(req.url)){ req.replaceLocalFile = true; return true;}else{ return false;}
if(req.replaceLocalFile){ callback(200, {"content-type":"image/png"},img );}
var newOption = option;if(/google|btrace/i.test(newOption.headers.host)){//这里面的正则可以替换成自己不希望访问的网址特征字符串,这里面的btrace是一个腾讯视频的域名,经过实践发现特别容易导致浏览器崩溃,所以加在里面了,继续添加可以使用|分割。 newOption.hostname = "127.0.0.1";//这个ip也可以替换成其他的 newOption.port = "80";}return newOption;
sudo npm install -g pm2
sudo pm2 start anyproxy -x -- -i
//查看运行日志sudo pm2 logs anyproxy [--lines 10]//关闭anyproxysudo pm2 delete anyproxy//重启anyproxysudo pm2 restart anyproxy//监控内存占用sudo pm2 monit//监控运行状态sudo pm2 list
sudo visudo
%admin ALL = (ALL) ALL
%admin ALL = (ALL) NOPASSWD: ALL
cdtouch autoexec.shvim autoexec.sh
#!/bin/sh sudo pm2 start anyproxy -x -- -isudo pm2 monit
chmod 755 autoexec.sh
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号