Node爬取简书首页文章

博主刚学node,打算写个爬虫练练手,这次的爬虫目标是简书的首页文章

流程分析

  • 使用superagent发送http请求到服务端,获取HTML文本
  • 用cheerio解析获得的HTML文本,本例将解析简书首页20篇文章的基本信息
  • 使用mysql模块把解析出的数据写入本地数据库存储

第三方模块

superagent

superagent是一个优雅又轻量级的网络请求API,类似于Python中的requests。官方文档在这里

$ npm install superagent

基本用法

Post请求

request.post('url').send({ name: 'Manny', species: 'cat' }) //发送的数据.set('X-API-Key', 'foobar') // set用来设置http请求头.set('Accept', 'application/json').end(function(err, res){ // 请求发送结束后监听服务器相应,注册回调函数if (err || !res.ok) {alert('Oh no! error');} else {alert('yay got ' + JSON.stringify(res.body));}});// 链式写法
request.post('/user').send({ name: 'tj' }).send({ pet: 'tobi' }).end(callback)

Get请求

request.get('url').query({ query: 'Manny', range: '1..5', order: 'desc' }) //加查询参数.end(function(err, res){// do something});// 链式写法
request.get('/querystring').query('search=Manny').query('range=1..5').end(function(err, res){});

cheerio

cheerio是一个快速优雅的node解析库,可以再服务器端使用jQuery的方法完成dom操作,官方文档在这里

在本爬虫中,用于完成html解析查询的工作

$ npm install cheerio

基本用法

const cheerio = require('cheerio')
const $ = cheerio.load('<h2 class="title">Hello world</h2>') //导入html
// 查询并修改dom树内容
$('h2.title').text('Hello there!')
$('h2').addClass('welcome')

mysql

mysql用于最后数据的写入,执行SQL插入工作,只执行sql插入

$ npm install mysql

目标分析

我们用firefox的开发者工具查看网页,目标是一个note-list下面的20个li,每个li是一篇文章,我们只要遍历20篇文章并且对于每个节点的内容进行解析即可

实现代码

const superagent = require('superagent')
const cheerio = require('cheerio')
const util =require('util')
const mysql = require('mysql')// 定义爬取对象
const reptileUrl = 'http://www.jianshu.com/'
// 创建mysql数据库连接
const connection = mysql.createConnection({host:'localhost',user:'***',password:'***',database:'jianshu'
})
connection.connect()
//发送请求
superagent.get(reptileUrl).end(function (err, res) {// 错误拦截if (err){throw err}else{// res.text是响应的原始htmlvar $ = cheerio.load(res.text)var articleList = $("#list-container .note-list li")articleList.each(function(_, item){//获取当前itemvar _this = $(item)// 文章名var title = _this.find('.title').text().trim()// 作者var nickname = _this.find('.nickname').text().trim()// 摘要var abstract = _this.find('.abstract').text().trim()// 分类, 有些未分类的就分到『其他』var tag = _this.find('.collection-tag').text().trim()||"其他"// 阅读量var read = _this.find('.ic-list-read').parent().text().trim()// 评论数var comment = _this.find('.ic-list-comments').parent().text().trim()// 点赞数var like = _this.find('.ic-list-like').parent().text().trim()// 解析后把数据写入数据库var base = "insert into articles " +"(title, nickname, abstract, tag, readNum, commentNum, likeNum)" +"values(%s,%s,%s,%s,%s,%s,%s)"var sql = util.format(base,"'"+title+"'","'"+nickname+"'","'"+abstract+"'","'"+tag+"'","'"+read+"'","'"+comment+"'","'"+like+"'")connection.query(sql, function (error, results) {if (error){console.error(error)}else{console.log(sql)}})})// 关闭数据库连接connection.end()}
})

运行结果

小结

感觉node编程就要经常考虑异步和回调,思维方式与Python,Java不同。例如get是一个异步的行为,之前博主按照惯例在最后关闭数据库连接,结果竟然在服务器响应之前数据库连接已经断开,导致后面数据写入出错。

填node的坑还是任重道远啊……

转载于:https://www.cnblogs.com/fanghao/p/7821237.html

Node爬取简书首页文章相关推荐

  1. 基于python爬虫的论文标题_Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】...

    本文实例讲述了Python3实现爬取简书首页文章标题和文章链接的方法.分享给大家供大家参考,具体如下: from urllib import request from bs4 import Beaut ...

  2. python 简书_python爬取简书网文章的方法

    python爬取简书网文章的方法 发布时间:2020-06-30 14:37:08 来源:亿速云 阅读:100 作者:清晨 这篇文章主要介绍python爬取简书网文章的方法,文中示例代码介绍的非常详细 ...

  3. python生成文章标题_利用简书首页文章标题数据生成词云

    原标题:利用简书首页文章标题数据生成词云 感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! ...

  4. selenium+python爬取简书文章

    页面加载逻辑 当你兴致勃勃地从网上学习了基本的爬虫知识后就像找个目标实践下,拥有大量文章的简书包含了大量的有价值信息,所以自然成为了你的选择目标,如果你尝试之后会发现并没有想象的那么简单,因为里面包含 ...

  5. 简书python_使用 Python 爬取简书网的所有文章

    01 抓取目标 我们要爬取的目标是「 简书网 」. 打开简书网的首页,随手点击一篇文章进入到详情页面. 我们要爬取的数据有:作者.头像.发布时间.文章 ID 以及文章内容. 02 准备工作 在编写爬虫 ...

  6. 爬虫练习-爬取简书网热评文章

    前言: 使用多进程爬虫方法爬取简书网热评文章,并将爬取的数据存储于MongoDB数据库中 本文为整理代码,梳理思路,验证代码有效性--2020.1.17 环境: Python3(Anaconda3) ...

  7. 简书爬ajax接口获取csrf,Python爬取简书主页信息

    主要学习如何通过抓包工具分析简书的Ajax加载,有时间再写一个Multithread proxy spider提升效率. 1. 关键点: 使用单线程爬取,未登录,爬取简书主页Ajax加载的内容.主要有 ...

  8. 简书推荐作者风云榜(爬取简书app数据)

    一.前言 自处女作<爬取张佳玮138w+知乎关注者:数据可视化>一文分布后,来简书快一个月了(20170831).但一直不怎么熟悉这个平台,因此,这回爬取简书app里的推荐作者并进行简单可 ...

  9. scrapy实战之爬取简书

    这一节,我们利用scrapy来爬取简书整站的内容.对于一篇文章详情页面,我们发现许多内容是Ajax异步加载的,所以使用传统方式返回的response里并没有我们想要的数据,例如评论数,喜欢数等等.对于 ...

最新文章

  1. 改计算机用户头像,Windows 8.1
  2. linux中断处理函数参数,第9章 设置ISR(中断处理函数)
  3. python matplotlib画折线图出现连线混乱_python使用matplotlib模块绘制多条折线图、散点图...
  4. Integer 值判断相等
  5. node.js学习笔记之写文件
  6. ASP.NET字符显示不正确的解决方法
  7. Scipy教程 - 统计函数库scipy.stats
  8. 惠普服务器如何修改ip地址,HP网络打印机如何设置IP地址
  9. java求等比数列求和_agile java 等比数列求和
  10. Python pandas.DataFrame.median函数方法的使用
  11. python mro文件_python MRO问题
  12. 奇虎360java面试_2016奇虎360JAVA研发工程师内推笔试题
  13. C语言 简单走迷宫小游戏
  14. 商汤科技面试——CV算法面经
  15. asp.net 获取汉字字符串的拼音首字母,含多音字
  16. Word如何拆分单元格
  17. easy-captcha实现验证码功能
  18. 【Matlab】关于matlab开启多核并行计算时SPMD测试失败的解决方法
  19. NeuralProphet之六:多元时间序列预测
  20. PHP轻量级人工在线客服系统源码 自适应手机移动端

热门文章

  1. step1 . day4 C语言基础练习之日历
  2. manacher最长回文子串
  3. Java 成员变量和局部变量
  4. 回文树或者回文自动机,及相关例题
  5. C++ 系列:基础知识储备
  6. 20150928所学粗略整理
  7. list转datatable
  8. android NDK 知识汇总
  9. Linux中搭建一个ftp服务器详解
  10. 36、重分布配置实验之route-map