Partage
  • Partager sur Facebook
  • Partager sur Twitter

Crawling à grande échelle

Trop lent

Sujet résolu
    12 mai 2024 à 21:25:30

    Salut les zéros ! 😉 Oui je sais le site s'appelle plus comme ça mais j'aime bien.

    J'ai récemment conçu un algo de crawling du web pour un petit moteur de recherche maison. Projet ambitieux me direz-vous mais il se trouve qu'il marche et tourne en local. Pour faire tourner ça j'ai fait un petit algo en python qui passe de lien en lien et enregistre tout ce qu'il trouve dans une base de donnée MySQL. Problème même avec de l'asynchrone à tous les étages, l'algo avec encore quelques optimisations devrait pas être capable de récupérer plus de 1000 pages par minute. Ensuite côté affichage des résultats ça va être difficile d'être pertinent avec disons 10 000 pages disponibles. J'ai demandé l'avis de perplexity (une IA générative formidable) et apparemment, il y'a des contraintes matérielles (nombre de processeurs notamment). Pourtant Google réussissait en 1998 à scraper des millions de pages. A votre avis comment puis-je faire? (je ne mettrais aucun code complet ici parce que bon c'est beaucoup de travail).

    -
    Edité par YoannH1 12 mai 2024 à 21:25:49

    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2024 à 8:05:12

      Bonjour,

      Quand je fais des requêtes multiples, j'utilise le module python adapté... Quel module utilisez-vous ? Je conseille aiohttp !

      Ensuite, il faut gérer le parallélisme avec Semaphore de asyncio. Cela permet d'éviter de surcharger le serveur et d'empêcher votre application de générer trop de requêtes en parallèle

      Par ex. avec un code simple

      import aiohttp
      import asyncio
      
      async def fetch_limited(url, session, semaphore):
          async with semaphore:
              async with session.get(url) as response:
                  return await response.text()
      
      async def main(urls):
          semaphore = asyncio.Semaphore(20)  # Limite à 20 requêtes simultanées
          async with aiohttp.ClientSession() as session:
              tasks = [fetch_limited(url, session, semaphore) for url in urls]
              return await asyncio.gather(*tasks)
      



      -
      Edité par fred1599 14 mai 2024 à 8:07:26

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        14 mai 2024 à 17:49:36

        Merci pour ces informations messieurs. Je suis en train de tester. Que pensez vous de RUST, c'est un langage plus rapide que C++?
        • Partager sur Facebook
        • Partager sur Twitter
          14 mai 2024 à 20:34:55

          YoannH1 a écrit:

          Merci pour ces informations messieurs. Je suis en train de tester. Que pensez vous de RUST, c'est un langage plus rapide que C++?

          Salut,

          Ça, c'est une question à poser sur un forum Rust ou C++ !!!

          • Partager sur Facebook
          • Partager sur Twitter
            15 mai 2024 à 10:55:00

            Comme les 2 compilent le code et donnent un exécutable, les performances devraient être relativement similaires (ça varie peut-être selon le contexte).
            • Partager sur Facebook
            • Partager sur Twitter
              15 mai 2024 à 18:34:52

              > Pourtant Google réussissait en 1998 à scraper des millions de pages.

              En répartissant le travail entre quelques milliers de serveurs, avec des liens réseau très rapides vers les noeuds d'interconnexion d'internet.

              > A votre avis comment puis-je faire?

              Jouer au loto ?

              • Partager sur Facebook
              • Partager sur Twitter
                15 mai 2024 à 19:26:38

                sinon maintenant, il y a aussi, en principe mais pas systématiquement, la présence de fichiers robots.txt et/ou sitemap.xml sur les sites (robots.txt pour dire ce que les robots de recherche peuvent scanner ou pas par rapport au site)

                https://developers.google.com/search/docs/crawling-indexing/robots/create-robots-txt?hl=fr

                https://robots-txt.com/ 

                • Partager sur Facebook
                • Partager sur Twitter
                  15 mai 2024 à 20:50:37

                  Pour ce qui est des performances, le bootleneck (facteur qui fâche), ça va certainement être le délai de réponse (latence + réaction du site distant + temps de transfert des données) plus que le temps d'envoi de la requête et stockage du résultat.   Et la limitation liée à la bande passante du "crawler".

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Crawling à grande échelle

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  • Editeur
                  • Markdown