如何用nodejs构造一个网站爬虫

1 篇文章 0 订阅
订阅专栏

爬虫是个什么东西

英文spider,网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取 万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、 自动索引、 模拟程序或者蠕虫

                                                                                                                           

爬虫能做些什么

你肯定很熟悉股市,也许见到过一些收费网站把股市的变化显现到页面上,并提供收费的对比服务;金融行业的计算机大多是做这个的

他的工作原理就是爬虫收集网页内容,提取加工(比如加入某些线性代数)并重新渲染(可视化)到新的网页上,从而直观地进行预测,

你也许见识过曾经爆火的各种刷单刷屏论,注册多个账号的僵尸粉,

甚至是疫情期间的各个地区的疫情情况大地图,数据不尽相同的原因也是如此,(爬取了主网站,二次渲染数据)

亦或者是各种查询电影票的网站或者app(各种软件的本质在展现给用户的时候都是页面的形式)能准确获取当地电影开场时间票价剩余位置的原因都在这里

爬虫效果

比如这是一个电影网站

我想获取他的电影名,电影分数,电影海报(占用空间大,一般不用区分开)等

那么F12打开开发者控制台,检查我们想查看的部分源代码

得知网页代码中这部分对应这部分标签

继续展开代码标签,这时候我们就知道更具体的对应内容了,其他类似电影展示模块也是如此进行

我们会发现因为代码的严格,很多标签为了规范和后期重构维护都有重复的命名的习惯;

因此我们可以写一个爬虫函数,让它去获取这个页面这些指定的标签内容(可以通过截取数据,或者爬取数据,更高级点就截图识别),之后就交给我们开发小哥们去制作更好的内容吧😶‍🌫️

比如,在分数那里都是move-score命名的变量来存储分数;于是我们就可以利用这点,写一个函数,把这块内容给复制下来

关于node作为中间件解决跨域问题

据说很多大厂在java为后端搭建的程序在进行重构的时候,会采用node作为中间件作为后端;这是由于java所构建的程序多用于中大型程序,这时候改变代码的代价是很大的,所以基本不会对源代码进行修改,如果要加什么功能的话,最好的办法就是模块化添加功能,这符合前端模块化开发;而node本身在浏览器中就担任了小后端的角色,自然可以承担起中间件的角色

什么是跨域

跨域是指在Web浏览器中,一个网页的脚本代码(如JavaScript、Flash、Java等)向其他网站(域)的服务器发出请求,而非当前网页所在的服务器,这样的操作称之为跨域请求。它受到同源策略的限制,需要通过特殊的方法进行处理。

上面是ChatGPT的答案,就我自己的理解来讲,除了跨域这个名词你还需要知道同源策略是什么

什么是同源策略

同源策略是一种Web安全策略,用于限制从一个源加载的文档或脚本如何与来自另一个源的资源交互。它是浏览器实施的一种安全机制,可以防止恶意脚本从跨站点窃取数据、欺骗用户进行操作等安全问题。

举个栗子

我们都知道不论是我们电脑上的pc端软件还是移动端上的app,他都可以读取本地文件(更新游戏,分享小姐姐照片😀,),但是浏览器是做不到的,如果做到了,想想你盘里的小视频在没有被你允许的情况下被传到网上,或是把一个锁屏病毒下载到你的主机里🥲,别问我怎么知道的哈;

有的小伙伴这时候就说,博主,你这说的不准确吧,网页上能下病毒,app和软件里就不行吗🤔?

很棒的问题哈,大概是因为在以前软件还很少的时代,第一是我们还不需要考虑这点,第二是所有软件都经过了互联网筛选这一层屏障了,另外苹果app上线都需要审核,安卓app有利🤫有弊

实现代码

var http = require('http');
// 调用内置模块http
var https = require('https');
var url = require('url');
var cheerio = require('cheerio');
​
// 创建服务器
http
  .createServer((req, res) => {
    var urlobj = url.parse(req.url, true);
    // 内部url模块,url解析地址
    // console.log(urlobj.query.callback)
    res.writeHead(200, {
      'Content-Type': 'application/json;charset=utf-8',
      // cros头,允许数据访问,否认拦截数据,*表示所有网站都能访问,实际生产环境不用这个,类似百度微信api,外连接网站允许使用
      // https://blog.csdn.net/baijiafan/article/details/126501682
      'access-control-allow-origin': '*',
      // 跨域,前端使用反向代理,node使用的时候,提供了CORS跨域处理方案,即为请求头添加access-control-allow-origin
    });
​
    switch (urlobj.pathname) {
      case '/api/aaa':
        // 设置本地3000端口下的api/aaa路径能访问;其余的显示404
        httpget((data) => {
          res.end(spider(data));
        });
        break;
        defalut: res.end('404');
    }
  })
  .listen(3001);
​
// 请求了网站的什么???
function httpget(cb) {
  var data = '';
  https.get('https://i.maoyan.com/', (res) => {
    res.on('data', (chunk) => {
      data += chunk;
    });
    res.on('end', () => {
      console.log(data);
      cb(data);
      // response.end(data)
    });
  });
}
function spider(data) {
  // npm i cheerio
  //  安装个正则表达的包
  let $ = cheerio.load(data);
  let $moviewlist = $('.column.content');
  // console.log($moviewlist)
  let movies = [];
  // 这里设置空数组
  $moviewlist.each((index, value) => {
    movies.push({
      title: $(value).find('.title').text(),
      grade: $(value).find('.grade').text(),
      actor: $(value).find('.actor').text(),
    });
  });
  console.log(movies);
  return JSON.stringify(movies);
}
// 太久没前端了,竟然忘记怎么渲染,光想确实是没什么印象了
​

控制台效果

在网页上简单展示效果

有了这些数据以后我们可以自己写成接口用了,也减少不必要的sql语句

详解nodejs爬虫程序解决gbk等中文编码问题
12-23
使用nodejs写了一个爬虫的demo,目的是提取网页的title部分。 遇到最大的问题就是网页的编码与nodejs默认编码不一致造成的乱码问题。nodejs支持utf8, ucs2, ascii, binary, base64, hex等编码方式,但是对于汉语言...
简单易学!使用 Node.js 编写爬虫,跟着教程一步步实现!
06-01 4127
爬虫是一种可以自动从网页上获取数据的程序,它可以帮助我们收集和分析各种有用的信息。在这篇文章中,我将向你展示如何用 node.js 来编写一个简单的爬虫,只需几步就可以实现。
node.js爬虫
ssjjrr的博客
10-04 3140
node.js爬虫
2024年最新手把手教你做爬虫---基于NodeJs_nodejs爬虫,绝对干货分享
最新发布
2401_85013863的博客
05-14 1019
好久没更新博客了,内疚感十足,趁着北京今儿天气格外的蓝,我觉得我得干点什么,于是乎,卷起袖子,整理一下最近做爬虫的那些事儿。
利用Nodejs实现爬虫
m0_56686924的博客
04-25 4448
文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 本学期期中作业是 新闻爬虫及爬取结果的查询网站,作为只有c语言基础的小菜鸟,刚看到要求时还是一脸懵,通过半个学期的学习,借助老师的代码,撸起袖子加油干,跌跌撞撞地也实现了爬虫。先来看看啥是爬虫爬虫就是个自动获取网络内容的程序,又称为网页蜘蛛,网络机器人......(来自百度百科...)ok 现在开始正式介绍如何实现新闻爬虫以及爬取结果的查询网站。 一、工具 1.Nodej.....
使用Node.js编写爬虫程序
beyoungod的博客
04-05 343
随着互联网的发展,数据已经成为了一种非常重要的资源。而爬虫作为一种获取数据的方式,也越来越受到人们的关注。在这篇博客中,我们将介绍如何使用Node.js来编写一个简单的爬虫程序。爬虫是一种自动化程序,用于从互联网上获取数据。它可以自动访问网站,抓取网页内容,并将其存储到本地或者其他地方。爬虫可以用于各种用途,例如搜索引擎、数据分析、价格比较等等。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它可以让JavaScript在服务器端运行。
node.js爬取网站数据【dom方式】
The limits of your knowledge are the limits of your world
03-29 1907
这里写目录标题第一步:准备工作;1. 选择目标地址URL;2. 确保 node.js 环境;3. CMd命令 :创建项目文件夹 ;4. CMd窗口 :调用 npm init 来初始化 生成 package.json ;5. CMd窗口 : 安装所需依赖包 cheerio 、superagent 及nodejs 中的 fs 文件模块;(1)superagent 包 定义:(1)cherrio 包 定义:第二步: 编写代码;1. 引入依赖包;2. 声明目标网址的url;3. superagent 发
一个细致入微的nodejs爬虫项目介绍(上)
01-08
一个细致入微的nodejs爬虫项目介绍(上) 为了完成作业以及让自己看上去没有真的在划水,决定开始写博客了。 虽然说写博客这件事的出发点是为了交作业,但博客这种形式说到底是为了给别人看的,是为了尽可能让别人...
nodejs运行机制及RSS爬虫实例分享.pdf
08-21
nodejs运行机制及RSS爬虫实例分享.pdf
用Electron写个带界面的nodejs爬虫的实现方法
10-17
主要介绍了用Electron写个带界面的nodejs爬虫的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
nodejs + axios + cheerio实现简单的爬虫项目
05-10
nodejs + axios + cheerio实现简单的爬虫, 使用Nodejs的Express框架生成,前端页面使用默认的jade,不熟悉jade的可以自己编写对应的html或jsp.
通过nodeJS如何实现爬虫功能
weixin_44617651的博客
11-02 916
下面将hao123网页中的’实时热点’、‘今日热点’、‘民生热点’、‘电影’、‘电视剧’、‘综艺’这6部分的排名爬下来,分别到对象名为’result’中的数组中,分别命令为’ss’、‘jr’、‘ms’、‘dy’、‘dsj’、‘zy’对于新手小白刚入行爬虫行业来说,是选择java、C++、python还是nodeJS作为爬虫语言编程爬虫程序呢,每一种语言都有它独特的特点,那么今天本文将以nodeJS实现一个简单的网页爬虫功能说起。,综艺模块的10条综艺节目的信息都位于。中,其中,综艺模块的内层div的。
NodeJs爬虫框架-Spider
sinat_34168882的博客
10-29 3106
gz-spider 一个基于Puppeteer和Axios的NodeJs爬虫框架 源码仓库 为什么需要爬虫框架 爬虫框架可以简化开发流程,提供统一规范,提升效率。一套优秀的爬虫框架会利用多线程,多进程,分布式,IP池等能力,帮助开发者快速开发出易于维护的工业级爬虫,长期受用。 特性 可配置代理 支持任务重试 支持Puppeteer 异步队列服务友好 多进程友好 安装 npm i gz-spider --save 使用 const spider = require('gz-spider'); // 每
使用Node.js爬取豆瓣电影数据:全面指南(附代码示例和效果展示)
qq_57443584的博客
09-11 455
在这篇博客中,我们将深入探讨如何使用Node.js来爬取豆瓣网的电影数据。我们将从基本概念开始,逐步深入到高级技术,包括如何获取电影的详细信息和评论。
Node.js网站爬虫(三)网络爬虫
weixin_42453922的博客
04-30 533
文章目录1 对目标网站进行分析:1.1 分析网页html结构1.1.1 主页:1.1.2 新闻详情页:1.2 其他方式:2 爬取结构与工具包:2.1 爬取整体结构:2.2 工具包2.2.1 模块下载和导入模块:3.0.2 工具包(重要模块):3 爬取流程:3.1 定义format:3.1.1 根据html结构使用CSS选择器:3.1.2 设置正则表达式3.2 配置异步执行和定时执行等:3.3 读取种子页面:3.4 读取新闻页面:3.4.1 转码并获取内容:3.4.2 动态执行format字符串,构建jso
简单介绍Node.js实现爬虫
weixin_50814640的博客
03-10 672
Node.js是一种 JavaScript 运行环境,它实现了以 JavaScript 为控制语言的服务器端编程,可以用来编写实现爬虫功能的脚本。
Node.js简易爬虫
weixin_47940048的博客
04-13 1015
流是一组有序的、有起点和终点的字节数据的传输方式,在应用程序中各种对象之间交换与传输数据时,总是先将该对象中所包含的数据转换成各种形式的流数据(即字节数据),再通过流的传输,到达目的对象之后,再将数据转换为该对象中可以使用的数据。管道提供了一个输出到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。实现了大文件的复制过程。cheerio是jquery核心功能的一个快速灵活而又简介的实现,主要是为了用在服务器端需要对DOM进行操作的地方。在Node的fs模块定义了一些与流相关的API。
【node】用node爬取网页文本内容,将内容存储到文本中;爬取网页图片,将爬取的图片存储到目录
weixin_52479803的博客
08-14 251
【node】用node爬取网页文本内容,将内容存储到文本中;爬取网页图片,将爬取的图片存储到目录
node内置模块——http模块:get、post、爬虫(正向代理)
mantou_riji的博客
06-07 1378
从前端向服务器请求数据会有很多跨域显示,而别人的服务器我们不进行修改,不能说让人家返回jsonp或者打开cors访问权限,所以我们可以使用node来获取数据(因为服务器之间是没有跨域访问的限制的),然后通过node将获取到的数据传递给浏览器。 eg:获取猫眼网站的数据 get.html get.js 网页输出: 小问题:httpget(res)直接将res对象传递过去,不太好不利于解耦。 所以做如下改进:将参数写成回调函数,传递过去。 即: post请求 post请求比get请求更安全post.js pos
帮我用nodejs写一个爬虫
03-03
好的,我可以帮你用Node.js写一个爬虫。 首先,你需要安装Node.js和npm包管理器。然后,你可以在命令行中创建一个新的Node.js项目并安装需要的依赖项。 接下来,你需要选择一个爬虫框架。我推荐使用Node.js中最...

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 关于块元素和行元素之间的转换 6265
  • linux安装图形化用户管理器管理用户和组群 5710
  • id选择器和class选择器 5208
  • WireShark简介和抓包原理及过程 5029
  • px与rem和rpx的换算以及应用场景 3535

分类专栏

  • 网络安全 5篇
  • 大前端干货铺 8篇
  • 程序人生 3篇
  • react 1篇
  • vue 7篇
  • linux网络操作系统 1篇
  • webgl 2篇
  • js 19篇
  • 软件工具 1篇
  • 爬虫 1篇
  • node
  • ROS2 1篇
  • demo 3篇
  • 读书笔记 1篇
  • 力扣JavaScript 3篇
  • c认证 7篇
  • 汇编 2篇
  • 山东省软件大赛小程序赛道 1篇
  • python学习笔记 1篇
  • 畅享游戏开发 2篇
  • 别再说你不会Mysql 5篇
  • java从入门到转行 2篇
  • 数据结构与算法 1篇
  • 计算机网络 1篇

最新评论

  • linux安装图形化用户管理器管理用户和组群

    2401_83478886: 请问 在yum info system-config-users显示未知错误要如何解决表情包表情包表情包

  • linux安装图形化用户管理器管理用户和组群

    2301_81970788: 我按照教程输入还是不行呀 还是会有出现未知的错误

  • linux安装图形化用户管理器管理用户和组群

    小白村第一深情: 尽量手写命令

  • linux安装图形化用户管理器管理用户和组群

    小白村第一深情: 表情包安装包加载不出来的话一般是因为两个,一个是网络问题,另一个下载地址转移;也可能是你的下载安装指令本身就错了,在文章中我写的是下好后的操作,教程是没问题的哦表情包

  • linux安装图形化用户管理器管理用户和组群

    2401_84537600: 安装包加载不出来,显示未知的错误表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 用半天时间从零开始复习前端之html
  • react菜鸟教程学习笔记
  • 软件工程作业创建表
2023年30篇
2022年57篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白村第一深情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司长葛设计公司网站公司合肥模板推广报价延安网络广告推广价格巴中营销网站价格济源百度竞价哪家好龙岩网站搭建海口外贸网站建设哪家好深圳网站优化推广推荐武汉企业网站制作哪家好楚雄百度关键词包年推广大运百姓网标王报价湘潭网站推广工具衢州百度竞价包年推广多少钱西安网站改版鹤壁网站建设赤峰营销型网站建设推荐苏州网站推广方案价格忻州网络营销哪家好西宁阿里店铺托管报价威海外贸网站设计上海推广网站多少钱贵阳阿里店铺运营多少钱宁德阿里店铺运营报价安阳关键词排名包年推广公司哈密阿里店铺托管湘潭企业网站改版推荐揭阳外贸网站设计多少钱那曲优秀网站设计巢湖百度标王襄阳seo优化多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化