2010-10-18 5 views
2

J'ai un petit script de balayage/balayage d'écran qui fonctionnait il y a un demi-an, mais maintenant, ça ne marche plus. J'ai vérifié les valeurs html et css pour l'expression reg dans la source de la page, mais ils sont toujours les mêmes, donc de ce point de vue, cela devrait fonctionner. Des suppositions?Problèmes dans un script de grattage à l'écran de ruby ​​

require "open-uri" 

# output file 
f = open 'results.csv', 'w+' 

# output string 
results = "" 

begin 

    # crawl first 20 pages 
    for i in (1..20) 
    open("http://www.example-#{i}.com") {|url| 

     # check each line using regular expression 
     url.each_line { |line| 
     if line =~ /class=\"L1g\" onclick=\"s_objectID=\'foobar\'\">([^<]+)<\/a><\/h3><\/li>/ 
      # if regular expression matches then add to results 
      results += $1 + "\n" 
     end 
     } 
    } 
    end 
ensure 
    # write to and close file 
    f.print results 
    f.close 
end 
+0

Où dites-vous que cela ne fonctionne pas, que se passe-t-il? – mikej

+0

+1 pour rompre la syntaxe de Stack Overflow. Quel message d'exception produit-il? Aussi, avez-vous essayé les approches de débogage mentionnées dans [Comment déboguer les scripts ruby?] (Http://stackoverflow.com/questions/3955688/how-do-i-debug-ruby-scripts) –

+0

Donc la page est la comme toujours, et cela a fonctionné dans le passé. Avez-vous actualisé Ruby? – Sirupsen

Répondre

0

Le site Web cible semble avoir modifié la structure de leur page afin que votre Regex ne corresponde plus.

Ceci est un bon exemple de pourquoi vous ne devriez pas récurer des pages en utilisant Regex pour faire correspondre le contenu. Essayez de retravailler votre script en utilisant un analyseur DOM comme Nokogiri. Cela n'empêchera pas forcément votre script de se rompre mais lui permettra au moins de survivre à des changements mineurs.

La raison pour laquelle il ne fonctionne pas peut être vu dans ce lien Rubular

+0

Lien HTML obligatoires et expressions régulières: [RegEx correspond à des balises ouvertes à l'exception des balises autonomes XHTML] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained -tags) –

+0

Merci pour la réponse! Je vais essayer de réparer ça avec Nokogiri ... – hebe

+0

@Andre Grimm: le lien des expressions régulières est génial ... – hebe

0

Une autre option pour racler Web est iMacros. Ces scripts sont très faciles à adapter aux modifications du site.

Questions connexes