


Full-Stack Web Scraping?: créez des aper?us de liens avec Vite.js, React et Node.js
Jan 09, 2025 pm 04:26 PMPrésentation
Le développement Web est en constante évolution et avec des outils comme Vite.js et React, créer des applications frontales rapides et réactives n'a jamais été aussi simple. Mais que se passe-t-il lorsque vous avez besoin que votre application récupère et affiche du contenu provenant d’autres sites Web?? C'est là qu'intervient le web scraping, et aujourd'hui, nous allons créer une application full-stack qui fait exactement cela.
Dans ce tutoriel, vous apprendrez à créer un générateur d'aper?u de liens dynamiques en utilisant React pour le frontend et Node.js avec Cheerio pour le backend. Il s'agit d'un projet fantastique pour les développeurs Web qui souhaitent explorer le web scraping tout en travaillant avec des outils modernes et efficaces comme Vite et TypeScript.
Ce que vous apprendrez?:
- Mise en place d'un projet Vite.js React avec TypeScript
- Créer un serveur Node.js avec Express
- Utiliser Axios et Cheerio pour le web scraping
- Créer une application full-stack dans un seul projet cohérent
1. Monter votre projet
Nous allons commencer par mettre en place la structure du projet. Dans ce didacticiel, le frontend et le backend seront hébergés dans le même répertoire de projet. Cette configuration facilite le développement et maintient votre projet organisé.
Commencez par créer le projet ReactJS avec ViteJS et utilisez le modèle Typescript
Création du frontend React avec Vite.js
Ensuite, utilisez Vite pour échafauder l'interface React avec TypeScript?:
pnpm create vite@latest
Cette commande configure un nouveau projet React dans un répertoire de votre projet, en utilisant
TypeScript. Accédez au dossier votre projet et installez les dépendances?:
<span>cd your-project<br>pnpm install</span>
2. Configuration du serveur Node.js
Maintenant que le frontend est prêt, passons à la création d'un serveur Node.js. Commencez par créer un répertoire de serveur et initialiser un projet Node.js?:
<span>cd ..<br>mkdir server<br>cd server<br>pnpm init</span>
Vous aurez besoin d'Express pour le serveur, d'Axios pour effectuer des requêtes HTTP
, de Cheerio pour analyser le HTML, d'un body-parser pour récupérer le corps JSON à partir de
requête et de cors pour activer CORS pour l'API?:
npm install express axios cheerio <span>body-parser cors</span>
3. Création de l'API Web Scraping
Une fois le backend configuré, nous pouvons créer un point de terminaison d'API qui accepte une URL, récupère son contenu et extrait les métadonnées clés telles que le titre, la description et l'image.
Voici la structure de base du serveur dans 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>
Ce code configure un simple serveur Express qui écoute les requêtes POST dans /api/preview. Lorsqu'une requête est effectuée avec une URL, le serveur récupère le contenu HTML de cette URL à l'aide d'Axios et l'analyse avec Cheerio. Les métadonnées sont ensuite extraites et renvoyées au client.
4. Création du composant d'aper?u du lien
Dans l'application React, créez un composant qui prendra une URL en entrée et affichera l'aper?u récupéré depuis le backend.
Voici comment implémenter le composant App pour gérer le générateur d'aper?u de lien?:
pnpm create vite@latest
<span>cd your-project<br>pnpm install</span>
Ce composant permet aux utilisateurs de saisir une URL, qui est ensuite envoyée au backend pour récupérer et afficher l'aper?u du lien.
5. Exécuter l'application
Enfin, pour exécuter l'application, vous devez démarrer les serveurs frontend et backend?:
Démarrez le serveur Node.js?:
<span>cd ..<br>mkdir server<br>cd server<br>pnpm init</span>
Démarrez l'interface Vite React?:
npm install express axios cheerio <span>body-parser cors</span>
Accédez à http://localhost:5173 et vous verrez votre application en action, permettant aux utilisateurs de saisir une URL et de générer un aper?u du lien.
Conclusion
Dans ce tutoriel, nous avons combiné la puissance de Vite.js, React, Node.js et Cheerio pour créer une application full-stack capable de faire du web scraping. Que vous cherchiez à créer un projet personnel ou à ajouter une nouvelle compétence à votre portfolio, comprendre comment intégrer le frontend et le backend dans un seul projet est inestimable.
N'oubliez pas que même si le web scraping est un outil puissant, il est essentiel de l'utiliser de manière responsable. Respectez toujours les conditions d’utilisation des sites Web que vous grattez et tenez compte des implications éthiques.
Si vous avez trouvé ce tutoriel utile, n'oubliez pas de vous abonner à ma cha?ne pour plus de contenu comme celui-ci, et de laisser un commentaire si vous avez des questions ou des suggestions pour de futurs tutoriels.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Il existe trois fa?ons courantes d'initier des demandes HTTP dans Node.js: utilisez des modules intégrés, Axios et Node-Fetch. 1. Utilisez le module HTTP / HTTPS intégré sans dépendances, ce qui convient aux scénarios de base, mais nécessite un traitement manuel de la couture des données et de la surveillance des erreurs, tels que l'utilisation de https.get () pour obtenir des données ou envoyer des demandes de post via .write (); 2.AXIOS est une bibliothèque tierce basée sur la promesse. Il a une syntaxe concise et des fonctions puissantes, prend en charge l'async / attendre, la conversion JSON automatique, l'intercepteur, etc. Il est recommandé de simplifier les opérations de demande asynchrones; 3.Node-Fetch fournit un style similaire à la récupération du navigateur, basé sur la promesse et la syntaxe simple

Les types de données JavaScript sont divisés en types primitifs et types de référence. Les types primitifs incluent la cha?ne, le nombre, le booléen, le nul, un non défini et le symbole. Les valeurs sont immuables et les copies sont copiées lors de l'attribution des valeurs, de sorte qu'elles ne se affectent pas; Les types de référence tels que les objets, les tableaux et les fonctions stockent les adresses de mémoire, et les variables pointant vers le même objet s'afferchent mutuellement. Le typeof et l'instance de OFF peuvent être utilisés pour déterminer les types, mais prêtent attention aux problèmes historiques de typeofnull. Comprendre ces deux types de différences peut aider à écrire un code plus stable et fiable.

Bonjour, développeurs JavaScript! Bienvenue dans JavaScript News de cette semaine! Cette semaine, nous nous concentrerons sur: le différend de marque d'Oracle avec Deno, les nouveaux objets Time JavaScript sont pris en charge par les navigateurs, les mises à jour Google Chrome et certains outils de développeurs puissants. Commen?ons! Le différend de marque d'Oracle avec la tentative de Deno Oracle d'enregistrer une marque "JavaScript" a provoqué la controverse. Ryan Dahl, le créateur de Node.js et Deno, a déposé une pétition pour annuler la marque, et il pense que JavaScript est un niveau ouvert et ne devrait pas être utilisé par Oracle

La promesse est le mécanisme central pour gérer les opérations asynchrones en JavaScript. Comprendre les appels de cha?ne, la gestion des erreurs et les combinants est la clé pour ma?triser leurs applications. 1. L'appel de la cha?ne renvoie une nouvelle promesse à travers. Puis () pour réaliser la concaténation des processus asynchrones. Chaque .then () re?oit le résultat précédent et peut renvoyer une valeur ou une promesse; 2. La gestion des erreurs doit utiliser .catch () pour attraper des exceptions pour éviter les défaillances silencieuses, et peut renvoyer la valeur par défaut dans Catch pour continuer le processus; 3. Combinateurs tels que promesse.all () (réussi avec succès uniquement après tout succès), promesse.race () (le premier achèvement est retourné) et promesse.allsetTled () (en attente de toutes les achèvements)

Cacheapi est un outil fourni par le navigateur pour mettre en cache les demandes de réseau, qui est souvent utilisée en conjonction avec travailleur de service pour améliorer les performances du site Web et l'expérience hors ligne. 1. Il permet aux développeurs de stocker manuellement des ressources telles que des scripts, des feuilles de style, des photos, etc.; 2. Il peut faire correspondre les réponses du cache en fonction des demandes; 3. Il prend en charge la suppression des caches spécifiques ou la nettoyage du cache entier; 4. Il peut mettre en ?uvre des stratégies de priorité de cache ou de priorité de réseau grace à l'écoute des événements Fetch; 5. Il est souvent utilisé pour le support hors ligne, accélérez la vitesse d'accès répétée, préchargement des ressources clés et du contenu de mise à jour des antécédents; 6. Lorsque vous l'utilisez, vous devez faire attention au contr?le de la version du cache, aux restrictions de stockage et à la différence entre le mécanisme de mise en cache HTTP.

La boucle d'événement de JavaScript gère les opérations asynchrones en coordonnant les piles d'appels, les webapis et les files d'attente de taches. 1. La pile d'appels exécute du code synchrone, et lors de la rencontre de taches asynchrones, il est remis à WebAPI pour le traitement; 2. Une fois que le WebAPI a terminé la tache en arrière-plan, il met le rappel dans la file d'attente correspondante (macro tache ou micro tache); 3. La boucle d'événement vérifie si la pile d'appels est vide. S'il est vide, le rappel est retiré de la file d'attente et poussé dans la pile d'appels pour l'exécution; 4. Micro taches (comme Promise. puis) ??prendre la priorité sur les taches macro (telles que Settimeout); 5. Comprendre la boucle d'événements permet d'éviter de bloquer le thread principal et d'optimiser l'ordre d'exécution du code.

Les bulles d'événements se propagent de l'élément cible vers l'extérieur vers le n?ud d'ancêtre, tandis que la capture d'événements se propage de la couche externe vers l'intérieur vers l'élément cible. 1. événements Bubbles: Après avoir cliqué sur l'élément enfant, l'événement déclenche l'auditeur de l'élément parent vers le haut. Par exemple, après avoir cliqué sur le bouton, il sortira d'abord cliqué sur l'enfant, puis parent. 2. Capture d'événement: définissez le troisième paramètre sur true, afin que l'auditeur soit exécuté dans l'étape de capture, tels que le déclenchement de l'écouteur de capture de l'élément parent avant de cliquer sur le bouton. 3. Les utilisations pratiques incluent la gestion unifiée des événements d'éléments enfants, le prétraitement d'interception et l'optimisation des performances. 4. Le flux d'événements DOM est divisé en trois étapes: capture, cible et bulle, et l'écouteur par défaut est exécuté dans l'étape de la bulle.

Dans les tableaux JavaScript, en plus de la carte et du filtre, il existe d'autres méthodes puissantes et rarement utilisées. 1. La réduction peut non seulement résumer, mais également compter, se regrouper, aplatir les tableaux et construire de nouvelles structures; 2. Find et FindIndex sont utilisés pour trouver des éléments ou des index individuels; 3.Il et tout sont utilisés pour déterminer si les conditions existent ou que toutes les personnes se rencontrent; 4.Sort peut être trié mais changera le tableau d'origine; 5. Faites attention à la copie du tableau lorsque vous l'utilisez pour éviter les effets secondaires. Ces méthodes rendent le code plus concis et efficace.
