1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RubyでNokogiriを使ってスクレイピングを行う

Last updated at Posted at 2019-10-02

Nokogiriを使って、スクレイピングしてcsvに吐き出す方法

##cssを使って指定

row.css('#normalResultsBox')        #ID
row.css('.normalResultsBox')        #クラス
row.css('h4>a').text,            #階層
row.css('p')[1].text            #2番目要素


row.css('a').attribute('href').value    #タグ内の要素を取得
row.css('a').gsub('aaaa','')       #置換する
row.css('a').split(".")[0]        #区切って1番目を取得


###Rubyプログラミング

test.rb
#住所という文字列が存在するかどうか
if row.css('p')[0].text.include?("住所")
 #存在する
else
 #存在しない
end

##urlからスクレイピング

noko.rb
require 'nokogiri'
require 'open-uri'
require 'csv'

#ヘッダーの書き込み
CSV.open('noko.csv', 'w') do |csv|
  csv << ["title","url"] 
end


#スクレイピングするurlを列挙する
urls = [
    'url1',
    'url2'
    ]
  
#urlをループ処理  
urls.each {
  |url|
  charset = nil

  html = open(url) do |f|
      f.read
  end

  doc = Nokogiri::HTML.parse(html, nil, "CP932")

  #2時配列を宣言する
  arr = Array.new
  
  doc.css('.normalResultsBox').each do |row|
      arr << [
        row.css('h4>a').text,                 #タイトル
        row.css("a").attribute('href').value  #url 
      ]
  end

  # csvファイル形式で生成
  string_csv_format = CSV.generate do |data|
    arr.each do |line|
      data << line
    end
  end

  # csvファイル書き出し方法1
  File.open("noko.csv", "a") do |f| 
    f.puts string_csv_format
  end
}

##textファイルを読み込んで、取り出す

noko2.rb
require 'nokogiri'
require 'csv'

#ヘッダーの書き込み
CSV.open('itown.csv', 'w') do |csv|
  csv << ["url","comment"] 
end


html = File.open("test1.txt") do |f|
    f.read
end

doc = Nokogiri::HTML.parse(html, nil, "CP932")

#2時配列を宣言する
arr = Array.new

 doc.css('.normalResultsBox').each do |row|
    arr << [
      row.css('h4>a').text,                                                       #社名
      row.css('p')[1].text.gsub('住所 ','').gsub('〒','').split(" ")[0],         #郵便番号
      row.css('p')[1].text.gsub(' 地図・ナビ','').split(" ")[1],                 #住所
      row.css('p')[2].css('b').text                                               #電話
    ]
end

# csvファイル形式で生成
string_csv_format = CSV.generate do |data|
  arr.each do |line|
    data << line
  end
end

# csvファイル書き出し方法1
File.open("itown.csv", "a") do |f| 
  f.puts string_csv_format
end

##実行する

$ruby noko.rb
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?