2012-02-12 1 views
0

Вот мой код ..Сценарий, который сохраняет серию страниц, затем пытается их объединить, но только объединяет один?

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 

Как вы можете видеть. Он в основном разбирает содержимое статей с 1 по 5 в википедии, а затем пытается объединить их в один файл с именем numbers.html.

Это первый бит справа. Но когда он доберется до второго. Кажется, что писать в содержании пятой статьи в цикле.

Я не могу видеть, где я ошибаюсь. Любая помощь?

ответ

2

При открытии сводного файла вы выбрали неправильный mode. «w» перезаписывает существующие файлы, а «a» добавляет к существующим файлам.

Так что используйте это, чтобы получить свой код работать:

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

В противном случае при каждом проходе цикла в файл содержимого numbers.html перезаписывается текущей статьей.


Кроме того, я думаю, вы должны использовать содержимое в read_page написать numbers.html вместо чтения их обратно с вашего недавно написанного файла:

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