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

这篇具有很好参考价值的文章主要介绍了如何用nodejs构造一个网站爬虫。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

爬虫是个什么东西

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

                                                                                                                           

爬虫能做些什么

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

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

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

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

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

爬虫效果

比如这是一个电影网站

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

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

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

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

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

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

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

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

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

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

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

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

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

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

什么是跨域

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

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

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

什么是同源策略

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

同源策略是一种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);
}
// 太久没前端了,竟然忘记怎么渲染,光想确实是没什么印象了
​

控制台效果

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

在网页上简单展示效果

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

有了这些数据以后我们可以自己写成接口用了,也减少不必要的sql语句文章来源地址https://www.toymoban.com/news/detail-418578.html

到了这里,关于如何用nodejs构造一个网站爬虫的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何用H5+CSS+JS写一个简单的招聘网站

    大家好,我是猿码叔叔,一个 Java 语言开发者。应网友要求,写一个简单的招聘页面。由于技术原因,页面相对简单,朋友们可以选择性的阅读,如果对您有帮助,也可直接拿去使用,因为接下来除了闲言碎语还有源代码干货。 这个简单的招聘网站,具备简单的响应式功能。

    2024年01月21日
    浏览(55)
  • 分享58个NodeJs爬虫源码总有一个是你想要的

     分享58个NodeJs爬虫源码总有一个是你想要的 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 链接:https://pan.baidu.com/s/1_Im6ituI4izxP05oyA2z3Q?pwd=8888  提取码:8888 项目名称 anyproxy 、nodejs 做微信爬虫的代理 bokeyuan_spider-master learn-nodejs 前端使用 puppeteer 爬虫

    2024年02月22日
    浏览(33)
  • 记一个网站的爬虫,并思考爬虫与反爬虫(golang)

    最近在分析一个显示盗版小说的网站,其反爬虫思路绝对值得记上一笔. 该网站的地址为 : https://www.bravonovel.life .是一个展示英文小说的网站. 开始,发现这个网站没有登录权限.打开就能看到内容,查看网页源代码.没有内容加密.所以内容都明文的显示在网页中.(自信的以为,简单

    2024年02月15日
    浏览(29)
  • 一条爬虫抓取一个小网站所有数据

    ​今天闲来无事,写一个爬虫来玩玩。在网上冲浪的时候发现了一个搞笑的段子网,发现里面的内容还是比较有意思的,于是心血来潮,就想着能不能写一个Python程序,抓取几条数据下来看看,一不小心就把这个网站的所有数据都拿到了。 ​这个网站主要的数据都是详情在

    2024年02月09日
    浏览(29)
  • 爬虫项目(10):白嫖抓第三方网站接口,基于Flask搭建搭建一个AI内容识别平台

    在数据驱动的时代,人工智能生成的内容变得越来越普遍。对于内容创作者和分析师来说,区分AI生成的内容与人类生成的内容变得尤为重要。在这篇文章中,我们将介绍一个项目,该项目使用 Flask 和 Requests 库来模拟对 writer.com 的 AI 内容检测功能的访问。 地址:https://nice

    2024年01月16日
    浏览(33)
  • 如何用爬虫实现GPT功能

      如何用爬虫实现GPT功能? GPT(Generative Pre-trained Transformer)和爬虫是两个完全不同的概念和技术。GPT是一种基于Transformer模型的自然语言处理模型,用于生成文本,而爬虫是一种用于从互联网上收集数据的技术。 GPT是由OpenAI开发的一种深度学习模型,它通过大规模的预训练

    2024年02月13日
    浏览(25)
  • 【Nodejs】Puppeteer\爬虫实践

    文档:puppeteer.js中文文档|puppeteerjs中文网|puppeteer爬虫教程 Puppeteer本身依赖6.4以上的Node,但是为了异步超级好用的async/await,推荐使用7.6版本以上的Node。另外headless Chrome本身对服务器依赖的库的版本要求比较高,centos服务器依赖偏稳定,v6很难使用headless Chrome,提升依赖版本可

    2024年02月15日
    浏览(24)
  • 如何用VUE从零创建网站

    围绕主题,查看一些大型网站是如何设计的 自己对主题有一定了解后,设计草图(包括功能、逻辑跳转、页面大致排版等) 项目成员和老师对草图设计提出意见,再进行修改 最后才到正式开发 网站推荐: 松果互联:免费高级WordPress主题/网站模版/UI KIT下载-WEIDEA(网站模板) ic

    2023年04月19日
    浏览(19)
  • nodejs+vue+elementui汽车销售网站

    前端技术:nodejs+vue+elementui,视图层其实质就是vue页面,通过编写vue页面从而展示在浏览器中,编写完成的vue页面要能够和控制器类进行交互,从而使得用户在点击网页进行操作时能够正常。 可以设置中间件来响应 HTTP 请求。  Express 框架于Node运行环境的Web框架, 。本靓车汽车

    2024年02月16日
    浏览(33)
  • 如何用Python爬虫持续监控商品价格

    目录 持续监控商品价格步骤 1. 选择合适的爬虫库: 2. 选择目标网站: 3. 编写爬虫代码: 4. 设定监控频率: 5. 存储和展示数据: 6. 设置报警机制: 7. 异常处理和稳定性考虑: 可能会遇到的问题 1. 网站反爬虫机制: 2. 页面结构变化: 3. 数据采集速度: 4. 数据存储和处理:

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包