Скрипт, который сохраняет серию страниц, затем пытается объединить их, но объединяет только одну? - PullRequest
0 голосов
/ 13 февраля 2012

Вот мой код ..

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.

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

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

1 Ответ

2 голосов
/ 13 февраля 2012

Вы выбрали неправильный режим при открытии файла сводки. "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
...