如果你不会Python语言,正好又是一个node.js小白,看完这篇文章之后,一定会觉得受益匪浅,感受到自己又新get到了一门技能,如何用node.js从零开始去写一个简单的爬虫,十分钟时间就能搞定,步骤其实很简单。node的安装就不一步步的解释了,如果不会可以自行百度。在node开大环境下开始第一步:

1:在d盘新建一个文件夹WebSpider

2:cmd右键以管理员模式打开,进入d盘,cd 进入刚刚创建的文件夹里面

cd WebSpider

3:mkdir FirstSpider (创建一个FirstSpider文件夹)

创建FirstSpider文件夹之后的目录

4:进入刚刚创建的文件夹里面 cd FirstSpider

5: npm init (初始化工程)

此时需要填写一些项目信息,你可以根据情况填写,当然也可以一路回车。

创建完项目后,会生成一个package.json的文件。该文件包含了项目的基本信息。

6:安装第三方包(后面程序会直接调用包的模块)

说明:由于http模块、fs模块都是内置的包,因此不需要额外添加。

这里安装cheerio包,和request包。request 用于发起http请求

cheerio 用于将下载下来的dom进行分析和提取 你可以把它当做jQuery来用

在cmd中,cd进入cd FirstSpider文件夹,然后执行命令:

npm install cheerio –save

安装完cheerio包后,继续安装request包, npm install request –save

说明:npm(nodejs package manager),nodejs包管理器;

–save的目的是将项目对该包的依赖写入到package.json文件中。

如果想要将爬取的数据和图片分类放好,那就事先建立一个data和image文件夹准备着。

在FirstSpider文件夹下新建

创建子文件夹data(用于存放所抓取的新闻文本内容)
创建子文件夹image(用于存放所抓取的图片资源)
创建一个first_spider文件

整个项目的目录结构如下图所示:

7:重点内容,打开first_spider,并一行一行的敲代码,如果你不想写代码的话,去网站上找一些代码过来进行测试即可。

var request = require('request')
var cheerio = require('cheerio')
for(var i = 1;i<4;i++){
request('http://www.souweixin.com/personal?t=41&p='+i,function(error,response,body){
if(!error && response.statusCode == 200){
$ = cheerio.load(body)
var links = [];
$(".boldBorder > a").each(function(i,item){
links.push($(this).attr("href"))
})
for(var i=0;i<links.length;i++){
request('http://www.souweixin.com'+links[i],function(error,response,body){
if(!error && response.statusCode == 200){
$ = cheerio.load(body)
console.log('weixin: '+$('.bold').text()+' name: '+$('h1').text()+' desc: '+$('.f18').text());
}
})
}
}
})
}

8:运行程序,命令很简单哦

在cmd命令行下,cd 到你创建工程文件夹FirstSpider下,然后 node first_spider.js 程序就跑起来了。

9:注意:如果这个时候遇见这样的bug

80端口被占用,这里额外的提一下:

解决端口被占用的问题:https://www.jianshu.com/p/a7fc19b0c2f1

找到这些端口,一个个关闭即可

原文作者:祈澈姑娘

技术博客:https://www.jianshu.com/u/05f416aefbe1

90后前端妹子,爱编程,爱运营,爱折腾。 坚持总结工作中遇到的技术问题,坚持记录工作中所所思所见.

用node.js从零开始去写一个简单的爬虫的更多相关文章

  1. 使用Node.js原生API写一个web服务器

    Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...

  2. 使用 js,自己写一个简单的滚动条

    当我们给元素加上 overflow: auto;  的时候,就会出现滚动条,然而浏览的不同,滚动条的样式大不一样,有些甚至非常丑. 于是就想着自己写一个滚动条,大概需要弄清楚一下这几个点: 1.滚动条 ...

  3. Node.js实战14:一个简单的TCP服务器。

    本文,将会展示如何用Nodejs内置的net模块开发一个TCP服务器,同时模拟一个客户端,并实现客户端和服务端交互. net模块是nodejs内置的基础网络模块,通过使用net,可以创建一个简单的tc ...

  4. 用node.js给C#写一个数据表的实体类生成工具

    虽然微软提供了T4模板,但是我感觉非常难用.哪儿比得上直接用脚本来写模板来的爽. 因为要给一个老项目做周边的工具,需要连接到数据库. 我习惯性用EntityFrameworkCore来做,因为毕竟从出 ...

  5. 第一个Three.js程序——动手写一个简单的场景

    三维场景基本要素: 步骤: 代码: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  6. js eval函数写一个简单的计算器

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 原生js 基于canvas写一个简单的前端 截图工具

    先看效果 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  8. golang写一个简单的爬虫

    package main import( "fmt" "io/ioutil" "net/http" ) func gethtml(url s ...

  9. Python写一个简单的爬虫

    code #!/usr/bin/env python # -*- coding: utf-8 -*- import requests from lxml import etree class Main ...

随机推荐

  1. AlexNet (ImageNet模型)

    介绍 AlexNet是LeNet的一种更深更宽的版本.首次在CNN中应用ReLU.Dropout和LRN,GPU进行运算加速. 一共有13层,有8个需要训练参数的层(不包括池化层和LRN层),前5层是 ...

  2. Lenovo k860i 移植Android 4.4 cm11进度记录【下篇--实时更新中】

    2014.8.24 k860i的cm11的移植在中断了近两三个月之后又开始继续了,进度记录的日志上一篇已经没什么写的了,就完结掉它吧,重新开一篇日志做下篇好了.最近的战况是,在scue同学的努力之下, ...

  3. md5sum---文件校验和

    md5sum命令采用MD5报文摘要算法(128位)计算和检查文件的校验和.一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行. MD5算法常常被用来验证网络文件传输的完 ...

  4. ECNUOJ 2144 抗震机械制造

    抗震机械制造 Time Limit:1000MS Memory Limit:65536KBTotal Submit:312 Accepted:78 Description  为了应付可能到来的地震,E ...

  5. C++ 输出缓冲区的管理

    在C++中,每个I/O对象管理一个缓冲区,用于存储程序读写的数据.本文将对输出缓冲区的管理进行简单的讲解. 举一个简单的例子: myOs << "Please enter a v ...

  6. KM HDU 3718

    #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...

  7. smarty课程---smarty的处理过程是怎样的

    smarty课程---smarty的处理过程是怎样的 一.总结 一句话总结:编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译 1. smarty将php源文件,首先编译 ...

  8. Android setBackgroundResource和setBackgroundDrawable和用法

    两个方法的效果是一样,只是区别于效率! playBtn.setBackgroundResource(R.drawable.pause_selecor); 从上面可以看出来是从资源文件中获取drawab ...

  9. python 批量下载文件

    file.txt 的内容为: http://183.xxx.xxx.54:188/my/qqq.ico::qq.exe::0::http://183.xxx.xxx.54:186/my/ddnf.ic ...

  10. JS模式

    策略 命令 迭代器 代理 组合 发布/订阅 单例 享元 职责链 中介者 装饰者 状态 适配器 设计原则: 单一职责.最少知识.开放-封闭