Maison >développement back-end >Tutoriel Python >conseils pour penser comme un expert du web scraping

conseils pour penser comme un expert du web scraping

DDD
DDDoriginal
2024-11-05 11:29:02748parcourir

Généralement, les tutoriels se concentrent sur les aspects techniques, sur ce que vous pouvez reproduire : "Commencez ici, suivez ce chemin, et vous finirez ici." C'est idéal pour apprendre une technologie particulière, mais il est parfois difficile de comprendre pourquoi l'auteur a décidé de faire les choses d'une certaine manière ou ce qui guide son processus de développement.

Un des membres de notre communauté a écrit ce blog en guise de contribution au blog Crawlee. Si vous souhaitez contribuer à des blogs comme ceux-ci sur Crawlee Blog, veuillez nous contacter sur notre chaîne Discord.

Crawlee et Apify

Il s'agit de la communauté de développeurs officielle d'Apify et Crawlee. | 8987 membres

tips on how to think like a web scraping expert discord.com

Dans ce blog, je discuterai des règles et principes généraux qui me guident lorsque je travaille sur des projets de web scraping et me permettent d'obtenir d'excellents résultats.

Alors, explorons l'état d'esprit d'un développeur de web scraping.

1. Choisir une source de données pour le projet

Lorsque vous commencez à travailler sur un projet, vous disposez probablement d'un site cible à partir duquel vous devez extraire des données spécifiques. Vérifiez les possibilités offertes par ce site ou cette application pour l'extraction de données. Voici quelques options possibles :

  • API officielle - le site peut fournir une API officielle gratuite grâce à laquelle vous pouvez obtenir toutes les données nécessaires. C'est la meilleure option pour vous. Par exemple, vous pouvez envisager cette approche si vous devez extraire des données de Yelp
  • Site Web - dans ce cas, nous étudions le site Web, sa structure, ainsi que la manière dont le frontend et le backend interagissent
  • Application mobile - dans certains cas, il n'y a pas de site Web ou d'API du tout, ou l'application mobile fournit plus de données, auquel cas, n'oubliez pas l'approche de l'homme du milieu

Si une source de données échoue, essayez d'accéder à une autre source disponible.

Par exemple, pour Yelp, les trois options sont disponibles, et si l'API officielle ne vous convient pas pour une raison quelconque, vous pouvez essayer les deux autres.

2. Vérifiez le fichier robots.txt et le plan du site

Je pense que tout le monde connaît les robots.txt et le plan du site d'une manière ou d'une autre, mais je vois régulièrement des gens les oublier tout simplement. Si vous en entendez parler pour la première fois, voici une explication rapide :

  • robots est le nom établi pour les robots d’exploration en référencement. Habituellement, cela fait référence aux robots d'exploration des principaux moteurs de recherche comme Google et Bing, ou à des services comme Ahrefs et ChatGPT.
  • robots.txt est un fichier décrivant le comportement autorisé des robots. Il inclut les agents utilisateurs de robots d'exploration autorisés, le temps d'attente entre les analyses de pages, les modèles de pages interdites à l'analyse, etc. Ces règles sont généralement basées sur les pages qui doivent être indexées par les moteurs de recherche et celles qui ne le doivent pas.
  • Le plan du site décrit la structure du site pour faciliter la navigation des robots. Cela permet également d'analyser uniquement le contenu qui doit être mis à jour, sans créer de charge inutile sur le site

Puisque vous n'êtes pas Google ou tout autre moteur de recherche populaire, les règles du robot dans robots.txt seront probablement contre vous. Mais combiné au plan du site, c'est un bon endroit pour étudier la structure du site, l'interaction attendue avec les robots et les agents utilisateurs non-navigateurs. Dans certaines situations, cela simplifie l'extraction des données du site.

Par exemple, en utilisant le plan du site Crawlee, vous pouvez facilement obtenir des liens directs vers des articles à la fois pour toute la durée de vie du blog et pour une période spécifique. Une simple vérification et vous n'avez pas besoin d'implémenter une logique de pagination.

3. Ne négligez pas l'analyse du site

Une analyse approfondie du site est une condition préalable importante pour créer un web scraper efficace, surtout si vous n'envisagez pas d'utiliser l'automatisation du navigateur. Cependant, une telle analyse prend du temps, parfois beaucoup.

Il convient également de noter que le temps consacré à l'analyse et à la recherche d'une solution d'exploration plus optimale n'est pas toujours payant : vous pourriez passer des heures pour découvrir que l'approche la plus évidente était toujours la meilleure.

Par conséquent, il est sage de fixer des limites à votre analyse initiale de site. Si vous ne voyez pas de meilleur chemin dans le temps imparti, revenez à des approches plus simples. Au fur et à mesure que vous gagnerez en expérience, vous serez plus souvent en mesure de déterminer dès le début, en fonction des technologies utilisées sur le site, si cela vaut la peine de consacrer plus de temps à l'analyse ou non.

De plus, dans les projets où vous devez extraire les données d'un site une seule fois, une analyse approfondie du site peut parfois éliminer complètement le besoin d'écrire du code scraper. Voici un exemple d'un tel site - https://ricebyrice.com/nl/pages/find-store.

tips on how to think like a web scraping expert

En l'analysant, vous découvrirez facilement que toutes les données peuvent être obtenues avec une seule requête. Il vous suffit de copier ces données de votre navigateur dans un fichier JSON et votre tâche est terminée.

tips on how to think like a web scraping expert

4. Interactivité maximale

Lors de l'analyse d'un site, changez de tri, de page, interagissez avec divers éléments du site, tout en surveillant l'onglet Réseau dans les outils de développement de votre navigateur. Cela vous permettra de mieux comprendre comment le site interagit avec le backend, sur quel framework il est construit et quel comportement peut en attendre.

5. Les données ne naissent pas de nulle part

C'est évident, mais c'est important de le garder à l'esprit lorsque l'on travaille sur un projet. Si vous voyez des données ou des paramètres de requête, cela signifie qu'ils ont été obtenus quelque part plus tôt, peut-être dans une autre requête, peut-être qu'ils ont déjà été sur la page du site Web, peut-être qu'ils ont été formés en utilisant JS à partir d'autres paramètres. Mais ils sont toujours quelque part.

Si vous ne comprenez pas d'où proviennent les données de la page ou les données utilisées dans une requête, suivez ces étapes :

  1. Séquentiellement, vérifiez toutes les demandes faites par le site avant ce point.
  2. Examinez leurs réponses, leurs en-têtes et leurs cookies.
  3. Utilisez votre intuition : ce paramètre pourrait-il être un horodatage ? Serait-ce un autre paramètre sous une forme modifiée ?
  4. Est-ce que cela ressemble à des hachages ou à des encodages standards ?

La pratique rend parfait ici. À mesure que vous vous familiariserez avec différentes technologies, divers frameworks et leurs comportements attendus, et à mesure que vous rencontrerez un large éventail de technologies, il vous sera plus facile de comprendre comment les choses fonctionnent et comment les données sont transférées. Ces connaissances accumulées amélioreront considérablement votre capacité à tracer et à comprendre les flux de données dans les applications Web.

6. Les données sont mises en cache

Vous remarquerez peut-être qu'en ouvrant plusieurs fois la même page, les requêtes transmises au serveur diffèrent : peut-être que quelque chose a été mis en cache et est déjà stocké sur votre ordinateur. Par conséquent, il est recommandé d'analyser le site en mode navigation privée, ainsi que de changer de navigateur.

Cette situation est particulièrement pertinente pour les applications mobiles, qui peuvent stocker certaines données en stockage sur l'appareil. Par conséquent, lors de l'analyse des applications mobiles, vous devrez peut-être vider le cache et le stockage.

7. En savoir plus sur le cadre

Si lors de l'analyse vous découvrez que le site utilise un framework que vous n'avez jamais rencontré auparavant, prenez le temps de vous renseigner sur celui-ci et ses fonctionnalités. Par exemple, si vous remarquez qu'un site est construit avec Next.js, comprendre comment il gère le routage et la récupération des données pourrait être crucial pour votre stratégie de scraping.

Vous pouvez en apprendre davantage sur ces frameworks via la documentation officielle ou en utilisant des LLM comme ChatGPT ou Claude. Ces assistants IA sont excellents pour expliquer les concepts spécifiques au framework. Voici un exemple de la façon dont vous pouvez interroger un LLM sur Next.js :

I am in the process of optimizing my website using Next.js. Are there any files passed to the browser that describe all internal routing and how links are formed?

Restrictions:
- Accompany your answers with code samples
- Use this message as the main message for all subsequent responses
- Reference only those elements that are available on the client side, without access to the project code base

Vous pouvez également créer des requêtes similaires pour les frameworks backend. Par exemple, avec GraphQL, vous pouvez poser des questions sur les champs disponibles et les structures de requête. Ces informations peuvent vous aider à comprendre comment mieux interagir avec l'API du site et quelles données sont potentiellement disponibles.

Pour un travail efficace avec LLM, je recommande au moins d'étudier les bases de l'ingénierie rapide.

8. Ingénierie inverse

Le Web scraping va de pair avec l’ingénierie inverse. Vous étudiez les interactions du frontend et du backend, vous devrez peut-être étudier le code pour mieux comprendre comment se forment certains paramètres.

Mais dans certains cas, l'ingénierie inverse peut nécessiter plus de connaissances, d'efforts, de temps ou avoir un degré élevé de complexité. À ce stade, vous devez décider si vous devez approfondir cette question ou s'il est préférable de modifier la source de données ou, par exemple, la technologie. Très probablement, ce sera le moment où vous déciderez d'abandonner le HTTP Web Scraping et de passer à un navigateur sans tête.

Le principe principal de la plupart des protections contre le web scraping n'est pas de rendre le web scraping impossible, mais de le rendre coûteux.

Regardons simplement à quoi ressemble la réponse à une recherche sur zoopla

tips on how to think like a web scraping expert

9. Test des requêtes vers les points de terminaison

Après avoir identifié les points de terminaison dont vous avez besoin pour extraire les données cibles, assurez-vous d'obtenir une réponse correcte lorsque vous faites une demande. Si vous obtenez une réponse du serveur autre que 200 ou des données différentes de celles attendues, vous devez comprendre pourquoi. Voici quelques raisons possibles :

  • Vous devez transmettre certains paramètres, par exemple des cookies, ou des en-têtes techniques spécifiques
  • Le site exige que lors de l'accès à ce point de terminaison, il y ait un en-tête Referrer correspondant
  • Le site s'attend à ce que les en-têtes suivent un certain ordre. Je n'ai rencontré cela que quelques fois, mais je l'ai rencontré
  • Le site utilise une protection contre le web scraping, par exemple avec l'empreinte digitale TLS

Et bien d'autres raisons possibles, dont chacune nécessite une analyse séparée.

10. Expérimentez avec les paramètres de requête

Explorez les résultats que vous obtenez lorsque vous modifiez les paramètres de la requête, le cas échéant. Certains paramètres peuvent être manquants mais pris en charge côté serveur. Par exemple, ordre, tri, par page, limite et autres. Essayez de les ajouter et voyez si le comportement change.

Ceci est particulièrement pertinent pour les sites utilisant graphql

Considérons cet exemple

Si vous analysez le site, vous verrez une requête qui peut être reproduite avec le code suivant, je l'ai un peu formaté pour améliorer la lisibilité :

I am in the process of optimizing my website using Next.js. Are there any files passed to the browser that describe all internal routing and how links are formed?

Restrictions:
- Accompany your answers with code samples
- Use this message as the main message for all subsequent responses
- Reference only those elements that are available on the client side, without access to the project code base

Je vais maintenant le mettre à jour pour obtenir des résultats en 2 langues à la fois, et surtout, avec le texte interne des publications :

import requests

url = "https://restoran.ua/graphql"

data = {
    "operationName": "Posts_PostsForView",
    "variables": {"sort": {"sortBy": ["startAt_DESC"]}},
    "query": """query Posts_PostsForView(
    $where: PostForViewWhereInput,
    $sort: PostForViewSortInput,
    $pagination: PaginationInput,
    $search: String,
    $token: String,
    $coordinates_slice: SliceInput)
    {
        PostsForView(
                where: $where
                sort: $sort
                pagination: $pagination
                search: $search
                token: $token
                ) {
                        id
                        title: ukTitle
                        summary: ukSummary
                        slug
                        startAt
                        endAt
                        newsFeed
                        events
                        journal
                        toProfessionals
                        photoHeader {
                            address: mobile
                            __typename
                            }
                        coordinates(slice: $coordinates_slice) {
                            lng
                            lat
                            __typename
                            }
                        __typename
                    }
    }"""
}

response = requests.post(url, json=data)

print(response.json())

Comme vous pouvez le constater, une petite mise à jour des paramètres de la requête me permet de ne pas me soucier de visiter la page interne de chaque publication. Vous n'avez aucune idée combien de fois cette astuce m'a sauvé.

Si vous voyez graphql devant vous et que vous ne savez pas par où commencer, alors mes conseils sur la documentation et le LLM fonctionnent ici aussi.

11. N'ayez pas peur des nouvelles technologies

Je sais à quel point il est facile de maîtriser quelques outils et de les utiliser simplement parce que cela fonctionne. Je suis moi-même tombé dans ce piège plus d'une fois.

Mais les sites modernes utilisent des technologies modernes qui ont un impact significatif sur le web scraping, et en réponse, de nouveaux outils de web scraping émergent. Les apprendre peut grandement simplifier votre prochain projet et peut même résoudre certains problèmes qui étaient insurmontables pour vous. J'ai écrit sur certains outils plus tôt.

Je recommande particulièrement de prêter attention à curl_cffi et aux frameworks
botasaurus et Crawlee pour Python.

12. Aidez les bibliothèques open source

Personnellement, je n’ai réalisé que récemment l’importance de cela. Tous les outils que j'utilise pour mon travail sont soit des développements open source, soit basés sur l'open source. Le web scraping vit littéralement grâce à l'open source, et cela est particulièrement visible si vous êtes un développeur Python et que vous avez réalisé que sur Python pur, tout est assez triste lorsque vous devez gérer l'empreinte digitale TLS, et encore une fois, l'open source nous a sauvés ici.

Et il me semble que le moins que nous puissions faire est d'investir un peu de nos connaissances et compétences dans le support de l'open source.

J'ai choisi de prendre en charge Crawlee pour Python, et non, non pas parce qu'ils m'ont permis d'écrire sur leur blog, mais parce qu'il montre une excellente dynamique de développement et vise à faciliter la vie des développeurs de robots d'exploration Web. Il permet un développement plus rapide des robots en prenant en charge et en cachant sous le capot des aspects critiques tels que la gestion des sessions, la rotation des sessions en cas de blocage, la gestion de la simultanéité des tâches asynchrones (si vous écrivez du code asynchrone, vous savez à quel point cela peut être pénible), et bien plus encore.

:::astuce
Si vous aimez le blog jusqu'à présent, pensez à donner une étoile à Crawlee sur GitHub, cela nous aide à atteindre et à aider davantage de développeurs.
:::

Et quel choix ferez-vous ?

Conclusion

Je pense que certaines choses dans l'article étaient évidentes pour vous, certaines choses que vous suivez vous-même, mais j'espère que vous avez aussi appris quelque chose de nouveau. Si la plupart d'entre elles étaient nouvelles, essayez d'utiliser ces règles comme liste de contrôle dans votre prochain projet.

Je serais heureux de discuter de l'article. N'hésitez pas à commenter ici, dans l'article, ou à me contacter dans la communauté des développeurs Crawlee sur Discord.

Vous pouvez également me retrouver sur les plateformes suivantes : Github, Linkedin, Apify, Upwork, Contra.

Merci de votre attention :)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn