讃岐小僧のEngineering×Techメモ

未経験から挑戦中のプログラミングや、趣味の野球や狩猟について、その他、ビジネスやテクノロジーをテーマに様々なことをつぶやく場所です。

【Ruby】Suumoの情報をRubyでスクレイプしたのでメモ

はじめに

久しぶりにRubyでスクレイプしたので書いた内容をメモしておきます。

まだまだ修行中のため、もっとこうしたらいいなど、コメントありましたらぜひ、アドバイスいただけると嬉しいです!

内容

  • 特定のSuumoのサイトを指定して、物件名と価格取得する
  • 取得した内容をCSVデータとして出力する

それでは下記コード

今回はMechanizeを利用しました。


require 'mechanize'
require 'CSV'

def get_stock_data(url)
  agent = Mechanize.new
  page = agent.get("#{url}")

  names = get_name(page)
  prices = get_price(page)
  create_data(names, prices)
end


def get_name(page) ## 物件名を取得する
  names = []
  stock_names = page.search('#js-bukkenList').search('.cassette_header').search('h2 a').children
  stock_names.each do |name|
    names << name.inner_text
  end
  return names
end


def get_price(page) ## 物件価格を取得する
  stock_prices = []
  prices = page.search('#js-bukkenList').search('.cassette_price').search('div').search('.cassette_price-accent').children
  prices.each do |price|
    stock_prices << price.inner_text.strip
  end
  return stock_prices
end


## 物件名と価格の配列を加工する
## 一番理解が薄いまま書いたので後で見直ししようと思っているところです
def create_data(names, prices)
 arr = names.zip(prices)
end



## CSVを作成する
## 引数の”w”が何かしっくりきていないです

def create_csv(stock_data)
  headers = ["物件名","販売価格"]
  rows = stock_data
  csv_data = CSV.open('stock_data.csv', 'w') do |csv|
    csv << headers
    rows.each do |row|
    csv << row
   end
  end
end


## 取得したいSuumoページのURLを入力する
url = "https://suumo.jp/jj/bukken/ichiran/JJ010FJ001/?ar=030&bs=010&ta=12&firstFlg=0&urlFlg=0&jspIdFlg=1&sc=12203&kb=1&kt=9999999&km=1&mb=0&mt=9999999&ekTjCd=&ekTjNm=&tj=0&srch_navi=1"

stock_data = get_stock_data(url)
create_csv(stock_data)