1)搞一台服务器,什么linux都行,我用的是CentOS 6.5;
2)装个mysql数据库,5.5或5.6均可,图省事可以直接用lnmp或lamp来装,回头还能直接在浏览器看日志;
3)先安个node.js环境,我用的是0.12.7,更靠后的版本没试过;
4)执行npm -g install forever,安装forever好让爬虫在后台跑;
5)把所有代码整到本地(整=git clone);
6)在项目目录下执行npm install安装依赖库;
7)在项目目录下创建json和avatar两个空文件夹;
8)建立一个空mysql数据库和一个有完整权限的用户,先后执行代码里的setup.sql和startusers.sql,创建数据库结构并导入初始种子用户;
9)编辑config.js,标明(必须)的配置项必须填写或修改,其余项可以暂时不改:
exports.jsonPath = "./json/";//生成json文件的路径 exports.avatarPath = "./avatar/";//保存头像文件的路径 exports.dbconfig = { host: 'localhost',//数据库服务器(必须) user: 'dbuser',//数据库用户名(必须) password: 'dbpassword',//数据库密码(必须) database: 'dbname',//数据库名(必须) port: 3306,//数据库服务器端口 poolSize: 20, acquireTimeout: 30000 }; exports.urlpre = "https://www.jb51.net/";//脚本网址 exports.urlzhuanlanpre = "https://www.jb51.net/list/index_96.htm/";//脚本网址 exports.WPurl = "www.xxx.com";//要发布文章的wordpress网站地址 exports.WPusername = "publishuser";//发布文章的用户名 exports.WPpassword = "publishpassword";//发布文章用户的密码 exports.WPurlavatarpre = "http://www.xxx.com/avatar/";//发布文章中替代原始头像的url地址 exports.mailservice = "QQ";//邮件通知服务类型,也可以用Gmail,前提是你访问得了Gmail(必须) exports.mailuser = "12345@qq.com";//邮箱用户名(必须) exports.mailpass = "qqpassword";//邮箱密码(必须) exports.mailfrom = "12345@qq.com";//发送邮件地址(必须,一般与用户名所属邮箱一致) exports.mailto = "12345@qq.com";//接收通知邮件地址(必须)
保存,然后进入下一步。
二、爬虫用户
爬虫的原理其实就是模拟一个真正的知乎用户在网站上点来点去并收集数据,所以我们需要有一个真正的知乎用户。 为了测试可以用你自己的账号,但从长远着想,还是专门注册个小号吧,一个就够,目前的爬虫也只支持一个。 我们的模拟过程不必像真的用户那样从首页登录,而是直接借用cookie值:
注册激活登录之后,进入自己的主页,使用任何有开发者模式或查看cookie插件的浏览器,打开知乎中自己的cookie。 可能有很复杂的一大串,但我们只需要其中一部分,即「z_c0」。 复制你自己cookie中的z_c0部分,连等号、引号、分号都不要落下,最后格式大致是这样的:
z_c0="LA8kJIJFdDSOA883wkUGJIRE8jVNKSOQfB9430=|1420113988|a6ea18bc1b23ea469e3b5fb2e33c2828439cb";
在mysql数据库的cookies表中插入一行记录,其中各字段值分别为:
email:爬虫用户的登录邮箱
password:爬虫用户的密码
name:爬虫用户名
hash:爬虫用户的hash(每个用户不可修改的唯一标识,其实这里用不到,可以暂时留空)
cookie:刚才你复制的cookie
然后就可以正式开始运行了。如果cookie失效或用户被封,直接修改这行记录的cookie字段即可。
三、运行
推荐用forever来执行,这样不仅方便后台运行和记录日志,还能在崩溃后自动重启。 示例:
forever -l /var/www/log.txt index.js
其中-l后的地址就是记录日志的地方,如果放在web服务器目录下,就能在浏览器里通过 来直接查看日志了。在index.js后面加参数(用空格分隔)可以执行不同的爬虫指令:
1、-i 立即执行,如果不加此参数则默认在下一个指定时间执行,如每天凌晨0:05分;
2、-ng 跳过抓取新用户阶段,即getnewuser;
3、-ns 跳过快照阶段,即usersnapshot;
4、-nf 跳过生成数据文件阶段,即saveviewfile;
5、-db 显示调试日志。
各阶段的功能在下一节介绍。为了方便运行,可以将这行命令写成sh脚本,例如:
#!/bin/bash cd /usr/zhihuspider rm -f /var/www/log.txt forever -l /var/www/log.txt start index.js $*
具体路径请替换成自己的。这样就能通过./zhihuspider.sh 加参数来开启爬虫了: 比如./zhihuspider.sh -i -ng -nf就是立即开始任务、跳过新用户和保存文件阶段。停止爬虫的方法是forever stopall(或stop序号)。
四、原理概述
看知乎爬虫的入口文件是index.js。它通过循环方式在每天指定时间执行爬虫任务。每天顺序执行的任务有三个,分别是: