一起学爬虫 Node.js 爬虫篇(一)

来源:互联网 发布:网络教育龙头股 编辑:程序博客网 时间:2024/05/22 12:30

版权声明:本文为 wintersmilesb101 -(个人独立博客– http://wintersmilesb101.online 欢迎访问)博主原创文章,未经博主允许不得转载。

一看到爬虫或者一百度爬虫,那是铺天盖地的全是 Python 爬虫啊,不得不说爬虫的框架与资料,Python 基本是最多的了,不过物极必反,Python 的爬虫有几点问题:
1.Python 对 DOM 支持貌似不是很好,网页的 DOM 处理不太好
2.Python 对网页编码的处理。
3.最重要的就是 Python 需要多线程。

以上问题我们现在即将使用的 Node.js 全部是优势!

同样,Node.js 也有劣势,Node.js 是单线异步,这样很容易导致爬取请求发起顺序和结果返回顺序不一致,因此我们需要添加上请求序列号,处理完的再重新排序来实现结果与请求一致。还有,Node.js 毕竟是前端,数据的处理相较而言要差的多,但是作为网站数据爬取绝对够了。废话不多说,下面进入 Node.js 爬虫,

Node.js 爬虫步骤

1.创建工程目录
这个随便你建立在什么地方,不过最好路径不要有中文,谁知道会不会出什么岔子。比如我们的工程路径为: E:\adt-bundle-windows-x86_64-20131030\Nodejs\nests_Dataget
2.cmd 进入工程目录,初始化工程,命令依次如下
E:cd E:\adt-bundle-windows-x86_64-20131030\Nodejs\nests_Datagetnpm init
npm init 是在当前目录创建模块(也就是生成 package.json)其文件属性说明如下
  • name - 包名。
  • version - 包的版本号。
  • description - 包的描述。
  • homepage - 包的官网 url 。
  • author - 包的作者姓名。
  • contributors - 包的其他贡献者姓名。
  • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。也就是你 Git 的仓库地址
  • main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require(“express”)。
  • keywords - 关键字
输入了 npm init 之后会依次出现下面的询问
$ npm initThis utility will walk you through creating a package.json file.It only covers the most common items, and tries to guess sensible defaults.See `npm help json` for definitive documentation on these fieldsand exactly what they do.Use `npm install <pkg> --save` afterwards to install a package andsave it as a dependency in the package.json file.Press ^C at any time to quit.name: (node_modules) runoob                   # 模块名version: (1.0.0) #模块版本description: Node.js 测试模块(www.runoob.com)  # 描述entry point: (index.js)test command: make testgit repository: https://github.com/runoob/runoob.git  # Github 地址keywords: #关键字author: #作者license: (ISC) #许可类型About to write to ……/node_modules/package.json:      # 生成地址{  "name": "runoob",  "version": "1.0.0",  "description": "Node.js 测试模块(www.runoob.com)",  ……}Is this ok? (yes) yes
上面的信息你可以根据自己的情况填写,填写有错误也不要紧,我们可以通过 package.json 随时修改。
3.安装 request 和 cheerio 依赖
  • request,跟python里request功能一样。它的功能就是建立起对目标网页的链接,并返回相应的数据。是我们做爬虫的重要一步,没有数据我们去哪里爬?
  • cheerio的功能是用来操作 dom 元素的,他可以把 request 返回来的数据转换成可供 dom 操作的数据,更重要的 cheerio 的 api 跟 jquery 一样,用$来选取对应的dom结点,这样就可以想取啥就取啥,感谢强大的 DOM
安装命令如下
npm install request --savenpm install cheerio

界面如下

image

image

4.接下来我们终于可以开始操作我们的 js 代码了

新建一个 js 文件,如果是主入口文件名称应该注意和 package.json 中 entry point 一致。
这里我们新建一个 名为 server.js 的文件
建立依赖引用,代码如下
var request = require("request");var cheerio = require("cheerio");
接下来我们就来爬爬百度首页链接为:https://www.baidu.com/
request('https://www.baidu.com/',function(err,result){    if(err){        console.log("错误:"+err);        return;    }    console.log(result.body);})
在 cmd 中输入 node server.js ,回车,代码没有打错就会出现如下界面

image

可以看到我们已经获取到了网页的数据,漫漫长路我们已经走出了重要开头一步,只要能拿到完整的 Html 网页源码我们就好办了。
现在就是数据处理,前面我们不是还有个库没有用到吗? 没错就是 cheerio 库的使用
现在我们来修改上面的代码,把成功获取到的网页交给 cheerio 处理,至于数据要怎么来通过 DOM 提取,我们这里通过 UC浏览器 访问 https://www.baidu.com/ 按下 F12 进入开发者模式依次对比看看我们要抓取的信息的位置,如这里我们要抓出百度的 title

image

接下来就是编写抓取的 DOM 语句,不知道怎么使用的这里有 DOM 文档 ,以及 JQuery 文档,我们这里要获取到标题的 DOM 就是 $(‘title’).text(),于是代码改成如下:
//把 html 装载到 cheerio 中      var $ = cheerio.load(result.body);        //通过 DOM 抓取网页数据        console.log($('title').text());
效果:

image

不过现在我们抓取的是静态页面,别如百度首页的新闻那些我们是获取不到的,下一篇我们就来学习动态页面的抓取。
0 0
原创粉丝点击