paint-brush
Maîtriser le Web Scraping dynamiquepar@brightdata
458 lectures
458 lectures

Maîtriser le Web Scraping dynamique

par Bright Data10m2024/07/01
Read on Terminal Reader

Trop long; Pour lire

Lors d'un récent webinaire, les experts en automatisation Web Dario Kondratiuk, Diego Molina et Greg Gorlen ont partagé des conseils de pro pour naviguer dans ce paysage. L’utilisation de sélecteurs robustes dans le web scraping peut minimiser la maintenance et réduire les échecs de script. En ciblant les appels d'API au lieu de supprimer le DOM, les développeurs peuvent accéder directement aux données structurées au format JSON.
featured image - Maîtriser le Web Scraping dynamique
Bright Data HackerNoon profile picture
0-item
1-item
2-item
3-item
4-item
5-item

Dans le développement Web, le scraping de sites Web dynamiques est devenu à la fois un art et une science. Avec des outils tels que Puppeteer, Playwright et Selenium, les développeurs disposent d'options puissantes. Mais une grande puissance s’accompagne d’une grande complexité. Lors d'un récent webinaire, les vétérans du scraping Dario Kondratiuk, Diego Molina et Greg Gorlen ont partagé des conseils de pro pour naviguer dans ce paysage. Que vous ayez affaire à des applications à page unique (SPA) ou que vous évitiez les mesures anti-bot, voici comment améliorer votre jeu de scraping.

Choisir des sélecteurs fiables

Au cours du webinaire, Dario Kondratiuk a souligné l'importance d'utiliser des sélecteurs robustes dans le web scraping. Les sélecteurs fragiles et profondément imbriqués entraînent souvent des problèmes de maintenance. Au lieu de cela, Dario a recommandé d'utiliser des étiquettes ARIA et des sélecteurs textuels, qui sont plus résistants aux changements.


Par exemple :

 javascriptCopy code// Using Playwright for ARIA and text selectors await page.locator('text="Login"').click(); await page.locator('[aria-label="Submit"]').click();


Cette approche garantit que même si le code HTML sous-jacent change, vos scripts restent fonctionnels. Comme l'a souligné Dario, « des sélecteurs fiables minimisent la maintenance et réduisent les échecs de script ».


Adoptez l’interception des API

Lors du webinaire, Greg Gorlen a souligné la puissance de l'interception des API pour une extraction de données plus efficace. En ciblant les appels d'API au lieu de supprimer le DOM, les développeurs peuvent accéder directement aux données structurées au format JSON, en contournant les complexités du contenu chargé dynamiquement.


Pourquoi l'interception d'API ?

  • Vitesse : L'accès aux données JSON est généralement plus rapide que l'analyse HTML.

  • Fiabilité : les structures JSON sont moins sujettes aux changements que le DOM.


Greg a partagé un exemple utilisant Playwright pour intercepter les réponses de l'API :


 javascriptCopy code// Using Playwright to intercept API responses await page.route('**/api/data', route => { route.continue(response => { const data = response.json(); console.log(data); // Process or save the data }); });


Dans cet exemple, le script intercepte les appels vers un point de terminaison d'API spécifique, permettant aux développeurs de travailler directement avec des données propres et structurées.


Conseil pratique : Vérifiez toujours l'onglet réseau dans les outils de développement de votre navigateur. Recherchez les appels API qui renvoient les données dont vous avez besoin. Si disponible, cette méthode peut grandement simplifier votre processus de grattage.


« L'interception des API accélère non seulement l'extraction des données, mais améliore également la fiabilité. Recherchez les points de terminaison JSON : ils contiennent souvent les données souhaitées dans un format beaucoup plus utilisable.



Gestion du chargement paresseux

Le chargement paresseux, une technique courante pour optimiser les performances Web, peut compliquer les efforts de scraping. Le contenu ne se charge que lorsque l'utilisateur interagit avec la page, par exemple en faisant défiler ou en cliquant. Lors du webinaire, Dario Kondratiuk a présenté des stratégies efficaces pour relever ce défi.


Approches clés :

  1. Défilement simulé : la simulation des défilements de l'utilisateur peut déclencher le chargement de contenu supplémentaire. Ceci est crucial pour les sites dont le contenu apparaît lorsque l'utilisateur fait défiler vers le bas.


     javascriptCopy code// Simulate scrolling with Playwright await page.evaluate(async () => { await new Promise(resolve => { let totalHeight = 0; const distance = 100; const timer = setInterval(() => { window.scrollBy(0, distance); totalHeight += distance; if (totalHeight >= document.body.scrollHeight) { clearInterval(timer); resolve(); } }, 100); // Adjust delay as necessary }); });


    Pourquoi ça marche : Cette méthode imite le comportement naturel de l'utilisateur, permettant le rendu de tout le contenu chargé paresseusement. Le réglage de la distance de défilement et du délai permet de contrôler la vitesse et l’intégralité du chargement.


  2. Interception de requêtes : En interceptant les appels API, vous pouvez accéder directement aux données sans vous fier au rendu visuel du contenu. Cette approche peut améliorer considérablement la vitesse et la fiabilité de l’extraction des données.


     javascriptCopy code// Intercepting API requests in Playwright await page.route('**/api/data', route => { route.continue(response => { const data = response.json(); console.log(data); // Process data as needed }); });


    Avantages :

    • Vitesse : récupère directement les données, évitant ainsi le besoin de chargements multiples de pages.
    • Efficacité : capture toutes les données pertinentes sans avoir besoin de restituer visuellement la page entière.


  3. Vérifications de la visibilité des éléments : Dario a suggéré de valider la visibilité d'éléments spécifiques pour garantir que le contenu requis a été chargé. Cela peut être combiné avec le défilement pour fournir une stratégie de scraping complète.

     javascriptCopy code// Wait for specific elements to load await page.waitForSelector('.item-loaded', { timeout: 5000 });


Pourquoi ces techniques sont importantes : le chargement paresseux peut rendre le scraping difficile en masquant les données jusqu'à l'interaction de l'utilisateur. La simulation des interactions et l'interception des requêtes permettent aux développeurs de s'assurer que tout le contenu nécessaire est disponible pour le scraping.


Dario a souligné : « La capture de données en morceaux permet non seulement de gérer le défilement infini, mais garantit également qu'aucun contenu n'est manqué. » En appliquant ces méthodes, les développeurs peuvent collecter efficacement des données même sur les sites Web les plus dynamiques.


Simulation des interactions utilisateur pour un chargement paresseux


Accéder aux données dans Shadow DOM

Les composants Shadow DOM encapsulent des parties du site Web, ce qui rend l'extraction de données plus complexe. Au cours du webinaire, Dario Kondratiuk a partagé des techniques efficaces pour gratter les éléments Shadow DOM.


Approches :

  1. Utiliser les outils intégrés : des outils tels que Playwright et Puppeteer permettent aux développeurs de percer le Shadow DOM, permettant ainsi d'accéder à des éléments autrement cachés.


     javascriptCopy code// Accessing elements within Shadow DOM using Playwright const shadowHost = await page.locator('#shadow-host'); const shadowRoot = await shadowHost.evaluateHandle(node => node.shadowRoot); const shadowElement = await shadowRoot.$('css-selector-within-shadow');


  2. Gestion du Shadow DOM ouvert ou fermé :

    • Open Shadow DOM : facilement accessible via JavaScript, permettant une extraction simple des données.
    • Closed Shadow DOM : Plus difficile, car il restreint l'accès direct. Les solutions de contournement peuvent inclure l'utilisation d'outils de navigateur spécifiques ou l'injection de JavaScript.


Pourquoi c'est important : Comprendre la structure des Shadow DOM est crucial. Comme l'a noté Dario, "Traitez les Shadow DOM comme des iframes ; naviguez dans les racines fantômes comme vous le feriez avec des documents iframe."


En tirant parti de ces techniques, les développeurs peuvent extraire efficacement les données des éléments encapsulés, garantissant ainsi un scraping complet.


Capturer des captures d'écran pleine page

Capturer des captures d'écran de contenu dynamique peut s'avérer délicat, en particulier lorsque le contenu ne tient pas dans une seule fenêtre. Diego Molina a partagé des stratégies pour prendre des captures d'écran précises d'une page entière.


Techniques :

  1. Utilisation des fonctionnalités du navigateur :

    • Firefox : la prise en charge intégrée des captures d'écran pleine page facilite la capture de pages entières.
     javascriptCopy code// Full-page screenshot in Playwright with Firefox await page.screenshot({ path: 'fullpage.png', fullPage: true });


  2. Protocole Chrome DevTools (CDP) :

    • Utilisez CDP pour capturer des captures d'écran dans Chrome, permettant ainsi plus de contrôle sur le processus de capture d'écran.
     javascriptCopy code// Using CDP with Puppeteer for full-page screenshots const client = await page.target().createCDPSession(); await client.send('Page.captureScreenshot', { format: 'png', full: true });


  3. En attente du chargement du contenu : Diego a souligné l'importance d'attendre des éléments spécifiques pour s'assurer que tout le contenu dynamique est entièrement chargé avant la capture.

     javascriptCopy code// Wait for content to load await page.waitForSelector('.content-loaded'); await page.screenshot({ path: 'dynamic-content.png', fullPage: true });


Pourquoi c'est important : La capture de captures d'écran complètes est cruciale pour le débogage et la tenue des enregistrements. Diego a conseillé : "Assurez-vous toujours que tous les éléments, polices et images sont entièrement chargés avant de prendre des captures d'écran afin d'éviter de manquer du contenu."

Contourner les mesures anti-bots

Lorsqu’ils intensifient leurs efforts de web scraping, les développeurs sont souvent confrontés à des technologies anti-bot sophistiquées conçues pour empêcher l’extraction automatisée de données. Jakub a partagé des stratégies pratiques pour surmonter ces défis :


API Web Scraper - Données lumineuses


  1. Gestion de session : l'utilisation d'outils tels que le navigateur Scraping de Bright Data peut simplifier considérablement la gestion des sessions. Ce produit gère automatiquement les cookies et les sessions, imitant les modèles de navigation humains pour réduire le risque d'être signalé.


  2. Rotation IP : la mise en œuvre de la rotation IP est cruciale pour le scraping à grande échelle. Des services tels que Bright Data offrent des réseaux proxy étendus, vous permettant de faire pivoter les adresses IP et de simuler des demandes provenant de divers emplacements géographiques. Cela permet d’éviter de déclencher des défenses anti-bots qui surveillent les requêtes répétées provenant d’adresses IP uniques.


  3. Techniques de prise d'empreintes digitales : des outils tels que Puppeteer Extra et Playwright Stealth peuvent modifier les empreintes digitales du navigateur pour contourner la détection. En modifiant des éléments tels que les agents utilisateurs, les dimensions de l'écran et les types d'appareils, ces outils aident les scripts à ressembler davantage à des utilisateurs légitimes.


  4. Interaction de type humain : Selenium, Playwright et Puppeteer fournissent des plates-formes qui permettent des interactions de type humain, telles que des mouvements de souris réalistes et des simulations de frappe. Cela peut réduire encore davantage la probabilité de déclenchement de mécanismes anti-bots.


Pourquoi c'est important : La navigation dans les mesures anti-bots est cruciale pour réussir un scraping à grande échelle. Jakub a souligné l'importance de se concentrer sur l'écriture de scripts efficaces tout en tirant parti des outils qui gèrent les complexités de la gestion des sessions, de la rotation des adresses IP et des empreintes digitales.


Surmonter les CAPTCHA


En mettant en œuvre ces stratégies et en utilisant des outils spécialisés, les développeurs peuvent faire évoluer efficacement leurs opérations de scraping et minimiser le risque de détection et de blocage.


Informations questions-réponses : réponses d'experts aux défis courants

Au cours de la session de questions-réponses du webinaire, les panélistes ont abordé plusieurs défis courants rencontrés par les développeurs en matière de web scraping :


  1. Interception des appels d'API frontend : le panel a mis l'accent sur l'utilisation d'outils tels que Puppeteer et Playwright pour intercepter directement les appels d'API. En surveillant les requêtes réseau dans les outils de développement du navigateur, les développeurs peuvent identifier et cibler les points de terminaison d'API spécifiques qui renvoient les données souhaitées, en contournant les structures DOM complexes.


  2. Gestion de l'authentification de base : pour gérer l'authentification de base, il est crucial d'automatiser le processus à l'aide des fonctionnalités intégrées aux outils de scraping. Cela garantit un accès fluide aux données sans intervention manuelle à chaque fois.


  3. Écriture de sélecteurs XPath robustes : le consensus était clair : évitez XPath autant que possible. Au lieu de cela, exploitez les options de localisation robustes fournies par des outils tels que Playwright, qui proposent divers sélecteurs tels que des sélecteurs de rôles basés sur du texte et ARIA, garantissant des scripts de scraping plus résilients.


  4. Standardisation de l'extraction de données : bien qu'il n'existe pas encore de norme universelle pour regrouper du HTML complet, les développeurs peuvent utiliser des outils tels que Mozilla Readability pour simplifier l'extraction de contenu en convertissant les pages dans un format plus structuré, améliorant ainsi l'accessibilité des données.


  5. Chargement paresseux sans interactions utilisateur : les experts ont recommandé d'utiliser un défilement simulé ou des requêtes réseau d'interception pour garantir que tous les chargements de contenu sans interactions manuelles de l'utilisateur. Cette approche permet une extraction complète des données, même sur des pages complexes et chargées paresseusement.


  6. Capturer des captures d'écran de contenu dynamique : lorsqu'il s'agit de contenu dynamique, il est essentiel d'attendre que tous les éléments soient complètement chargés avant de capturer des captures d'écran. Des outils tels que les capacités de capture d'écran natives de Firefox ou l'utilisation du protocole Chrome DevTools (CDP) peuvent faciliter des captures précises d'une page entière.


  7. Gestion des classes dynamiques : pour gérer les changements fréquents dans les classes dynamiques, le panel a suggéré de se concentrer sur les sélecteurs relatifs et les attributs de données. Ces éléments sont généralement plus stables et moins susceptibles de changer, ce qui réduit le besoin d'ajustements constants du script.


Points clés à retenir du webinaire

Le webinaire a fourni un trésor d’informations sur la maîtrise du web scraping dynamique. Grâce aux conseils d'experts, les développeurs ont acquis des stratégies précieuses pour relever les défis complexes du web scraping.


Ce que nous avons appris :

  • Sélecteurs robustes : optez pour les étiquettes ARIA et les sélecteurs basés sur du texte pour créer des scripts de scraping résilients.
  • Interception API : ciblez les points de terminaison de l'API pour une extraction de données plus rapide et plus fiable.
  • Gestion des SPA : utilisez des prédicats basés sur les événements pour gérer le contenu chargé dynamiquement dans les SPA.
  • Lazy Loading : simulez les interactions des utilisateurs ou interceptez les requêtes réseau pour garantir une récupération complète des données.
  • Shadow DOM : Accédez efficacement aux éléments encapsulés en utilisant les bons outils et techniques.
  • Mesures anti-bot : utilisez des outils de gestion de session, de rotation IP et d'empreintes digitales pour intensifier les efforts de scraping tout en évitant la détection.
  • Classes dynamiques : concentrez-vous sur les attributs stables et les attributs de données pour maintenir la robustesse du scraper.


Les conseils pratiques et les expériences partagées des panélistes ont fourni une base solide aux développeurs pour affiner leurs techniques de web scraping. En mettant en œuvre ces stratégies, vous pouvez améliorer vos capacités de scraping, réduire les efforts de maintenance et garantir une extraction réussie des données sur diverses architectures de sites Web .


Dans l’ensemble, le webinaire s’est avéré une ressource inestimable, offrant des perspectives d’experts et des solutions concrètes aux défis courants du scraping. Que vous soyez un développeur chevronné ou un débutant, ces informations amélioreront certainement vos efforts de web scraping.