Je suis en train d'écrire le robot d'exploration omniprésente et se sont heurtées à certains problèmes. ~ Pas étonnant d'être un noob total chez Ruby.
J'utilise Nokogiri pour obtenir le code html d'une page. Retrouvez tous les liens qui m'intéressent, puis téléchargez les fichiers associés à ces liens. Tout va bien jusqu'ici.
Cependant, je ne semble pas pouvoir obtenir l'information dont j'ai besoin d'une seule méthode.
Si j'utilise file = open(Src).read
alors le fichier contient le contenu du fichier - ce qui est génial pour l'enregistrement dans une base de données et pour le hachage. Mais cela ne me donne pas un accès facile (pour autant que je l'ai trouvé) à des attributs tels que le nom de fichier, la taille, le type de fichier, etc.
Pour obtenir cette information, je me sers Mechanize comme ceci:
agent = Mechanize.new
fop = agent.get(Src)
En utilisant la méthode head agent.head, je peux obtenir le type de contenu, la date de dernière modification et la longueur du contenu. fop.filename
me donne le nom de fichier bien sûr. Maintenant, en utilisant la méthode agent.head(Src)["content-type"]
est, je pense que re-télécharger l'information pour les appels de type de contenu, dernière modification et contenu-longueur - il télécharge la tête 3 fois. Un gaspillage total, je dirais que le fichier contient déjà le fichier complet et fop devrait me fournir toutes les autres informations dont j'ai besoin sans appeler la tête.
est-il une meilleure façon donc de le faire (du téléchargeur ongle du pouce)
thumbs.each do |thumb|
imgSrc = thumb.css('.t_img').first['src']
file = open(imgSrc).read
agent = Mechanize.new
fop = agent.get(imgSrc)
p fop
puts "1 Driver : prowl.rb"
puts "1 Source : " + pageURL
puts "1 Title : " + thumb.css('.t_img').first['alt']
puts "1 File Source : " + imgSrc
puts "1 File Type : " + agent.head(imgSrc)["content-type"].to_s
puts "1 File Name : " + fop.filename
puts "1 Last Modified : " + agent.head(imgSrc)["last-modified"].to_s
puts "1 Image Size : " + agent.head(imgSrc)["content-length"].to_s
puts "1 MD5 : " + GetMD5(*[file.to_s])
puts "1 SHA256 : " + GetSha256(*[file.to_s])
end
La question est:
- Comment puis-je optimiser mon robot afin que je puisse obtenir tous l'information que je veux avec le nombre minimum de demandes? et,
Pourriez-vous stocker agent.head (imgSrc) dans une variable temporaire? –