Node.js爬虫实战 - 爬你喜欢的

胡哥有话说
• 阅读 1180

前言

今天没有什么前言,就是想分享些关于爬虫的技术,任性。来吧,各位客官,里边请...

开篇第一问:爬虫是什么嘞?

首先咱们说哈,爬虫不是“虫子”,姑凉们不要害怕。

爬虫 - 一种通过一定方式按照一定规则抓取数据的操作或方法。

开篇第二问:爬虫能做什么嘞?

来来来,谈谈需求

产品MM:

  1. 爱豆的新电影上架了,整体电影评价如何呢?
  2. 暗恋的妹子最近又失恋了,如何在她发微博的时候第一时间知道发了什么,好去呵护呢?
  3. 总是在看小说的时候点到广告?总是在看那啥的时候点出来,澳xx场又上线啦?
  4. 做个新闻类网站没有数据源咋办?

研发GG:

爬虫随时准备为您服务!

  1. 使用爬虫,拉取爱豆视频所有的评价,导入表格,进而分析评价
  2. 使用爬虫,加上定时任务,拉取妹子的微博,只要数据有变化,接入短信或邮件服务,第一时间通知
  3. 使用爬虫,拉取小说内容或xxx的视频,自己再设计个展示页,perfect!
  4. 使用爬虫,定时任务,拉取多个新闻源的新闻,存储到数据库

开篇第三问:爬虫如何实现嘞?

实现爬虫的技术有很多,如python、Node等,今天胡哥给大家分享使用Node做爬虫:爬取小说网站-首页推荐小说

爬取第一步-确定目标

目标网站:https://www.23us.so Node.js爬虫实战 - 爬你喜欢的

我们要获取排行榜中六部小说的:书名、封面、以及小说书籍信息对应的地址(后续获取小说完整信息)

爬取第二步-分析目标特点

网页的内容是由HTML生成的,抓取内容就相当找到特定的HTML结构,获取该元素的值。

打开网页调试控制台,查看元素HTML结构。

Node.js爬虫实战 - 爬你喜欢的

注意观察页面HTML的结构,排行榜推荐的小说的HTML结构是

bdo#s-dd 元素
    dd 子元素 - 每一部小说
        a 目录信息
            img 封面
        a 小说名称

爬取第三步-弄丫的

工具善其事必先利其器,准备好趁手的兵器!

superagent

模拟客户端发送网络请求,可设置请求参数、header头信息

npm install superagent -D

cheerio

类jQuery库,可将字符串导入,创建对象,用于快速抓取字符串中的符合条件的数据

npm install cheerio -D

项目目录:

node-pachong/
  - index.js
  - package.json
  - node_modules/

上代码:

// node-pachong/index.js
/**
 * 使用Node.js做爬虫实战
 * author: justbecoder <justbecoder@aliyun.com>
 */

// 引入需要的工具包
const sp = require('superagent');
const cheerio = require('cheerio');

// 定义请求的URL地址
const BASE_URL = 'http://www.23us.so';

// 1. 发送请求,获取HTML字符串
(async () => {
  let html = await sp.get(BASE_URL);

  // 2. 将字符串导入,使用cheerio获取元素
  let $ = cheerio.load(html.text);

  // 3. 获取指定的元素
  let books = []
  $('#s_dd dd').each(function () {
    let info = {
      link: $(this).find('a').eq(0).attr('href'),
      name: $(this).find('a').eq(1).text(),
      image: $(this).find('img').attr('src')
    }
    books.push(info)
  })
  console.log(books)
})()

友情提醒:每个网站的HTML结构是不一样,在抓取不同网站的数据时,要分析不同的解构,才能百发百中。

效果图: Node.js爬虫实战 - 爬你喜欢的

获取到信息之后,做接口数据返回、存储数据库,你想干啥都行...

源码获取

关注胡哥有话说公众号,回复“爬虫”,即可获取源码地址。

后记

以上就是胡哥今天给大家分享的内容,喜欢的小伙伴记得收藏转发、点击右下角按钮在看,推荐给更多小伙伴呦,欢迎多多留言交流...

胡哥有话说,一个有技术,有情怀的胡哥!与你一起聊聊大前端,分享前端系统架构,框架实现原理,最新最高效的技术实践!

扫码关注,更帅更漂亮呦!关注胡哥有话说公众号,可与胡哥继续深入交流呦!

Node.js爬虫实战 - 爬你喜欢的

点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
4个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
光头强的博客 光头强的博客
4个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Aimerl0 Aimerl0
1年前
Python网络爬虫与信息提取
title:Python网络爬虫与信息提取date:2020121001:00:23tags:Pythoncategories:学习笔记写在前面不知道写啥其实说实话TOC网络爬虫之规则安装requests库cmd命令行打开输入pip3installrequests,等待即可简单测试,爬一下bkjwpythonimportrequ
小森森 小森森
4个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
Stella981 Stella981
1年前
Node.js爬虫实战
前言今天没有什么前言,就是想分享些关于爬虫的技术,任性。来吧,各位客官,里边请...开篇第一问:爬虫是什么嘞?首先咱们说哈,爬虫不是“虫子”,姑凉们不要害怕。爬虫 一种通过一定方式按照一定规则抓取数据的操作或方法。开篇第二问:爬虫能做什么嘞?
Wesley13 Wesley13
1年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
6个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为