0

0

用好anyproxy提高公众号文章采集效率详解

jacklove

jacklove

发布时间:2018-07-07 17:50:44

|

3574人浏览过

|

来源于php中文网

原创

给大家分享一下anyproxy进阶使用方法,并且通过这个分享如何提高公众号文章采集效率的分析,需要的朋友参考学习下吧。

影响因素主要会有以下几点:

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){这个函数,并修改内容

//userRes.end();//把这一行注释掉
userRes.end('');//插入这一行

这样当发生错误时,会返回一个刷新当前页面的js;这样程序就能继续下去了

2)替换所有图片,减轻浏览器负担

首先需要制作一张非常小的图片,我做的是1x1像素,png透明图;放到任意文件夹里。然后修改文件rule_default.js的代码:

在文件开头有许多var的位置加入以下代码

var fs = require("fs"),
 img = fs.readFileSync("/Library/WebServer/Documents/space.png");//代码绝对路径替换成自己的

在下面的代码中找到shouldUseLocalResponse : function(req,reqBody){函数,在函数内插入代码:

if(/mmbiz\.qpic\.cn/i.test(req.url)){
 req.replaceLocalFile = true;
 return true;
}else{
 return false;
}

继续在下面的代码中找到dealLocalResponse : function(req,reqBody,callback){函数,在函数内插入代码:

if(req.replaceLocalFile){
 callback(200, {"content-type":"image/png"},img );
}

这三段代码就会将公众号里面的所有图片替换成本地图片,减轻网络传输压力和浏览器占用的内存,有效的提高运行效率;

3)禁止手机或模拟器访问一些无用的和会导致错误的网址

同样在rule_default.js里找到代码replaceRequestOption : function(req,option){函数,在函数内部插入代码:

var newOption = option;
if(/google|btrace/i.test(newOption.headers.host)){//这里面的正则可以替换成自己不希望访问的网址特征字符串,这里面的btrace是一个腾讯视频的域名,经过实践发现特别容易导致浏览器崩溃,所以加在里面了,继续添加可以使用|分割。
 newOption.hostname = "127.0.0.1";//这个ip也可以替换成其他的
 newOption.port  = "80";
}
return newOption;

这个修改之前的文章也提到过了,在这里重新再详细介绍一下。他的用途很多,不同的手机和模拟器都有可能访问一些无用的地址导致设备变慢,通过这个代码就可以阻止访问。

二、使用pm2管理anyproxy进程

pm2 是一个带有负载均衡功能的Node应用的进程管理器.

当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。它非常适合IaaS结构,但不要把它用于PaaS方案(随后将开发Paas的解决方案).

主要特性:

内建负载均衡(使用Node cluster 集群模块)

后台运行

0秒停机重载,我理解大概意思是维护升级的时候不需要停机.

具有Ubuntu和CentOS 的启动脚本

停止不稳定的进程(避免无限循环)

控制台检测

提供 HTTP API

远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

UP简历
UP简历

基于AI技术的免费在线简历制作工具

下载

测试过Nodejs v0.11 v0.10 v0.8版本,兼容CoffeeScript,基于Linux 和MacOS.

首先安装pm2

sudo npm install -g pm2

在pm2环境下运行anyproxy

sudo pm2 start anyproxy -x -- -i

现在anyproxy就在pm2的环境中运行了

之后还有几个pm2的命令可以帮助管理和监控anyproxy

//查看运行日志
sudo pm2 logs anyproxy [--lines 10]
//关闭anyproxy
sudo pm2 delete anyproxy
//重启anyproxy
sudo pm2 restart anyproxy
//监控内存占用
sudo pm2 monit
//监控运行状态
sudo pm2 list

特别提示:pm2运行后,终端窗口是可以关闭的。

使用pm2管理anyproxy进程,最重要的目的是:anyproxy因为错误而退出程序之后,pm2可以另anyproxy自动重启。

三、取消sudo密码,并使pm2开机自启

以下内容是在mac环境下的方法,windows也应该有类似的方法,如果了解的网友可以私信发给我。

1)首先取消sudo的密码

运行命令:

sudo visudo

找到代码:

%admin   ALL = (ALL) ALL

修改为:

%admin   ALL = (ALL) NOPASSWD: ALL

这样sudo的密码就取消掉了,然后就可以将pm2加入到开机自启动中了

2)设置开机自启

在终端中输入命令:

cd
touch autoexec.sh
vim autoexec.sh

然后进入编辑模式,按键盘字母i开始编辑,粘贴代码:

#!/bin/sh 
sudo pm2 start anyproxy -x -- -i
sudo pm2 monit

编辑完之后,按esc,再键入命令wq保存退出编辑模式。

再执行命令:

chmod 755 autoexec.sh

这样一个可执行文件就建立好了

然后打开mac系统的“系统偏好设置”,找到“用户与群组”,在左侧选择当前用户,右侧选择登录项;然后点击+号,找到当前用户的根目录(可以按shift+command+h快捷键),选择autoexec.sh文件,添加到登录项中,就可以开机自启动了。

经过以上的几项设置之后,anyproxy系统就会比原来更加稳定,其实主要原因是模拟器或手机的不稳定导致的anyproxy发生的错误。经过实际测试,anyproxy目前可以长时间运行不崩溃。而微信客户端还是在运行大约6个小时之后崩溃,以2秒翻一页的速度,采集总数大约1万个页面。如果不采集阅读量,就可以是1万个公众号的历史消息页。

微信客户端的崩溃现象是退出微信浏览器,停留在查看公众号资料页面。所以如果希望再进一步提高自动化,也可以使用触动精灵之作自动化脚本,定时推出微信浏览器,再点击历史消息页。这样应该就可以实现长时间自动化采集了。

相关推荐:

PHP写微信公众号文章页采集方法讲解

如何采集微信公众号历史消息页的详解

PHP实现基数排序的方法讲解

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2525

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1603

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1495

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1416

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP8,究竟有啥野心..!?
PHP8,究竟有啥野心..!?

共4课时 | 0.5万人学习

Vue.js开发基础教程
Vue.js开发基础教程

共30课时 | 7.5万人学习

PHP开发微信公众号平台从简到精
PHP开发微信公众号平台从简到精

共25课时 | 5.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号