位置: 编程技术 - 正文

基于Node.js的强大爬虫 能直接发布抓取的文章哦(node.js实战)

编辑:rootadmin

推荐整理分享基于Node.js的强大爬虫 能直接发布抓取的文章哦(node.js实战),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node.js基础入门,基于nodejs的项目,nodejsorg,nodejsorg,node.js基础入门,nodejsorg,基于nodejs的项目,node.js基础知识,内容如对您有帮助,希望把文章链接给更多的朋友!

一、环境配置

1)搞一台服务器,什么linux都行,我用的是CentOS 6.5;

2)装个mysql数据库,5.5或5.6均可,图省事可以直接用lnmp或lamp来装,回头还能直接在浏览器看日志;

3)先安个node.js环境,我用的是0..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,标明(必须)的配置项必须填写或修改,其余项可以暂时不改:

保存,然后进入下一步。

二、爬虫用户

爬虫的原理其实就是模拟一个真正的知乎用户在网站上点来点去并收集数据,所以我们需要有一个真正的知乎用户。 为了测试可以用你自己的账号,但从长远着想,还是专门注册个小号吧,一个就够,目前的爬虫也只支持一个。 我们的模拟过程不必像真的用户那样从首页登录,而是直接借用cookie值:

注册激活登录之后,进入自己的主页,使用任何有开发者模式或查看cookie插件的浏览器,打开知乎中自己的cookie。 可能有很复杂的一大串,但我们只需要其中一部分,即「z_c0」。 复制你自己cookie中的z_c0部分,连等号、引号、分号都不要落下,最后格式大致是这样的:

在mysql数据库的cookies表中插入一行记录,其中各字段值分别为:

email:爬虫用户的登录邮箱 password:爬虫用户的密码 name:爬虫用户名 hash:爬虫用户的hash(每个用户不可修改的唯一标识,其实这里用不到,可以暂时留空) cookie:刚才你复制的cookie

然后就可以正式开始运行了。如果cookie失效或用户被封,直接修改这行记录的cookie字段即可。

基于Node.js的强大爬虫 能直接发布抓取的文章哦(node.js实战)

三、运行

推荐用forever来执行,这样不仅方便后台运行和记录日志,还能在崩溃后自动重启。 示例:

其中-l后的地址就是记录日志的地方,如果放在web服务器目录下,就能在浏览器里通过 来直接查看日志了。在index.js后面加参数(用空格分隔)可以执行不同的爬虫指令: 1、-i 立即执行,如果不加此参数则默认在下一个指定时间执行,如每天凌晨0:分;2、-ng 跳过抓取新用户阶段,即getnewuser;3、-ns 跳过快照阶段,即usersnapshot;4、-nf 跳过生成数据文件阶段,即saveviewfile;5、-db 显示调试日志。各阶段的功能在下一节介绍。为了方便运行,可以将这行命令写成sh脚本,例如:

具体路径请替换成自己的。这样就能通过./zhihuspider.sh 加参数来开启爬虫了: 比如./zhihuspider.sh -i -ng -nf就是立即开始任务、跳过新用户和保存文件阶段。停止爬虫的方法是forever stopall(或stop序号)。

四、原理概述

看知乎爬虫的入口文件是index.js。它通过循环方式在每天指定时间执行爬虫任务。每天顺序执行的任务有三个,分别是:

1)getnewuser.js:通过当前库内用户关注者列表的对比,抓取新用户信息,依靠此机制可以自动将知乎上值得关注的新人纳入库中;

2)usersnapshot.js:循环抓取当前库内用户资料和答案列表,并以每日快照形式保存下来。

3)saveviewfile.js:根据最近一次快照内容,生成用户分析列表,并筛选出昨日、近日和历史精华答案发布到「看知乎」网站。

在以上三个任务执行完毕后,主线程会每隔几分钟刷新一次知乎首页,验证当前cookie是否仍然有效,如果失效(跳到未登录页),则会给指定邮箱发送通知邮件,提醒及时更换cookie。 更换cookie的方法和初始化时一致,只需手工登录一次然后取出cookie值就行了。如果对具体代码实现感兴趣可以仔细看里面的注释,调整一些配置,甚至尝试自己重构整个爬虫。

Tips

1)getnewuser的原理是通过对比前后两天快照中用户的关注数量进行指定抓取,所以必须有了至少两次快照之后才能开始,之前就算执行也会自动跳过。

2)快照抓到一半是可以恢复的。如果程序出错崩溃,用forever stop停止它,然后加上参数-i -ng,立即执行并跳过新用户阶段就能从刚才抓到一半的快照继续下去了。

3)不要轻易增加快照抓取时的(伪)线程数,即usersnapshots中的maxthreadcount属性。线程太多会导致错误,同时抓取回来的大量数据可能会来不及写入数据库造成内存溢出。所以,除非你的数据库搭在SSD上,线程不要超过个。

4)saveviewfile生成分析结果的工作需要至少近7天的快照才能进行,如果快照内容少于7天会报错并跳过。此前的分析工作可以手动查询数据库进行。

5)考虑到大多数人并不需要复制一个「看知乎」,已经将自动发布wordpress文章函数入口注释掉了。如果你搭建好了wordpress,记得开启xmlrpc,然后设置一个专门用于发布文章的用户,在config.js中配置相应参数并将saveviewfile中的相关代码解除注释。

6)由于知乎对头像做了防盗链处理,我们在抓取用户信息时一并也将头像获取了下来,保存在本地,发布文章时使用的是本地头像地址。需要在http服务器中将url路径指向保存头像的文件夹,或者将保存头像的文件夹直接放到网站目录下。

7)代码可能不太容易读懂。除了node.js的回调结构本身就较混乱之外,还有一部分原因是最初写程序时我刚刚开始接触node.js,有很多不熟悉的地方导致结构混乱没有来得及改正;另一部分是在多次缝缝补补中累加了许多丑陋的判断条件和重试规则,如果全部去掉,代码量可能会下降三分之二。但这是没有办法的事,为了保障一个系统的稳定运行,必须加入这些。

8)本爬虫源码基于WTFPL协议,不对修改和发布做任何限制。

标签: node.js实战

本文链接地址:https://www.jiuchutong.com/biancheng/370653.html 转载请保留说明!

上一篇:Node.js静态文件服务器改进版(nodejs静态编译)

下一篇:实例详解Nodejs 保存 payload 发送过来的文件(奇门遁甲实例详解)

  • 福利费进项税额转出会计分录账务处理
  • 消费税的三种计税方法及各自的计算公式
  • 我国采用的税率形式有哪几种
  • 税率的具体形式
  • 代加工可靠吗
  • 猪肉是否免税
  • 财务费用为什么借方红字
  • 如何分清进口农产品增值税抵扣率
  • 制造业三项费用占比行业怎么算
  • 企业股权转让影响利润吗
  • 代扣公积金会计怎么做账
  • 写字楼出租可以给租户注册吗
  • 分期缴纳土地出让金的契税
  • 进项税额转出会影响利润吗
  • 所得税网上申报表
  • 工资表中有哪些项目
  • 总资产周转率计算公式用不用乘100%
  • 税号里的字母要大写还是小写
  • 企业所得税季度预缴
  • 哪些金融资产不计提减值
  • 开错的发票正常入账吗
  • 简易计税项目取得的进项发票可以抵扣别的项目吗
  • 不同行业的单位名称
  • 企业注销后资金处理
  • 营改增后二手固定资产折旧纳税调整怎么做账?
  • 啥叫规上工业企业
  • 残疾人保障金工资总额包括社保吗
  • 持有至到期投资是什么意思
  • 一般纳税人有什么区别
  • Linux如何给文件赋予内容
  • 个体工商户年检怎么办
  • 出口退税申请流程
  • php 字符串 数组
  • 无线路由器温度范围
  • 免抵退税怎么做账
  • 计入当期损益的利得分录
  • 房产税土地税用不用计提
  • 低值易耗品摊销表格
  • vue3.0动态路由
  • 若依框架前端发请求
  • win11磁盘分区后不显示
  • 报销差旅费属于什么现金流量项目
  • 出纳报销时应注意什么
  • 每个公司都要交五险一金吗
  • 当月入账的进项税必须当月认证吗
  • 公司福利可以发现金吗
  • winXP系统安装SQLServer2005开发版具体过程与注意问题
  • 房产互换如何交税费
  • 企业应纳税额计算直接利息的应纳税额
  • 开票金额为什么是负数
  • 融资租赁手续费进项税能抵扣吗
  • 明细与发票
  • 企业管理费用科目有哪些
  • 汇算清缴步骤及处理方法
  • 对公付货款没有收到发票如何处理
  • 会计的三个结转是什么
  • 小微企业取得的进项税能不能抵扣
  • 厂家给的促销费可以退吗
  • 分公司独立核算和非独立核算哪个好
  • 财务费用包括哪几项
  • 模具的生产工艺流程
  • 通过SQL绘制杨辉三角的实现方法介绍
  • 磁盘碎片 win7
  • Win10 PC/Mobile Creators快速预览版14959今日推送
  • 微软招聘流程
  • linux关闭系统
  • [置顶] rwmfqg
  • bat 批处理文件
  • jquery设置title
  • angular.js
  • php7 数组
  • python保存文件到指定文件夹
  • Android的AdapterView及其子类简介-android学习之旅(二十三)
  • python怎么用命令行
  • Python中的def
  • 安卓activity类
  • 湖北生育登记网上服务大厅官网查询
  • 安徽省地方税务局公告2016年第1号
  • 预缴增值税最后怎么处理
  • 江苏省国税局局长
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设