使用node crawler模块获取网页信息

Crawler 模块

crawler是基于node.js的爬虫工具,爬虫这个词语,一般提出来,想到的都是python相关的,node的crawler模块提供了爬取网站信息的功能。

安装

第一步肯定是安装 模块,至于说 npm init -y 去初始化,不算在内。首先使用npm去安装模块 npm i crawler。爬取数据后,放在哪里呢?数据库里 所以顺便去安装一下mysql模块 npm i mysql

导入模块

安装成功后就要准备导入模块了

const Crawler = require("crawler");

const mysql = require("mysql");

连接数据库

然后使用mysql链接数据库

const connection = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "123456",
    database: "test"
})

创建爬虫对象

var c = new Crawler({})

{}里有几个主要的属性:

1.可以爬取的最大连接数

 maxConnections: 10

2.callback (在页面爬取完后触发)
callback有三个参数

1.error:错误信息
2.res: 服务器响应的数据资源合集

  • res下面一个我们要用到属性 $HTML或XML文档的jQuery选择器
  • res.body HTTP响应实体部分
  • res.headers HTTP响应头部
  • res.statusCode HTTP状态码,正常返回 200

3.done在处理结束之后必须调用此函数

将爬取的网站加入任务队列

使用queue方法将任务加入队列,并等待其被执行。queue 有两个从参数 第一个参数是要爬取的网址,后面的参数可选填,平时只用第一个参数就可以。

这里我们爬取一些网址

c.queue('https://cqcn.fandom.com/zh/wiki/%E5%BC%93%E6%89%8B')
c.queue('https://cqcn.fandom.com/zh/wiki/%E5%89%91%E5%A3%AB')
c.queue('https://cqcn.fandom.com/zh/wiki/%E7%8C%8E%E4%BA%BA')
c.queue('https://cqcn.fandom.com/zh/wiki/%E6%B3%95%E5%B8%88')
c.queue('https://cqcn.fandom.com/zh/wiki/%E7%A5%AD%E5%8F%B8')
c.queue('https://cqcn.fandom.com/zh/wiki/%E9%AA%91%E5%A3%AB')

完善爬虫对象

一些重要代码标记了注释

var c = new Crawler({

    // 可以爬取的最大的连接数
    maxConnections: 10,

    // 一般是在页面爬取完毕之后触发
    callback: function (error, res, done) {
        if (error) {
            console.log(error);
        } else {
            // 网站爬取成功之后  给爬取到的对象加一个$对象 表示 当前爬取到的数据都可使用jquery的语法进行处理
            var $ = res.$;
            $(".hero_list li").each((index, ele) => {
            //通过jq去获取元素内的文本
                const heroname = $(ele).find(".name a").text();
                //data-src是因为有些网站的图片是使用懒加载的方式处理图片
                //而原本的src属性是一些占位,等图片快进入窗口的时候,在进行加载
                const heroIcon = $(ele).find(".pic a img").attr("data-src");
                // 有些图片已进入页面就是要进行记载的,所以不需要懒加载,使用data-src获取不到
                //所以不想进行过多的判断,没有图片的干脆就不要了。
                if(heroIcon) {
                // 加入到数据库
                const insertSql = `insert into list (heroName, heroImage) values('${heroname}', '${heroIcon}')`;
                connection.query(insertSql, (error, results, fields) => {
                    // 就是操作数据库完毕之后的回到函数
                  if (error) throw error;
                  console.log(results);
                });
                }
            })

        }
        //在处理结束之后必须调用此函数
        done();
    }
});

运行node ,最后我们看一下数据库
在这里插入图片描述
成功的爬取到数据了!

(如果这篇文章有什么问题请及时联系我!)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值