你所需要的,不仅仅是一个好用的代理。
开源地址:https://github.com/atonasting/zhihuspider
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 = "http://www.zhihu.com/";//知乎网址 exports.urlzhuanlanpre = "http://zhuanlan.zhihu.com/";//知乎专栏网址 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";//接收通知邮件地址(必须)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 = "http://www.zhihu.com/";//知乎网址
exports.urlzhuanlanpre = "http://zhuanlan.zhihu.com/";//知乎专栏网址
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」、「login」。 复制你自己 cookie 中的 z_c0 和 index 两部分,连等号、引号、分号都不要落下,最后格式大致是这样的:
z_c0=”LA8kJIJFdDSOA883wkUGJIRE8jVNKSOQfB9430=|1420113988|a6ea18bc1b23ea469e3b5fb2e33c2828439cb”;login=”MGYyODU4MTc5ZJ945jio2F2YzA3MY849cvzOWY=|1420113988|bc1b23ea469e3b5fb2e33c28284121fa2f606547″;
在 mysql 数据库的 cookies 表中插入一行记录,其中各字段值分别为:
然后就可以正式开始运行了。
如果 cookie 失效或用户被封,直接修改这行记录的 cookie 字段即可。
推荐用 forever 来执行,这样不仅方便后台运行和记录日志,还能在崩溃后自动重启。 示例:
forever -l /var/www/log.txt index.js
其中 – l 后的地址就是记录日志的地方,如果放在 web 服务器目录下,就能在浏览器里通过 http://www.xxx.com/log.txt 来直接查看日志了。
在 index.js 后面加参数(用空格分隔)可以执行不同的爬虫指令:
各阶段的功能在下一节介绍。
为了方便运行,可以将这行命令写成 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。它通过循环方式在每天指定时间执行爬虫任务。
每天顺序执行的任务有三个,分别是:
在以上三个任务执行完毕后,主线程会每隔几分钟刷新一次知乎首页,验证当前 cookie 是否仍然有效,如果失效(跳到未登录页),则会给指定邮箱发送通知邮件,提醒及时更换 cookie。 更换 cookie 的方法和初始化时一致,只需手工登录一次然后取出 cookie 值就行了。
如果对具体代码实现感兴趣可以仔细看里面的注释,调整一些配置,甚至尝试自己重构整个爬虫。
阿布云高速代理IP,分布式动态代理IP,高质量IP代理,全国高匿代理ip,爬虫代理,私密代理IP,国内极速代理IP,优质代理IP
https://www.abuyun.com
文章转载:https://geekspider.org