Le post est un peu vieux mais bon ........pour utiliser xpath , il faut étudier pour chaque page  toutes les options visible ( texte image) ou invisible (  valeurs des id class) et  parser en fonction de chaque cas . Le premier item est détecté par  la valeur de class ".sr_item"  ( csspar ser) .. Si le contenu change selon les pages il faut tester le retour de la valeur de xpath avant d'extraire la valeur . ici  la page  montre  15 valeurs  count(/html/*/*/*/*/*/*/*/*/*/*/div[contains(@class, 'sr_item')])  a parser . pour chaque item on extrait les sous items.  regexp  peut être mixer avec  xpath si le contenu contient des items identiques . 
A première vues sans voir le xpath je me demande si celui ci n 'aurait pas des sélecteurs trop spécifique concernant le prix a extraire . il faut tester l expression xpath en manuel sur plusieurs pages . 
Il faut que l environnement qui parse soit reconnu comme ayant les fonctionnalités qu'un  navigateur web (support http ,  gestion des cookies ,  javascript ) 
Ai déja fait ça en python avec  
http://4suite.org/   et regexp avec requête dynamique et sauvegarde dans  une table mysql . Beaucoups de travail mais maintenant un mix selenium et javascript devrait faire cela  ( il doit y  avoir un  debut de post sur alsa chercher RSS jsonp ) . 
 
  
  
NB
nb pour empécher de parser les données  , les sites ne montrent certaines informations qu'après un click de souris sur une zone spécifique (ici le prix !!) après  c 'est le jeux du chat et de la souris . En effet , le webmaster du sites  consulte le fichier de log du serveur pour identifier des  requêtes étrange ( strange user agent name ) . Les données valant de l'or.... peu de  sites laisseraient un robot extraire leurs données. Ils amélioraient leur système en utilisant technique http,html/css et javascript  ou autres astuces comme modifier la structure des données . Ici booking.com utilise span pour simuler un boutton et le click entraine une requête sur le server pour afficher une nouvelle page qui elle afiche le prix .Le prix  s affiche [que si l on  clique sur l item prix ( 1ere page ) ] dans la deuxième page . Dans cette 2eme page  le prix "apparait"  dans une table ( <table>) contenant des champs vide ou se trouveront les données ajouté par javascript .En  effet le prix ne s affiche que si la partie prix ( graphique) est visible sur la page . Une fois visible ; si le prix disparait du  au scroll de la souris alors le prix reste visible dans le code source  . Le script aurait pu inverser les choses et le faire disparaitre  à nouveau le prix en dehors de la zone de visibilité du navigateur ( mix selecteur dynamique et css) . Il semble que l apparition n'es tqu un effet visuel car la valeur recherché est dans le code source html  au bon emplacement.L'information aurait pu être absente et ajouté dynamiquement par code javascript lors du scroll .  Sur cette page on retrouve  bien la table de votre capture . Sur le prix qui s affiche  il y a aussi un menu associé . Le prix se trouve  dans <span class="strike-it-red_anim">
<span id="b_tt_holder_2" class="toggle_price_per_night_or_stay anim_rack_rate_rr read-easy rackrate mouse_hover_general_rackrate mouse_hover_rackrate jq_tooltip" style="cursor:help;" "="" rel="400" data-toponly="1" data-title=" texte">€ 185</span>
".rackrate" en css  est le prix barré 
".anim_rack_rate" en css est le prix que vous recherché 
un fichier css dynamique contient .anim_rack_rate b {    visibility: hidden;} qui 
visible par  .animated .anim_rack_rate b {    visibility: visible;} . Il y a donc ajout d un selecteur de nom animated ( voir capture) . Il me semble que le prix  est déja présent dans le code html mais que le code html est généré dynamiquement coté client . certains code javascript utlisent des variables a 1/2 caractères ( obfuscator ?)   
sinon l info  du prix ( plusieurs items ) semble se trouver  dans le code source javascript au niveau de  
<script id="booking-script-maps-google" type="text/javascript"> booking.loadCurrentHotels = function() {  }
chaque item vaut 
hotels.push({ "gc": false, 
"b_id" : 51765, 
"b_main_photo" : 'http://q-ec.bstatic.com/images/hotel/square60/561/561477.jpg', 
"b_description" : "Situé à seulement 5 minutes à pied de l\'opéra Garnier et de la Madeleine, le Saint-Pétersbourg Opéra vous propose des chambres climatisées et une réception ouverte 24h/24. ",
 "b_name" : "Saint-Petersbourg Opera", 
"b_latitude" : 48.87215141747105, 
"b_longitude" : 2.3281198740005493, 
"b_class" : 3, 
"b_class_is_estimated": "0", 
"b_url" : "/hotel/fr/saintpetersbourg.fr.html?aid=397596;label=gog235jc-index-fr-XX- XX-unspec-fr-com-L%3Afr-O%3Aunk-B%3Aunk-N%3AXX-S%3Abo;
   sid=a0171665a7b3d61d70b00ec571b04473;
  dcid=4;
  checkin=2015-03-16;checkout=2015-03-17;ucfs=1; 
  srfid=8798c463699c7ba6aaf49d5b3a11b2d241d64559X1" ,
"prices" : [ { "room_price" : "€ 180", "room_persons" : "2" } , { "room_price" : "€ 189", "room_persons" : "2" } , { "room_price" : "€ 231", "room_persons" : "3" } , { "room_price" : "€ 245", "room_persons" : "2" } , { "room_price" : "€ 258", "room_persons" : "2" } ] ,
"b_has_genius_rates" : !!(parseInt('0',10)) }); 
nombre chargé / visible est  .sr_item/ .animated. mais lesv aleurs semble présetne dans larbre html mais seulement pas visible.
NB changer regulièrement 
a) d IP ( vpn ?) 
b) de http-header ( mappping proxy ? 
sinon j ai utiliser la syntaxe de  selection css dans mes réponses a convertir en expression de sélection xpath  si vous allez dans cette voie ......
Voila un début d 'idée ... rien n'est facile ....mais on apprend beaucoups  ..... 
Modifié par 75lionel (07 Mar 2015 - 10:21)