正在使用的项目 https://manefuwu.com/
npm install
查看puppeteer缺失的库
ldd node_modules/puppeteer/.local-chromium/linux-756035/chrome-linux/chrome
安装缺失的库 NOT FUND eg:
yum install libXtst.x86_64
或者 安装不了,未找到库可以使用这样的命令
yum install libgbm*
修改 app.js 中域名为自己项目的域名。
接下来配置Nginx
upstream spider_server {
server localhost:3000;
}
#在 location / 中添加
if ($http_user_agent ~* "Baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator|bingbot|Sosospider|Sogou Pic Spider|Googlebot|360Spider") {
proxy_pass http://spider_server;
}
重启Nginx以后。在项目文件夹下运行项目
node app.js
这个时候可以用postman 模拟百度爬虫来检验一下是否能抓取成功, 设置
User-Agent:Mozilla/5.0 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)
输入解析后的HTML,大功告成!
然后很快就发现了一个问题,无论是用 nohup node app.js 还是 node app.js & 只要关闭了SSH窗口就会抓取失败了。通过百度谷歌一番找到了问题,需要用PM2来守护node进程。
npm install -g pm2
通过运行
pm2 -v
来验证安装是否成功,如果运行不成功需要做一下链接
ln -s /data/node-v12.4.0-linux-x64/bin/pm2 /usr/bin/pm2
用pm2来启动项目,有以下多种方式
pm2 start app.js
pm2 start app.js --name my-api #my-api为PM2进程名称
pm2 start app.js -i 0 #根据CPU核数启动进程个数
pm2 start app.js --watch #实时监控app.js的方式启动,当app.js文件有变动时,pm2会自动reload</pre>
关于pm2命令
pm2 list //查看进程
pm2 monit //监控
pm2 stop all //停止PM2列表中所有的进程
pm2 stop 0 //停止PM2列表中进程为0的进程
pm2 reload all //重载PM2列表中所有的进程
pm2 reload 0 //重载PM2列表中进程为0的进程
pm2 restart all //重启PM2列表中所有的进程
pm2 restart 0 //重启PM2列表中进程为0的进程
pm2 delete 0 //删除PM2列表中进程为0的进程
pm2 delete all //删除PM2列表中所有的进程
运行 pm2 start app.js。
断开SSH测试抓取,大功告成!
附 :
puppeteer官方文档
https://zhaoqize.github.io/puppeteer-api-zh_CN/#/
参考博客及项目