Quelle techno pour faire du web scraping ?

Bonjour,

Quel outil/langage conseilleriez-vous pour faire du web scraping rapide et efficace ?

1 « J'aime »

J’ai utilisé Scrapy (Python 2) récemment, ce framework est génial tant la mise en place est rapide.
Mon besoin était simple (extraire le contenu de balises portant une classe CSS particulière dans toutes les pages d’une sitemap) et c’était réglé en quelques lignes de code, la documentation est bien faite.

2 « J'aime »

En Ruby j’utilise le Nokogiri gem, très efficace.
Lorsque la structure du site est complexe j’utilise l’extension Chrome de Kimono pour identifier les common patterns/css selectors qui m’intéressent.

Demo :

Après avoir rajouté gem 'nokogiri' et fait tourner bundle install, créer une rake task (sur Rails créer un fichier: /lib/tasks/scrape.rake).
Par exemple pour récupérer tous les sujets de discussion de Human Coders (NB: je ne fais pas ça généralement, mais la démo me paraissait intéressante!):

namespace :scrape_human_coders do 
  desc "Scraping list of topics"
  task :get_topics => :environment do
    
    require 'open-uri'
    require 'nokogiri'

    url = "https://forum.humancoders.com/"
    document = open(url).read
    html_doc = Nokogiri::HTML(document)

    topics_format = "#main-outlet .topic-list a"

    html_doc.css(topics_format).each_with_index do |topic, index|
      if topic['href'][1] == "t"
        puts topic.text
      end
    end
  end
end

Ensuite il suffit de taper ’ rake scrape_human_coders:get_topics ’ et d’observer le résultat. Pour les sauver il suffit de remplacer la ligne puts par Topic.create(:title => topic.text)

3 « J'aime »

L’an dernier j’utilisais node.io pour nodeJS mais il n’est plus maintenu.

Entretemps j’ai trouvé ceci qui marche bien.et basé sur Cheerio :
https://scotch.io/tutorials/scraping-the-web-with-node-js

Je travaille chez Import.io qui propose une solution de scraping gratuite.
Si tu as une question, je suis dispo :)

2 « J'aime »

J’ai plusieurs fois utilisé Goutte et j’ai toujours réussi à récupérer ce que je voulais

Je pense que le principal critère de choix c’est tes besoins en terme de perf (volume de page à scrapper) :

Si c’est des petits volumes (quelques pages par secondes ou moins) :

  • Python est le mieux outillé avec Scrappy
  • Perso j’utilise Ruby+Mechanize+Nokogiri, ça marche très bien.

Si t’as des gros besoins et que multi-threader + distribuer ton scrapper ne suffit plus : apparement Go ça tabasse bien niveau perf pour du scrapping : http://blog.efounders.co/how-mentions-cto-has-built-a-scalable-product-that-handles-terabytes-of-data-and-crawls-the-web-in-real-time/

En Python j’utilise Requests + PyQuery.

Je ne connaissais pas Scrappy, je testerai la prochaine fois.

Je confirme l’extrême efficacité de Scrapy !

Salut,

Super example, merci!
J’ai une question qui s’eloigne un peu du sujet: est-il recommande de mettre du code directement dans les taches de rake ou faut-il plutot appeler des fonctions externes du fichier?

Merci

Salut,

J’utilise principalement Python donc Scrapy, Lxml, BeautifulSoup, PyQuery.
Très rarement, j’ai dû utilisé Mechanize pour faire des manipulations en étant authentifié. J’ai entendu parlé de Twill, une API pour simplifier l’usage de Mechanize.

Dès qu’il s’agit de code HTML généré par du JavaScript, j’utilise Casper.Js (Wrapper Python pour PhantomJS, SlimerJS, navigateurs “headless” basés sur Webkit et Gecko) ou Ghost.py (basé sur PyQt et Webkit).

en PHP5 / SF2 j’utilise DomCrawler : les sélecteurs jQuery implémentés pour PHP.
Marche au top.

En Java http://htmlunit.sourceforge.net/

Pour ce qui est des pages qui utilisent un framework JS, et ou il n’est pas possible de récupérer ce qui nous intérésse via l’API du site en question, selenium avec le wrapper phantomJS !

1 « J'aime »

Hop ptit forward d’un @HumanTalks à propos :
ArtooJS le webscraper client-side

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