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