当前位置:首页 > 科技  > 软件

基于Apify+node+react/vue搭建一个有点意思的爬虫平台

来源: 责编: 时间:2024-07-22 07:14:00 600观看
导读前言熟悉我的朋友可能会知道,我一向是不写热点的。为什么不写呢?是因为我不关注热点吗?其实也不是。有些事件我还是很关注的,也确实有不少想法和观点。但我一直奉行一个原则,就是:要做有生命力的内容。本文介绍的内容来自于

前言

熟悉我的朋友可能会知道,我一向是不写热点的。为什么不写呢?是因为我不关注热点吗?其实也不是。有些事件我还是很关注的,也确实有不少想法和观点。但我一直奉行一个原则,就是:要做有生命力的内容1uv28资讯网——每日最新资讯28at.com

本文介绍的内容来自于笔者之前负责研发的爬虫管理平台, 专门抽象出了一个相对独立的功能模块为大家讲解如何使用nodejs开发专属于自己的爬虫平台.文章涵盖的知识点比较多,包含nodejs爬虫框架父子进程及其通信reactumi等知识, 笔者会以尽可能简单的语言向大家一一介绍。1uv28资讯网——每日最新资讯28at.com

你将收获

  • Apify框架介绍和基本使用
  • 如何创建父子进程以及父子进程通信
  • 使用javascript手动实现控制爬虫最大并发数
  • 截取整个网页图片的实现方案
  • nodejs第三方库和模块的使用
  • 使用umi3 + antd4.0搭建爬虫前台界面

平台预览

爬虫代码的其他部分因为不是核心重点,这里不一一举例, 我已经放到github上,大家可以交流研究.1uv28资讯网——每日最新资讯28at.com

有关如何提取网页文本, 也有现成的api可以调用, 大家可以选择适合自己业务的api去应用,笔者这里拿puppeteerpage.$eval来举例:1uv28资讯网——每日最新资讯28at.com

const txt = await page.$eval('body', el => {    // el即为dom节点, 可以对body的子节点进行提取,分析    return {...}})复制代码

nodejs第三方库和模块的使用

为了搭建完整的node服务平台,笔者采用了1uv28资讯网——每日最新资讯28at.com

  • koa 一款轻量级可扩展node框架
  • glob 使用强大的正则匹配模式遍历文件
  • koa2-cors 处理访问跨域问题
  • koa-static 创建静态服务目录
  • koa-body 获取请求体数据 有关如何使用这些模块实现一个完整的服务端应用, 笔者在代码里做了详细的说明, 这里就不一一讨论了. 具体代码如下:
const Koa  = require('koa');const { resolve } = require('path');const staticServer = require('koa-static');const koaBody = require('koa-body');const cors = require('koa2-cors');const logger = require('koa-logger');const glob = require('glob');const { fork } = require('child_process');const app = new Koa();// 创建静态目录app.use(staticServer(resolve(__dirname, './static')));app.use(staticServer(resolve(__dirname, './db')));app.use(koaBody());app.use(logger());const config = {  imgPath: resolve('./', 'static'),  txtPath: resolve('./', 'db')}// 设置跨域app.use(cors({  origin: function (ctx) {      if (ctx.url.indexOf('fetch') > -1) {        return '*'; // 允许来自所有域名请求      }      return ''; // 这样就能只允许 http://localhost 这个域名的请求了  },  exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],  maxAge: 5,  //  该字段可选,用来指定本次预检请求的有效期,单位为秒  credentials: true,  allowMethods: ['GET', 'POST', 'PUT', 'DELETE'],  allowHeaders: ['Content-Type', 'Authorization', 'Accept', 'x-requested-with'],}))// 创建异步线程function createPromisefork(childUrl, data) {  const res = fork(childUrl)    data && res.send(data)    return new Promise(reslove => {      res.on('message', f => {        reslove(f)      })    })}app.use(async (ctx, next) => {  if(ctx.url === '/fetch') {    const data = ctx.request.body;    const res = await createPromisefork('./child.js', data)    // 获取文件路径    const txtUrls = [];    let reg = /.*?(/d+)/./w*$/;    glob.sync(`${config.txtPath}/*.*`).forEach(item => {      if(reg.test(item)) {        txtUrls.push(item.replace(reg, '$1'))      }    })    ctx.body = {      state: res,      data: txtUrls,      msg: res ? '抓取完成' : '抓取失败,原因可能是非法的url或者请求超时或者服务器内部错误'    }  }  await next()})app.listen(80)复制代码

使用umi3 + antd4.0搭建爬虫前台界面

该爬虫平台的前端界面笔者采用umi3+antd4.0开发, 因为antd4.0相比之前版本确实体积和性能都提高了不少, 对于组件来说也做了更合理的拆分. 因为前端页面实现比较简单,整个前端代码使用hooks写不到200行,这里就不一一介绍了.大家可以在笔者的github上学习研究.1uv28资讯网——每日最新资讯28at.com

  • github项目地址: 基于Apify+node+react搭建的有点意思的爬虫平台

界面如下:1uv28资讯网——每日最新资讯28at.com

图片1uv28资讯网——每日最新资讯28at.com

大家可以自己克隆本地运行, 也可以基于此开发属于自己的爬虫应用.1uv28资讯网——每日最新资讯28at.com

项目使用的技术文档地址

  • apify 一款用于JavaScript的可伸缩的web爬虫库
  • Puppeteer
  • koa -- 基于nodejs平台的下一代web开发框架

本文链接:http://www.28at.com/showinfo-26-102776-0.html基于Apify+node+react/vue搭建一个有点意思的爬虫平台

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 2024年新的原生嵌套CSS特性:绝对改变游戏规则

下一篇: 代码水平暴增!掌握这五个JavaScript神技,让你成为团队最靓的仔

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼‍‍‍‍‍‍‍‍‍‍东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一
  • 朋友圈可以修改可见范围了 苹果用户可率先体验

    近日,iOS用户迎来微信8.0.27正式版更新,除了可更换二维码背景外,还新增了多项实用功能。在新版微信中,朋友圈终于可以修改可见范围,简单来说就是已发布的朋友圈
Top