简介
Web 开发在不断发展,借助 Vite.js 和 React 等工具,创建快速且响应灵敏的前端应用程序从未如此简单。但是,当您需要应用程序从其他网站获取和显示内容时会发生什么?这就是网络抓取的用武之地,今天,我们将构建一个完整的堆栈应用程序来实现这一点。
在本教程中,您将学习如何使用 React 作为前端,使用 Node.js 和 Cheerio 作为后端来创建动态链接预览生成器。对于想要在使用 Vite 和 TypeScript 等现代高效工具的同时探索网页抓取的 Web 开发人员来说,这是一个很棒的项目。
您将学到什么:
- 使用 TypeScript 设置 Vite.js React 项目
- 使用 Express 创建 Node.js 服务器
- 使用 Axios 和 Cheerio 进行网页抓取
- 在一个有凝聚力的项目中构建全栈应用程序
1.设置您的项目
我们将从设置项目结构开始。在本教程中,前端和后端将位于同一项目目录中。这种设置使开发变得简单,并使您的项目保持井井有条。
首先使用 ViteJS 创建 ReactJS 项目并使用 Typescript 模板
使用 Vite.js 创建 React 前端
接下来,使用 Vite 通过 TypeScript 搭建 React 前端:
pnpm create vite@latest
此命令使用
TypeScript 在您的项目目录中设置一个新的 React 项目。导航到您的项目文件夹并安装依赖项:
<span>cd your-project<br>pnpm install</span>
2.设置 Node.js 服务器
现在前端已准备就绪,让我们继续创建 Node.js 服务器。首先创建一个服务器目录并初始化一个 Node.js 项目:
<span>cd ..<br>mkdir server<br>cd server<br>pnpm init</span>
您需要 Express 作为服务器,需要 Axios 来发出 HTTP
请求,Cheerio 来解析 HTML,body-parser 来从
请求中获取 JSON 正文,以及 cors 来为 API 启用 CORS:
npm install express axios cheerio <span>body-parser cors</span>
3.构建网页抓取 API
设置后端后,我们可以创建一个 API 端点,它接受 URL、获取其内容并提取关键元数据,如标题、描述和图像。
这是index.ts中服务器的基本结构:
<span>// index.js<br><br>const express = require("express");<br>const bodyParser = require("body-parser");<br>const cors = require("cors");<br><br>const { getUrlPreview } = require("./url.controller");<br><br>const app = express();<br>const PORT = process.env.SERVER_PORT || 5005;<br><br>app.use(bodyParser.json());<br>app.use(cors());<br><br>app.get("/health", (<span>req, res) =></span> {<br> return res.status(200).json({ status: "Server Running" });<br>});<br>app.post("/preview", getUrlPreview);<br><br>app.listen(PORT, () => {<br> console.log("Server is running: %s", PORT);<br>});</span>
<span>// url.controller.js<br><br>const axios = require("axios");<br>const cheerio = require("cheerio");<br>const { object, string, ValidationError } = require("yup");<br><br>const schema = object({<br> url: string().url().required(),<br>});<br><br>const getUrlPreview = async (req, res) => {<br> try {<br> const value = await schema.validate(req.body);<br><br> const { data } = await axios.get(value.url);<br> const $ = cheerio.load(data);<br><br> const title =<br> $('meta[property="og:title"]').attr("content") || $("title").text();<br> const description =<br> $('meta[property="og:description"]').attr("content") ||<br> $('meta[property="description"]').attr("content");<br> const image =<br> $('meta[property="og:image"]').attr("content") ||<br> $("img").first().attr("src");<br><br> const previewData = {<br> title: title || "No title available",<br> description: description || "No description available",<br> image: image || "No image available",<br> };<br><br> return res.status(200).json(previewData);<br> } catch (err) {<br> if (err instanceof ValidationError) {<br> return res.status(422).send(err.message);<br> }<br><br> console.log(err);<br><br> return res.status(500).send("Something went wrong!");<br> }<br>};<br><br>module.exports = {<br> getUrlPreview,<br>};</span>
此代码设置了一个简单的 Express 服务器,用于侦听 /api/preview 处的 POST 请求。当使用 URL 发出请求时,服务器使用 Axios 获取该 URL 的 HTML 内容并使用 Cheerio 解析它。然后元数据被提取并返回给客户端。
4.创建链接预览组件
在 React 应用程序中,创建一个组件,该组件将 URL 作为输入并显示从后端获取的预览。
以下是如何实现应用程序组件来处理链接预览生成器:
pnpm create vite@latest
<span>cd your-project<br>pnpm install</span>
该组件允许用户输入 URL,然后将其发送到后端以获取并显示链接预览。
5.运行应用程序
最后,要运行应用程序,您需要启动前端和后端服务器:
启动 Node.js 服务器:
<span>cd ..<br>mkdir server<br>cd server<br>pnpm init</span>
启动 Vite React 前端:
npm install express axios cheerio <span>body-parser cors</span>
导航到 http://localhost:5173,您将看到您的应用程序正在运行,允许用户输入 URL 并生成链接预览。
结论
在本教程中,我们结合了 Vite.js、React、Node.js 和 Cheerio 的强大功能,创建了一个能够进行网页抓取的全栈应用程序。无论您是想创建个人项目还是为您的作品集添加新技能,了解如何将前端和后端集成到单个项目中都是非常宝贵的。
请记住,虽然网页抓取是一个强大的工具,但负责任地使用它也很重要。始终尊重您抓取的网站的服务条款,并考虑道德影响。
如果您发现本教程有帮助,请不要忘记订阅我的频道以获取更多此类内容,如果您对未来的教程有任何问题或建议,请发表评论。
以上是全栈网页抓取:使用 Vite.js、React 和 Node.js 创建链接预览的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

因此,在这里,您准备好了解所有称为Ajax的东西。但是,到底是什么? AJAX一词是指用于创建动态,交互式Web内容的一系列宽松的技术。 Ajax一词,最初由Jesse J创造

10款趣味横生的jQuery游戏插件,让您的网站更具吸引力,提升用户粘性!虽然Flash仍然是开发休闲网页游戏的最佳软件,但jQuery也能创造出令人惊喜的效果,虽然无法与纯动作Flash游戏媲美,但在某些情况下,您也能在浏览器中获得意想不到的乐趣。 jQuery井字棋游戏 游戏编程的“Hello world”,现在有了jQuery版本。 源码 jQuery疯狂填词游戏 这是一个填空游戏,由于不知道单词的上下文,可能会产生一些古怪的结果。 源码 jQuery扫雷游戏

本教程演示了如何使用jQuery创建迷人的视差背景效果。 我们将构建一个带有分层图像的标题横幅,从而创造出令人惊叹的视觉深度。 更新的插件可与JQuery 1.6.4及更高版本一起使用。 下载

本文讨论了在浏览器中优化JavaScript性能的策略,重点是减少执行时间并最大程度地减少对页面负载速度的影响。

本文演示了如何使用jQuery和ajax自动每5秒自动刷新DIV的内容。 该示例从RSS提要中获取并显示了最新的博客文章以及最后的刷新时间戳。 加载图像是选择

Matter.js是一个用JavaScript编写的2D刚体物理引擎。此库可以帮助您轻松地在浏览器中模拟2D物理。它提供了许多功能,例如创建刚体并为其分配质量、面积或密度等物理属性的能力。您还可以模拟不同类型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流浏览器。此外,它也适用于移动设备,因为它可以检测触摸并具有响应能力。所有这些功能都使其值得您投入时间学习如何使用该引擎,因为这样您就可以轻松创建基于物理的2D游戏或模拟。在本教程中,我将介绍此库的基础知识,包括其安装和用法,并提供一


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境