Journal Extraction de données du web - introduction à Scrapy (journal bookmark)

Posté par  (site web personnel, Mastodon) . Licence CC By‑SA.
Étiquettes :
18
30
jan.
2015

Bonjour,

Ceci est un journal bookmark.

Scrapy est un framework python qui permet d'extraire des données structurées trouvées dans des sites web. Du crawling avec traitement de données.

Comme dit sur le site de présentation : "An open source and collaborative framework for extracting the data you need from websites. In a fast, simple, yet extensible way."

J'ai fait une présentation du framework hier au python user group de Grenoble (pyuggre comme on dit) ; si ça vous intéresse, la présentation est disponible sur Github, ainsi que les 3 exemples (dont un de crawling des news LinuxFR ;).

  • # Weboob

    Posté par  (site web personnel) . Évalué à 10. Dernière modification le 30 janvier 2015 à 15:22.

    Ça a l'air pas mal. Dans la même veine il y a Weboob. Ce n'est pas simplement un ensemble d'applications aux noms qui font polémique, c'est une aussi une bibliothèque (Browser 2) qui intègre tout le nécessaire pour faire du scraping (parsing, post, pagination, etc : tout).

    La différence que je vois avec Scrapy, c'est que Browser 2 dispose de nombreux filtres qui font pas mal de boulot et permettent d'éviter de manipuler soit même du xpath. On décrit ce qu'on veut récupérer plus que faire le traitement soi-même. Je vous renvoie à cet article pour un peu plus d'info.

    Pour avoir développé un module Weboob avec, c'est assez puissant et assez joli. Et on peut aussi parfaitement s'en servir pour un projet perso.

    Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

    • [^] # Re: Weboob

      Posté par  (site web personnel) . Évalué à 3.

      scrapy est assez proche de ce que fait weboob.browser.

      À ma connaissance je n'ai pas trouvé d'équivalent des pages, filtres ou même d'une gestion des formulaires. En revanche il gère de base l'exportation des objets capturés ("pipeline").

      Il faudrait que je me penche un peu plus sur la question (notamment faire un comparatif de fonctionnalités car la question revient souvent) mais de loin scrapy m'apparait plein de suppositions sur la façon de gérer un site et semble surtout adapté au « scraping » plutôt qu'à l'interaction dynamique avec un site. À noter que j'utilise déjà weboob.browser pour aspirer des sites énormes ; je n'ai pas l'impression que certaines de mes problématiques soient gérées, comme récupérer les mises à jour de façon efficace, ce qui implique de repasser sur certaines URLs.

      • [^] # Re: Weboob

        Posté par  . Évalué à 2.

        scrapy permet de gérer les mises à jour des pages ?

        • [^] # Re: Weboob

          Posté par  (site web personnel) . Évalué à 2.

          À ce que j'ai compris il ne s'occupe que des URLs, et parcourt une liste préformatée ou les liens présents dans les pages déjà visitées. Weboob lui ne voit pas d'URLs mais des objets (ça demande une correspondance objet vers URL), il peut donc récupérer des choses à la demande en plus de tout parcourir.

          • [^] # Re: Weboob

            Posté par  (site web personnel, Mastodon) . Évalué à 4.

            Scrapy commence son travail à partir d'une (ou plusieurs) requêtes (par défaut des urls, donc "crawlé" via un HTTP GET, mais le mécanisme est de gérer des requêtes).

            Ensuite, c'est toi qui définit la mécanique de crawling et l'enrichissement des requêtes/urls à crawler.

            Ma présentation est illustrée notamment par un exemple de crawling du site de l'APEC où les urls ne sont ni des boutons cliqués, ni des liens suivis mais des urls construites à partir des données trouvées dans les pages.

      • [^] # Re: Weboob

        Posté par  . Évalué à 2.

        Ouais enfin bon, scrapy c'est quand même plus sérieux qu'un projet dont le nom est "weboob"…

      • [^] # Re: Weboob

        Posté par  (site web personnel, Mastodon) . Évalué à 6.

        scrapy est assez proche de ce que fait weboob.browser.

        De ce que je comprends de weboob, le périmètre de Scrapy m'a l'air beaucoup plus large que weboob.browser. Tu peux notamment gérer une ferme de spiders, avec une API pour les monitorer / piloter.

        À ma connaissance je n'ai pas trouvé d'équivalent des pages, filtres ou même d'une gestion des formulaires. En revanche il gère de base l'exportation des objets capturés ("pipeline").

        Qu'appelles-tu les filtres ? Scrapy est architecturé pour extraire des données (là où Weboob est architecturé pour proposer des applications). Scrapy se décompose en 3 couches :

        1. la couche de "crawling" qui va extraire des données brutes et gérer la navigation entre pages et le "pool" d'urls ou plus exactement de requêtes à effectuer.
        2. la couche de traitement des données qui permet de transformer les données brutes extraites durant le crawling en données structurées
        3. la modélisation des données recherchées.

        Le pipeline de Scrapy est extrêmement puissant, tu peux facilement chaîner les opérations (exemple : filtrage des données incomplètes, ou encore on peut imaginer une couche de "filtrage" qui va enrichir les données en corrélant ce qu'on extrait du crawling avec des données déjà en base, la suppression des doublons, etc, etc). Je ne connais pas Weboob sur cet aspect-là.

        Il faudrait que je me penche un peu plus sur la question (notamment faire un comparatif de fonctionnalités car la question revient souvent) mais de loin scrapy m'apparait plein de suppositions sur la façon de gérer un site

        Quel genre de supposition ?

        et semble surtout adapté au « scraping » plutôt qu'à l'interaction dynamique avec un site. À noter que j'utilise déjà weboob.browser pour aspirer des sites énormes ; je n'ai pas l'impression que certaines de mes problématiques soient gérées, comme récupérer les mises à jour de façon efficace, ce qui implique de repasser sur certaines URLs.

        Comment tu fais pour récupérer les mises à jour sans repasser sur les URLs ?

    • [^] # Re: Weboob

      Posté par  (site web personnel, Mastodon) . Évalué à 10.

      La différence que je vois avec Scrapy, c'est que Browser 2 dispose de nombreux filtres qui font pas mal de boulot et permettent d'éviter de manipuler soit même du xpath. On décrit ce qu'on veut récupérer plus que faire le traitement soi-même. Je vous renvoie à cet article pour un peu plus d'info.

      Dans l'article que tu pointes, Browser2 s'appuie aussi sur XPath. Quand tu as ceci dans Browser2 :

      obj_id = Regexp(Link('.//a'), r'/videos/(.+).html')

      Tu as l'équivalents dans Scrapy :

      obj_id = response.xpath('.//a/@href').re(r'/videos/(.+).html')

      Je n'ai pas compris la différence.

  • # Gestion des modifications

    Posté par  . Évalué à 1. Dernière modification le 30 janvier 2015 à 16:57.

    Comment est gérée la modification de la structure d'une page ? Est-ce que des alertes sont remontées ?
    Est-il prévu d'ajouter (ça existe peut-être déjà ) une I.A capable de détecter le type d'un site à partir d'une base de connaissance (annonces emploi, petites-annonces, blog…) et de produire les requêtes XPath ?

    En tous cas bravo pour le projet, j'ai vu que pas mal de services l'utilisent.

    • [^] # Re: Gestion des modifications

      Posté par  (site web personnel, Mastodon) . Évalué à 4.

      Comment est gérée la modification de la structure d'une page ? Est-ce que des alertes sont remontées ?

      Je pense que ça doit être implémenté à la main (je ne connais pas assez pour répondre à coup sûr).

      Est-il prévu d'ajouter (ça existe peut-être déjà ) une I.A capable de détecter le type d'un site à partir d'une base de connaissance (annonces emploi, petites-annonces, blog…) et de produire les requêtes XPath ?

      Scrapy cherche à extraire des données structurées ; cela pré-suppose que l'on sait ce que l'on cherche. Dans ces conditions, les sites crawlés sont connus et la structure également.

      En clair, si tu veux crawler des sites d'annonce, par exemple pour agréger les annonces de X sites différents, tu définis tes règles pour chaque site, et ensuite tu lance un crawler pour chacun des sites (la conception de Scrapy fait que tu peux définir quelles règles s'appliquent à quels sites).

      Par contre ce n'est pas automatique et ça ne génère pas tes requêtes XPath pour la simple et bonne raison que c'est à toi de définir quelles sont les informations que tu recherches.

      • [^] # Re: Gestion des modifications

        Posté par  . Évalué à 2. Dernière modification le 30 janvier 2015 à 17:44.

        Arrhhh j'avais compris de traviole : je pensais que tu étais l'auteur de l'outil :-)

        Je vais essayer de voir si des choses ont été faites autour de ces questions.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.