2009-10-30 5 views
1

J'ai joué avec HPricot, mais après une bonne partie de la recherche, je n'ai pas réussi à résoudre ce problème. J'essaie d'analyser une page HTML et de trouver toutes les balises avec un href dans un fichier mp3. Jusqu'à présent, j'aiRecherche de fichiers liés avec HPricot

<ul> 
    <% @page.search('//a[@href*=mp3]').each do |link| %>  
     <li> 
      <%= link.inner_text %> 
     </li> 
    <% end %> 
</ul> 

qui fonctionne très bien, et une expression régulière, /href\s*=\s*\"([^\"]+)(.mp3)/ qui fonctionne aussi. Je ne suis pas sûr de savoir comment combiner les deux.

Y a-t-il un bon exemple, ou une documentation que quelqu'un pourrait me désigner afin de déterminer ce que je peux faire avec la fonction .search.

Remerciements

+0

J'ai été capable de classer tous les liens vers des fichiers mp3 avec <% @ page.search ('// a [@href * =. Mp3]'). Each do | link | %>, mais je ne sais toujours pas comment isoler le href dans ce lien. –

Répondre

0

trouvé la réponse. la méthode est attributs, (non attr) et aussi, les crochets doivent être carrés. link.attributes['href']

1

Vous pouvez accéder à l'attribut href avec

link.attr ('href')

Comme sélecteur CSS3 vous pouvez envisager @href$=.mp3 (au lieu de *=) comme correspond uniquement aux attributs dont se termine dans .mp3.

Editer: Vous avez raison, désolé. J'ai découvert, que attr est seulement un alias pour set pour Hpricot::Elements. La bonne manière est en effet:

link.attributes['href'] 

Néanmoins je voudrais recommander Nokogiri comme faster substitute pour hpricot.

+0

merci andre-r, j'obtiens la méthode d'erreur non définie 'attr 'quand j'utilise cette méthode. J'ai inclus les gemmes HPricot et open-uri. Y a-t-il quelque chose qui me manque? –