RUBY (Errno::ENOENT),没有这样的文件或目录@dir_s_mkdir

标签 ruby web-crawler mkdir

我正在关注“The Bastards Book of Ruby”,我正在尝试使用 nokogiri 构建一个网络爬虫,但是当我尝试运行它抛出错误的代码时,大约进行了四分之一:

Crawler.rb:6:in `mkdir': No such file or directory @ dir_s_mkdir - data-hold/nobel (Errno::ENOENT)
from Crawler.rb:6:in `<main>'

我的代码如下:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

DATA_DIR = "data-hold/nobel"
Dir.mkdir(DATA_DIR) unless File.exists?(DATA_DIR)

BASE_WIKIPEDIA_URL = "http://en.wikipedia.org"
LIST_URL = "#{BASE_WIKIPEDIA_URL}/wiki/List_of_Nobel_laureates"

HEADERS_HASH = {"User-Agent" => "Ruby/#{RUBY_VERSION}"}

page = Nokogiri::HTML(open(LIST_URL))
rows = page.css('div.mw-content-ltr table.wikitable tr')

rows[1..-2].each do |row|

  hrefs = row.css("td a").map{ |a| 
    a['href'] if a['href'] =~ /^\/wiki\// 
  }.compact.uniq

  hrefs.each do |href|
    remote_url = BASE_WIKIPEDIA_URL + href
    local_fname = "#{DATA_DIR}/#{File.basename(href)}.html"
    unless File.exists?(local_fname)
      puts "Fetching #{remote_url}..."
      begin
        wiki_content = open(remote_url, HEADERS_HASH).read
      rescue Exception=>e
        puts "Error: #{e}"
        sleep 5
      else
        File.open(local_fname, 'w'){|file| file.write(wiki_content)}
        puts "\t...Success, saved to #{local_fname}"
      ensure
        sleep 1.0 + rand
      end  # done: begin/rescue
    end # done: unless File.exists?

  end # done: hrefs.each
end # done: rows.each

我真的不知道为什么它不创建一个新目录来存储数据。我知道我一定是遗漏了一些非常简单的东西......

最佳答案

我最好的猜测是不仅“data-hold/nobel”不存在,“data-hold/”也不存在。由于 mkdir 不会递归创建您要创建的目录的所有父目录,因此会引发错误。

要解决此问题,您可以使用 FileUtils.mkdir_p ,它会创建所有父目录。

在使用 mkdir_p 之前一定要include fileutils

关于RUBY (Errno::ENOENT),没有这样的文件或目录@dir_s_mkdir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32675539/

相关文章:

c# - 基于 .Net 的网络爬虫示例

java - 安卓:m​​kdir() 失败:ENOENT(没有那个文件或目录)

linux - 检查命令是否在 bash 中的 if 中执行

ruby - 如何在ruby中将字符串转换为日期对象

Ruby 循环样式/约定

ruby-on-rails - 从 ActiveRecord 对象中提取两个属性的快捷方式?

java - Gnocchi爬虫-如何在爬行过程中添加要爬行的url(爬行整个网站)

colors - 谷歌如何识别文字颜色和背景?

xml - 无法在输入目录中复制.xml文件?

ruby-on-rails - 安装 Ruby Gems 时遇到问题?