Annonce

Réduire
Aucune annonce.

Web Harvester

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Web Harvester

    Bonjour à tous,

    Ce soir, j'aimerais vous présenter un projet qui me tient à coeur depuis un certain temps.

    L'idée générale

    L'idée générale m'est venue un jour ou je faisais des recherches à propos de quelqu'un sur le Web.
    Après avoir fait le tour de nombreux moteurs de recherches, de nombreux sites, de nombreux flux rss, je n'avais toujours pas trouvé ce que je cherchais. Quelle frustration !

    J'ai alors voulu automatiser ma recherche et demander à un programme de la faire à ma place.

    Les buts

    Le but est donc de développer une application agrégeant le plus possible de sources afin d'accéder le plus possible d'informations.

    Une fois les informations récupérées, l'étape suivante est de trier et de cataloguer cette information. Mon idée à ce niveau est toujours floue mais je dirais qu'un minimum est de définir les liens les plus intéressant et de les afficher.
    Le mieux du mieux serait de, dans les pages les plus intéressantes, récupérer les paragraphes les plus intéressants et de tous les agréger afin de sortir un joli résumé.

    Récupérer les informations

    J'ai déjà développé mon propre Web Crawler en python (https://github.com/AnOnyme77/SearchTools --> WebBot.py).
    Il récupère des liens Google et surf après de manière arborescente sur les sites récupérés. Il a été développé dans l'urgence et a été très mal fait mais il est fonctionnel. L'idée serait donc de le réécrire en lui donnant d'autres moteurs de recherches et d'autres services.

    D'autres modules doivent également pouvoir s'adapter à cette structure de base :
    1. Récupération de flux RSS (ici, j'ai déjà une implémentation partielle)
    2. Accès direct à Wikipedia
    3. Accès direct à Base
    4. Accès direct à Wolfram Alpha
    5. ...


    L'analyse des informations

    A ce niveau, il reste beaucoup à faire.
    Il faudrait trier et catégoriser l'information.
    Dans le cadre du web crawler, j'avais en son temps développé un système simpliste basé sur des critères. Cependant, cela ne suffit pas à tous les types d'informations.

    Les technologies utilisées

    J'aimerais faire ce développement en Java (simplement parce que c'est le langage que je maitrise le plus).
    Il faudrait bien évidement stocker les données récupérées, elles pourraient servir à d'autres recherches.
    Au point de vue du stockage, j'hésite toujours entre une DB SQL ou NoSQL (actuellement SQL).

    Le futur idéal

    Le problème de ce projet, c'est sa demande en puissance de calcul.
    Rien que pour le web crawler parcourant de manière arborescente 5 liens Google, il m'est arrivé d'attendre 20 minutes. J'ai pourtant une très bonne config.
    Le futur idéal serait donc de fournir un service de recherche en ligne dont chaque client servirait aux recherches des autres. Le tout avec une centralisation pour l'ordonnancement du travail.
    C'est bien évidement un futur idéal qui n'arrivera probablement jamais mais bon qui sait.

    Votre avis
    J'ai eu l'occasion de présenter l'idée devant une équipe d'IBM (l'occasion était fortuite et dans le cadre scolaire) mais le projet avait eu l'air de les surprendre.

    Et vous, qu'en pensez vous ?
    Voyez vous un intérêt à un tel produit ?

  • #2
    Bonsoir,

    J'adore l'idée !

    Concernant les web-crawler, j'utilise un soft (payant)qui recherche sur différents moteurs de recherches et qui fourni un rendu graphique de ces résultats.

    Je vais tester ton web-crawler et te dirait mes impression !
    Writer, Cyber Security Enthusiast! Follow me on Twitter: @SwitHak

    Commentaire


    • #3
      Salut, déjà très bon projet. J'affectionne tout particulièrement les Crawlers, j'en fait assez régulièrement.

      Je pense que dans tes specs, il faudrait surtout pas oublier la gestion de proxy, et oui quand on crawle des Moteurs de recherche il faut faire attention au ban.

      De plus j'ajouterai une gestion de service tel que : http://www.deathbycaptcha.com/ (service testé et approuvé)

      Moteur de stockage : je recommande chaudement Solr, (http://fr.wikipedia.org/wiki/Apache_Solr) c'est un moteur NoSQL orienté moteur de recherche avec des temps d'accès à la donnée qui n'est ([presque|casiment|ridiculement]) pas impacté par le nombre de donnée à manipuler. De plus tout ceux ci s'interface en RESTFull ce qui le rend intéropérable très facilement.

      Et enfin, il te faudrait une gestion de template de crawle pour chaque site internet. Se baser sur une librairie de parcours de DOM acceptant les selecteurs CSS est une bonne idée selon moi. (une bonne mais en PHP serait QueryPath).

      Dans un projet de SEO blackHat à l'école j'ai bossé avec un pote sur un crawler "participatif" dont le concept est proche d'un botnet. Un soft installé sur plusieurs agents interroge régulièrement le/les serveurs pour demander si des taches sont dans la pile. Si oui, il en récupère les spécificité (template de crawl, scénario de navigation, mot clé à rechercher etc...) et renvoie le résultat de sa stack au serveur.
      ToxID : 7322307290A75F5F36142EF206D95374966F10FE2CCD8224BEC07F16137875058C3BC4020609


      Petite énigme, seriez vous décoder ce code ? WW4gZXJjYmFmciBoYXZpcmVmcnl5ciA/

      Commentaire


      • #4
        Merci beaucoup pour vos retours.

        L'ombre :
        Je vais tester ton web-crawler et te dirait mes impression !
        Je te laisse tester mais sache que cette version a été vite et mal faite. Celle à venir sera plus sérieuse.

        misterPoc :

        J'affectionne tout particulièrement les Crawlers, j'en fait assez régulièrement.
        Mon but est en fait de combiner les crawlers avers diverses autres sources d'informations.
        Par exemple :
        - Accès direct (Wikipedia, Wolfram Alpha, ...) via des apis ou de simples HTTP
        - RSS
        - Twitter (parcourt du DOM)
        - ...

        il faudrait surtout pas oublier la gestion de proxy, et oui quand on crawle des Moteurs de recherche il faut faire attention au ban.
        Je n'y avais à vrai dire pas pensé vu que mon nombre de requêtes aux moteurs de recherches est limité. Ils ne servent en fait que de base au crawler.

        il te faudrait une gestion de template de crawle pour chaque site internet
        Ton idée est de faire un template par site ?
        Je pensais en fait appliquer ta technique sur certains sites mais de laisser également certaines parties du programmes surfer, disons plus librement.

        j'ai bossé avec un pote sur un crawler "participatif" dont le concept est proche d'un botnet
        C'était en fin l'idée finale. Ca diminuerait énormément les temps de recherche.
        Chaque acteur de l'application devrait aussi idéalement pouvoir ajouter ses propres sources afin qu'il puisse mettre à la disposition de la communauté d'ordinateurs les résultats provenant de ces sources.

        Commentaire


        • #5
          @Anonyme77,

          C'est un peu (beaucoup en fait) brouillon tout ça... Sur le principe, je ne comprend pas ce que tu veux faire exactement !

          Pour moi l'implémentation en python n'est pas suffisamment aboutie, dans le sens où je pense qu'il te manque certaines choses, soit par oublis, soit par manque de compétence dans le domaine.

          Je ne suis pas spécialiste non plus de ce domaine, je donne juste un exemple... Ta classe PageWeb, je ne comprend par exemple pas, pourquoi ton attribut contenu n'est pas directement complété dans la classe elle-même et aussi pourquoi ton constructeur de classe ne prend pas en paramètre une URL. Je n'ai pas vu non plus de méthode permettant de vérifier qu'une URL existe en vérifiant par exemple son statut (200 pour OK).

          J'ai donc beaucoup de doutes tant dans la conception, que dans la syntaxe. Pire, tu utilises python 2.x... Alors que l'on utilise cette version que dans une extrême exception, comme par exemple un ancien code (python 2.5 par exemple) qu'on veut faire passer en version 2.7.

          Lorsqu'on veut partager son code python sur github, la version adéquate est la 3.x, et cela rendra déjà plus sérieux ton projet par tout codeur python qui se respecte.

          En ce qui me concerne, c'est ton but qui me semble suffisamment flou pour que tu ailles droit dans le mur, il faut commencer par cela, avant de se lancer dans le code.

          EDIT: Pour compléter ce que j'ai dis sur la classe PageWeb, j'aurais utiliser l'excellent module lxml et requests.

          Voici un exemple

          Code:
          import requests
          from urllib.parse import urlparse
          from lxml import etree, html
          
          class PageWeb:
              def __init__(self, url):
                  self.url = url
                  self.isvalid = False
                  self.contenu = None
                  
                  self.analyse()
              
              def analyse(self):
                  scheme = urlparse(self.url).scheme
                  if not scheme:
                      self.url = 'http://' + self.url
                  req = requests.get(self.url)
                  if req.status_code == 200:
                      self.isvalid = True
                      htm = html.fromstring(req.content)
                      doc = etree.tostring(htm, encoding='unicode', pretty_print=True)
                      self.contenu = doc
          
          p = PageWeb('www.google.fr')
          print(p.contenu) # juste pour le test
          Bonne continuation...
          Dernière modification par fred, 17 janvier 2015, 18h29.

          Commentaire


          • #6
            Bonjour,

            Pour commencer, merci beaucoup pour tes remarques fred.

            C'est un peu (beaucoup en fait) brouillon tout ça... Sur le principe, je ne comprend pas ce que tu veux faire exactement !
            En fait, mon but est de construire un programme de recherche sur le Web. Celui-ci devant agréger de multiples sources telles que des pages Web (via un crawler), des flux rss, des apis, ...
            Le but final est donc de diminuer notre temps de recherche et de si possible arriver à retirer les informations les plus intéressantes à l'intérieur même d'une source.

            Pour moi l'implémentation en python n'est pas suffisamment aboutie, dans le sens où je pense qu'il te manque certaines choses, soit par oublis, soit par manque de compétence dans le domaine.
            Dans l'idée du code python, il a été très vite et très mal fait. Il a en fait été fait dans le besoin et il devait être fait rapidement. De plus, je ne suis pas du tout spécialisé en python, mon domaine est plus orienté Java. Mais comme je l'ai dis une ou deux lignes plus haut, ce crawler basique a été fait dans le besoin et dans ce cadre, une implémentation python était plus rapide.

            En ce qui me concerne, c'est ton but qui me semble suffisamment flou pour que tu ailles droit dans le mur, il faut commencer par cela, avant de se lancer dans le code.
            Sur ce point, je reconnais que tu as tout à fait raison. Je n'ai malheureusement pas encore pris le temps de faire un dossier d'analyse complet du projet. Je le ferai certainement, ne serait-ce qu'en partie.

            Encore une fois, merci de tes remarques constructives.

            Commentaire

            Chargement...
            X