2012-02-12 1 views
0

Voici mon code ..Script qui enregistre une série de pages, puis essaie de les combiner, mais n'en combine qu'un seul?

require "open-uri" 

base_url = "http://en.wikipedia.org/wiki" 

(1..5).each do |x| 
    # sets up the url 
    full_url = base_url + "/" + x.to_s 
    # reads the url 
    read_page = open(full_url).read 
    # saves the contents to a file and closes it 
    local_file = "my_copy_of-" + x.to_s + ".html" 
    file = open(local_file,"w") 
    file.write(read_page) 
    file.close 

    # open a file to store all entrys in 

    combined_numbers = open("numbers.html", "w") 

    entrys = open(local_file, "r") 

    combined_numbers.write(entrys.read) 

    entrys.close 
    combined_numbers.close 

end 

Comme vous pouvez le voir. Il racle fondamentalement le contenu des articles wikipedia 1 à 5 et tente ensuite de les combiner dans un seul fichier appelé numbers.html.

Il fait le premier bit juste. Mais quand il arrive à la seconde. Il semble seulement écrire dans le contenu du cinquième article dans la boucle.

Je ne peux pas voir où je vais mal si. De l'aide?

Répondre

2

Vous avez choisi le mauvais mode lors de l'ouverture de votre fichier récapitulatif. "w" écrase les fichiers existants tandis que "a" s'ajoute aux fichiers existants.

donc l'utiliser pour faire fonctionner votre code:

combined_numbers = open("numbers.html", "a") 

Sinon, à chaque passage de la boucle le contenu du fichier de numbers.html sont remplacées par l'article actuel.


D'ailleurs, je pense que vous devriez utiliser le contenu en read_page d'écrire à numbers.html au lieu de les relire depuis votre fichier fraîchement écrit:

require "open-uri" 

(1..5).each do |x| 
    # set up and read url 
    url = "http://en.wikipedia.org/wiki/#{x.to_s}" 
    article = open(url).read 

    # saves current article to a file 
    # (only possible with 1.9.x use open too if on 1.8.x) 
    IO.write("my_copy_of-#{x.to_s}.html", article) 

    # add current article to summary file 
    open("numbers.html", "a") do |f| 
    f.write(article) 
    end 
end 
Questions connexes