首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Ruby 入門筆記 (一):環境建置與圖片爬蟲實戰

     編輯:Java 相關知識

Ruby 以「程式設計師最好的朋友」著稱,語法自然、標準庫豐富。本文記錄 Windows 下安裝 Ruby、推薦 IDE (EasyEclipse for Ruby/Rails)、並以淘寶商品列表圖片批量下載為例,展示不足百行代碼完成「分頁遍歷 + 正則提取圖片 URL + 多執行緒下載」的強大表達力。

一、環境建置

  1. Ruby 安裝:官網下載 RubyInstaller (含 DevKit),一鍵安裝,自動配置 PATH
  2. IDE 推薦:
    • EasyEclipse for Ruby and Rails:整合好插件的 Eclipse 發布版,開箱即用
    • 或 Eclipse + DLTK (Dynamic Languages Toolkit) + RDT/RadRails 插件
    • VS Code + Ruby 擴充套件 (現代輕量首選)

二、核心工具模組 (util.rb)


require 'net/http'
require 'open-uri'

# 獲取網頁原始碼
def query_url(url)
  Net::HTTP.get(URI.parse(url))
end

# 下載檔案至指定目錄
def save_url(url, dir, filename = nil)
  filename ||= url[url.rindex('/')+1..-1] # 取 URL 最後段作檔名
  Dir.mkdir(dir) unless File.exist?(dir)  # 確保目錄存在

  open(url) do |fin|
    File.open(File.join(dir, filename), "wb") do |fout|
      while chunk = fin.read(1024)
        fout.write(chunk)
      end
    end
  end
end

三、淘寶商品列表圖片爬蟲主程式


require_relative 'util'

start_url = 'https://list.mall.taobao.com/1424/g-d-----40-0--1424.htm'

while start_url && !start_url.empty?
  puts "開始下載頁面: #{start_url}"
  content = query_url(start_url)

  # 1. 提取下一頁連結
  next_page = content.scan(/下一頁<\/span><\/a>/)
  start_url = (next_page[0] && next_page[0][0]) ? next_page[0][0] : nil

  # 2. 提取所有圖片 URL (img.src 以 https://img[數字]. 開頭)
  imgs = content.scan(//)
  imgs.each do |img_arr|
    url = img_arr[0]
    save_url(url, "d:\\mall\\")
    print "." # 進度指示
  end
  puts
  
  # break # 測試時可取消註解僅跑第一頁
end
puts "全部下載完成!"

四、關鍵技術點

  • open-uri:將 HTTP/HTTPS/FTP 封裝為類 IO 物件,支援 `open(url) { |f| ... }` 區塊語法
  • 正則提取:`String#scan` 回傳所有匹配陣列,配合捕獲組直接取值
  • 檔案流處理:`read(1024)` 分塊讀寫,避免大檔案佔滿記憶體
  • 編碼處理:Ruby 1.9+ 預設 UTF-8,中文路徑/檔名無需額外轉碼

五、一日上手心得

  • 語法極接近自然語言 (`unless`, `do |x| ... end`, `arr.each { ... }`)
  • 標準庫「電池內含」:網路、壓縮、JSON、YAML、CSV、日期時間、OpenSSL 皆內建
  • 適合腳本自動化、原型快速驗證、中小型 Web 應用 (Rails/Sinatra)
  • 效能敏感場景可用 JRuby (JVM) 或撰寫 C 擴展
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved