当网页中的数据找不到jsonp和ajax时,说明这个数据是后端写好了的,直接给前端的。所以没有数据请求。这时我们就拿不到数据了。但是可以使用node的cheerio模块,去爬取指定的数据。

代码如下:

(singleton.js)

小白发帖,有错误请指正

const https = require('https')const cheerio = require('cheerio')const mysql = require('mysql')// 爬数据类class MyCheerio {​    constructor(requestConf) {​        // 请求路径ulr​        // 爬取的dom​        const {​            url,​            element,​            addSql,​        } = requestConf​        this.url = url;​        this.element = element;​        this.addSql = addSql;//用正则分离出sql语句的字段名作为爬取数据的名字
​        const reg = /\(([^)]*)\)/;​        this.info = reg.exec(this.addSql)[1].split(',')​        // 连接数据库
​        this.connection = '';
​        this.connerData()​        // 获取爬取的数据
​        this.getHtml(this.url)​    }​    // 连接数据库(需要自己修改)​    connerData() {​        this.connection = mysql.createConnection({​            host: 'localhost',​            user: 'root',​            password: '123456',​            database: 'test'​        })​        this.connection.connect()​    }​    // 获取爬取的数据​    getHtml(url) {​        https.get(`${url}`, (res) => {​            let htmlStr = '';​            res.on('data', (chunk) => {​                htmlStr += chunk;​            })​            res.on('error', (err) => {​                console.log('err=', err);​            })​            res.on('end', () => {​                this.spider(htmlStr)​            })​        })​    }​    // 爬取数据的方法​    spider(htmlStr) {​        const $ = cheerio.load(htmlStr, {​            decodeEntities: false​        });​        $(`${this.element}`).each((index, ele) => {​            // 打印遍历的标签​            // console.log("element====", $(ele));//(需要自己去写获取的数据的Dom查询)
​            // 获取标签名​            this.info[0] = $(ele).text().trim()​            // 获取路径​            this.info[1] = $(ele).find('a').attr('href');​            // 获取当前获取时间​            this.info[2] = new Date()​            const addParmas = [this.info[0], this.info[1], this.info[2]];// 插入数据库
​            this.connection.query(this.addSql, addParmas, function (err, data) {​                if (err) {​                    console.log('数据库连接错误', err);​                } else {​                    console.log(index);​                }​            })​        })​    }}// 单例模式const singleton = (function () {​    let instance;​    return function (confObj) {​        if (!instance) {​            instance = new MyCheerio(confObj)​        }​        return instance​    }})()exports.singleton = singleton

使用方法:

(index.js)

// 使用方法// 导入模块,设置参数confObj,调用模块singleton,需要自己去写获取的数据的Dom查询const {​     singleton} = require('./singleton')/**
- 向类中传入对象
- @param{url} 爬取数据的路径
- @param{element} 爬取数据的Dom标签
- @param{addSql} 插入数据库的语句
*/const confObj = {​    url: "https://www.csdn.net/",​    element: '.host-move>ul>li',​    addSql: 'insert into blog(title,href,time) values (?,?,?)'}// 调用
singleton(confObj)

得到结果如图:

使用cheerio拿一些数据相关推荐

  1. eggjs使用cheerio爬取数据

    cheerio模块主要负责解析html 1.先安装模块 npm install --save cheerio 2.在service层创建新建spider.js /** @FilePath:\app\s ...

  2. 记录一下使用nodejs爬取双色球历史开奖数据并写入文件过程,仅自己做着玩玩

    [双色球给了几个红球和几个蓝球使用js生成所有可能的结果] 发送请求这里使用的 superagent 解析 html 这里使用的 cheerio 拿的数据是:https://datachart.500 ...

  3. node.js常见的模块

    Stream 流 * 什么是流? Node中为什么要有流这个概念 ? 使用场景? * 流指的是数据流,指的是数据是分片传输. * 数据可以实现非阻塞. * gulp [ 流式操作 ] * 案例: 打包 ...

  4. Navigation网站收藏和导航平台

    初衷 估计很多人和小编一样,一开始将浏览过的觉得不错的网站收藏到浏览器的收藏夹中.日积月累,网站越来越多,在收藏夹里找所需网站越来越麻烦.后来浏览器从火狐转到Chrome,收藏的网站却不能同步过来.浏 ...

  5. 如何用 Node.js 爬虫?

    本文来自作者 小北 在 GitChat 上分享「Node.js 爬虫从 0 到 1」,「阅读原文」查看交流实录 「文末高能」 编辑 | 家辉 写在前面 我们经常会听说爬虫这个词语,但是却从来没有见过这 ...

  6. 使用nodeJS写一个简单的小爬虫

    需要安装的依赖: request 使用request向需要爬取的网站发起一个请求,在回调里使用body接收数据 我选取百度图库,作为本次爬取的网站 使用百度搜素二次元萌妹子,然后在地址栏里将URL复制 ...

  7. Node.js(一)——(Node.js安装及使用,通过Node.js搭建服务器,模块化及自定义模块,npm/yarn/nvm,内置模块fs的使用,buffer及stream,新闻列表案例)

    目录 1.Node.js介绍 2.安装Node.js 3.使用Node.js实现第一个服务器 3.1初步感受Node.js 3.2Google Chrome 默认非安全端口列表,尽量避免以下端口. 3 ...

  8. Node.js基础笔记

    Node.js基础笔记 1. NodeJS入门基础 1.1 NodeJS 介绍 1.1.1 NodeJS 是什么 1.1.2 NodeJS 的优势 1.1.3 NodeJS 的技术特性 1.1.4 N ...

  9. NodeJs02 美女爬虫

    note: demo代码要编号 导出模块 一个js文件就是一个模块,模块内部的所有变量,对象,方法对外界都不可见.如果想暴漏出去让别人用,就需要导出模块.语法如下: module.exports = ...

最新文章

  1. Linux学习之Vi编辑器常用命令
  2. cassandra集群环境搭建——注意seeds节点,DHT p2p集群管理难道初始化都应如此吗?...
  3. 网络教育统考计算机和英语作文,网络教育统考英语作文模板分享三
  4. boost::search_n相关的测试程序
  5. 容器化之后如何节省云端成本?(二十七)
  6. 人工智能计算机的相关信息,关于人工智能,计算机领域的尖端(三)
  7. canvas游戏篇 - 贪吃蛇
  8. 单频和混频是什么意思_科研| 谐波混频器常见电路小结
  9. 如何向linux贡献代码,第一次为开源社区贡献代码
  10. 自动化测试环境搭建--Python及selenium
  11. Excel表格的35招必学秘技[配图]
  12. 浙江省公务员考试计算机专业,浙江省公务员(机关工作人员)考试计算机专业
  13. mtk6737t摄像头配置文件的编译
  14. 【心理咨询师考试笔记】基础理论(二)——人格心理学
  15. 女人喜欢大男人还是小男人
  16. (整理)吊炸天的CNNs,这是我见过最详尽的图解!(上)
  17. Spring Cloud之微服务之间相互调用、如何让一个微服务调用另外一个微服务
  18. sql执行顺序及性能优化
  19. [19保研]北京大学信息工程学院关于举办“2018年全国优秀大学生科技夏令营”的通知...
  20. 【EasyRL学习笔记】第七章 深度Q网络进阶技巧(Double-DQN、Dueling-DQN、Noisy-DQN、Distributional-DQN、Rainbow-DQN)

热门文章

  1. 配资公司石家庄顺桥在线股票配资推荐股票解套技巧
  2. 左右手桌面股票盯盘常见问题解答
  3. 2008.05.25 读华为前执行副总裁李玉琢的《我与商业领袖的合作与冲突》有感(一)
  4. 武汉 python 培训 达内
  5. @SuppressWarnings注解详解
  6. 电影《2012》讲世界末日该不该禁播?
  7. 条形码、二维码的生成与扫描、解析本地二维码
  8. 法拉第效应维尔德常数_法拉第效应
  9. 层层剖析,让你彻底搞懂Self-Attention、MultiHead-Attention和Masked-Attention的机制和原理
  10. 快速排序-排序-数据结构和算法