【实践】nodeJS写个简单的爬虫程序
来源:互联网 发布:python 字典嵌套列表 编辑:程序博客网 时间:2024/04/30 14:35
写在前面
经常说SEO却从来没有写过爬虫,今天很有幸看到了关于nodeJS的爬虫程序的实现,模仿着写了个demo,权当砖头抛给大家了。
程序架构
因为是基于nodeJS,我们所需准备的架构很简单,用express4.x生成一个项目,然后再安装request和cheerio模块就可以。项目的package.json是这样的:
{ "name": "spider", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.13.2", "cookie-parser": "~1.3.5", "debug": "~2.2.0", "express": "~4.13.1", "jade": "~1.11.0", "morgan": "~1.6.1", "serve-favicon": "~2.3.0" }, "devDependencies": { "cheerio": "^0.19.0", "request": "^2.67.0" }}
当然你也可以直接 copy这个package.json到你自己的项目里,然后 npm install
就可以了。
cheerior模块介绍
用最简单的一句话概括 —— ”cheerior是运行在node服务端的jQuery“,也就是说 cheerior可以像jQuery一样提供简单的API去操纵DOM树。
它的API和jQuery操纵DOM的API基本一致,如果你想更深入地学习cheerior,不妨去看看它在npm的官网的标准API文档:https://www.npmjs.com/package/cheerio 。不过是英文版的哦,如果觉得看不太懂,这里还有个中文精简版的:https://cnodejs.org/topic/5203a71844e76d216a727d2e
抓取网站的源码
安装完所有的node_modules,我们就可以开始我们的抓取之旅了。当然在抓取之前我必须声明:不是每个网站的所有信息都可以爬,我们必须遵循robots协议,否则可能会涉及到法律问题。
举个例子,比如京东的robots文件:
Disallow的东西你是不能爬的,如果你去篡改这个文件那京东就可以告你侵权了。
下面再举个实际的例子,这是我抓取我们八爱网首页的一些信息,代码很简单:
app.js (为了方便我改了原本的app.js)
var express=require('express');var request=require('request');var cheerio=require('cheerio');var app=express();app.get('/',function(req,res){ res.charset='utf-8'; request('http://www.baai.com/',function(err,response,body){ if(!err && response.statusCode==200){ $=cheerio.load(body); //当前$相当于整个body的选择器 var proInfos=$('.pro-info>h4'); var imgs=$('.pro-img>img'); var imgsTemp=[],proInfosTemp=[]; for(var i=0,len=imgs.length;i<len;i++){ imgsTemp.push(imgs.eq(i).attr('data-original')); proInfosTemp.push(proInfos.eq(i).html()); } res.json({ 'productImage':imgsTemp, 'proInfosName':proInfosTemp }); } });});app.listen(3000);
接下来用 supervisor 启动这个node服务,对supervisor有疑问的同学欢迎出门左转翻一翻我前一篇【实践】express搭建nodeJS中间层(三),那里有比较详细的介绍。
好了,成功启动之后控制台可以看到这样的信息:
接下来我们打开浏览器,输入 127.0.0.1:3000 ,就启动这个爬虫程序了,抓取到的数据是这样的:
后话
今天就先写个简单的demo吧,感兴趣的同学可以继续研究 如何抓取 ajax 返回的内容。
- 【实践】nodeJS写个简单的爬虫程序
- 写了个简单的爬虫
- 使用nodejs写一个简易的爬虫
- 用hadoop写了个简单的并行爬虫
- 用python写了个小的爬虫程序
- 使用beautifulsoup写的第一个小爬虫程序
- 使用Python写的第一个网络爬虫程序
- Python写的网络爬虫程序(很简单)
- linux下用python写简单的爬虫程序
- 写个简单的生成奇阶幻方程序!
- 基于Nodejs的第一个小爬虫
- 我的第一个简单的爬虫程序
- 简单的爬虫程序
- 简单高效的nodejs爬虫模型
- nodejs 学习 - 简单爬虫
- Nodejs简单爬虫
- nodejs的第一个程序
- 第一个工程2,-写个简单的测试程序
- 匈牙利算法
- 虚拟机访问本地机
- 各种排序算法的分析及java实现
- 处理机进程调度模拟
- 微信支付注意事项
- 【实践】nodeJS写个简单的爬虫程序
- 计算几何学简单的模板
- gentoo下编译arm64版本Qt5.5 for android
- ios runTime 的理论和使用 iOS 万能跳转界面方法
- Linux库函数文件编程类整理
- netstat命令
- 常见的转义字符及含义
- java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
- USACO--Dual Palindromes