Framework Open Source pour développer un crawler web

Bonjour à tous,

Dans le cadre d’un projet à base de crawler web je cherche à connaitre les techno/framework utilisé par les développeurs pour leur crawler.

J’ai fait le tour des différents solutions du marché :

Connaissez-vous d’autre framework Open Source permettant de faire du crawl ?

De mon côté j’utilise actuellement sur CasperJS/PhantomJS. J’en éprouve les limites.
Je me pose donc la question de passer à Scrapy pour plus de stabilités. Je cherche des retours
d’expérience afin de faire les bons choix.

J’ai un gros volumes de pages à analyser régulièrement avec un coût CPU/RAM que je souhaite maitriser.

Est-ce que certains parmi vous ont déjà développé un crawler/scrapper ?
Si oui, à partir de quel language et avec quel framework ?

A bientôt,
Pierre

1 « J'aime »

Salut,

En java il y a HtmlUnit et Jsoup

a+

Merci @xseillier je vais aller voir. :-)

Pierre

J’ai vu et lu des choses super dans la communauté Python, c’est peut-être bien ScraPy, ou peut-être autre chose.
Sans avoir testé le code, la perf, le confort et le temps de dev, j’ai trouvé le retour d’expérience très mature sur les problématiques.
Du coup je suppose que dans l’ensemble, sur le web et la doc, la communauté Python sait faire du scraping correctement.
C’est un bonus intéressant, ne serait-ce que pour lire les infos et apporter cela dans ta techno de choix, parce que c’est pas trivial… et pas forcément légal non plus, fais gaffe et sois courtois ! :)

Au boulot on utilise storm-crawler et ça semble déboiter.

Merci @abelar_s tu as raison sur le fait d’aller lire la littérature de la communauté Scrapy pour avoir les bonnes pratiques en vigueur surtout que j’ai beaucoup de questionnement sur la partie “courtoisie” ! :-)

Pierre

Merci @ghusse je suis aller voir cela m’a l’air super intéressant ! ;-)

Pierre

Si tu préfère Ruby,

Tu trouvera par exemple Anemone : http://anemone.rubyforge.org/
ou Wombat : http://felipecsl.com/wombat/

si tu préfère coder plus, il y a plusieurs articles qui expliquent le principe, du style de ceux la : https://www.distilled.net/resources/web-scraping-with-ruby-and-nokogiri-for-beginners/
http://readysteadycode.com/howto-scrape-websites-with-ruby-and-mechanize
les associations de nokogiri (parser), mechanize et HTTParty, ou OpenURI peuvent être utilisés.

Bon courage

Dans ma boîte nous avons construit un crawler maison en Go.

Globalement, un crawler ce n’est qu’un ensemble de routines synchronisées qui font des GET et du parsing, donc avec les packages standards net/http et x/net/html, ainsi que la gestion native de la concurrence en Go, tu as tout ce qu’il te faut pour construire ton crawler sans dépendre d’une librairie ou d’un framework. Et en termes de performance c’est le top !

2 « J'aime »

Merci @BastienL pour ton retour. En effet conceptuellement un crawler c’est assez simple ! ;-)
Je continue à creuser le sujet, c’est passionnant !

Pierre

Alors personnellement, j’en ai réalisé un from scratch. J’ai utilisé ce que je connaissais : PHP.

J’ai réalisé un script qui fait office de moniteur. Il est connecté à une instance redis. Il s’occupe “simplement” de regarder s’il y a des liens dans la file. S’il en trouve, il envoie ça à un serveur Gearman (il y a bien-sûr d’autres possibilités : rabbitMQ, kafka) qui dispatch le job sur l’un des workers (situés sur une ou plusieurs machines).

Gearman s’occupe du loadbalancing tout seul comme un grand.

Le worker quant à lui s’occupe de parser la page, de découvrir les liens et de les mettre dans redis (et au passage d’extraire des données que je mets dans pgsql / Elasticsearch), en suivant l’algorithme BFS .

En espérant avoir apporté un brin de réponse.

Précision : sur un pc fixe perso, config moyenne, j’avais un débit d’en moyenne 60k urls traitées en 1h (sur deux sites). Je pense qu’il y a moyen de monter beaucoup plus un multipliant les instances de worker et les sites ciblés. J’ai fait ça sur un “petit projet” cependant (comparateur de prix avorté)

1 « J'aime »

@rikemsen merci pour ton retour, je suis en train d’aller vers une architecture micro-service comme toi afin de prendre le meilleurs de chaque outil (gestion de “queue”, crawl, etc.) :-)

Pierre

Human Coders - Le centre de formation recommandé par les développeur·se·s pour les développeur·se·s