使用cheerio拿一些数据
当网页中的数据找不到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拿一些数据相关推荐
- eggjs使用cheerio爬取数据
cheerio模块主要负责解析html 1.先安装模块 npm install --save cheerio 2.在service层创建新建spider.js /** @FilePath:\app\s ...
- 记录一下使用nodejs爬取双色球历史开奖数据并写入文件过程,仅自己做着玩玩
[双色球给了几个红球和几个蓝球使用js生成所有可能的结果] 发送请求这里使用的 superagent 解析 html 这里使用的 cheerio 拿的数据是:https://datachart.500 ...
- node.js常见的模块
Stream 流 * 什么是流? Node中为什么要有流这个概念 ? 使用场景? * 流指的是数据流,指的是数据是分片传输. * 数据可以实现非阻塞. * gulp [ 流式操作 ] * 案例: 打包 ...
- Navigation网站收藏和导航平台
初衷 估计很多人和小编一样,一开始将浏览过的觉得不错的网站收藏到浏览器的收藏夹中.日积月累,网站越来越多,在收藏夹里找所需网站越来越麻烦.后来浏览器从火狐转到Chrome,收藏的网站却不能同步过来.浏 ...
- 如何用 Node.js 爬虫?
本文来自作者 小北 在 GitChat 上分享「Node.js 爬虫从 0 到 1」,「阅读原文」查看交流实录 「文末高能」 编辑 | 家辉 写在前面 我们经常会听说爬虫这个词语,但是却从来没有见过这 ...
- 使用nodeJS写一个简单的小爬虫
需要安装的依赖: request 使用request向需要爬取的网站发起一个请求,在回调里使用body接收数据 我选取百度图库,作为本次爬取的网站 使用百度搜素二次元萌妹子,然后在地址栏里将URL复制 ...
- 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 ...
- 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 ...
- NodeJs02 美女爬虫
note: demo代码要编号 导出模块 一个js文件就是一个模块,模块内部的所有变量,对象,方法对外界都不可见.如果想暴漏出去让别人用,就需要导出模块.语法如下: module.exports = ...
最新文章
- Linux学习之Vi编辑器常用命令
- cassandra集群环境搭建——注意seeds节点,DHT p2p集群管理难道初始化都应如此吗?...
- 网络教育统考计算机和英语作文,网络教育统考英语作文模板分享三
- boost::search_n相关的测试程序
- 容器化之后如何节省云端成本?(二十七)
- 人工智能计算机的相关信息,关于人工智能,计算机领域的尖端(三)
- canvas游戏篇 - 贪吃蛇
- 单频和混频是什么意思_科研| 谐波混频器常见电路小结
- 如何向linux贡献代码,第一次为开源社区贡献代码
- 自动化测试环境搭建--Python及selenium
- Excel表格的35招必学秘技[配图]
- 浙江省公务员考试计算机专业,浙江省公务员(机关工作人员)考试计算机专业
- mtk6737t摄像头配置文件的编译
- 【心理咨询师考试笔记】基础理论(二)——人格心理学
- 女人喜欢大男人还是小男人
- (整理)吊炸天的CNNs,这是我见过最详尽的图解!(上)
- Spring Cloud之微服务之间相互调用、如何让一个微服务调用另外一个微服务
- sql执行顺序及性能优化
- [19保研]北京大学信息工程学院关于举办“2018年全国优秀大学生科技夏令营”的通知...
- 【EasyRL学习笔记】第七章 深度Q网络进阶技巧(Double-DQN、Dueling-DQN、Noisy-DQN、Distributional-DQN、Rainbow-DQN)