■分からないこと
複数ページからのスクレイピングのやり方を教えていただきたいです。
下記の2つのコードで「list_1」がベースになり、会社名を紐づけて「list_2」のEmailを取得したいと思っています。
list_2のURLの"https://job.rikunabi.com/2019/company/r294900083/"の最後の「r + 9桁数字」もランダムな数字になっているので、そこをどう書いていいのかも分かりません。
よろしくお願い致します。
■list_1
ruby
1require 'open-uri' 2require 'nokogiri' 3require 'csv' 4require 'byebug' 5 6def get_data(uri, companies) 7 html = open(uri).read 8 documents = Nokogiri::HTML(html) 9 documents.xpath("//a[@class='ts-h-search-cassetteTitleMain js-h-search-cassetteTitleMain']").each {|n| companies << n.text.strip} 10 return companies 11end 12 13def main() 14 uri = "https://job.rikunabi.com/2019/s/__13_0_______/" 15 puts "What is the page? " 16 page = gets.to_i 17 18 companies = [] 19 data = get_data(uri,companies) 20 (2..page).to_a.each do |idx| 21 uri = "https://job.rikunabi.com/2019/s/__13_0_______/?moduleCd=2&isc=ps054&pn=#{idx}" 22 data = get_data(uri,companies) 23 end 24 25 len = [companies.size].min - 1 26 27 headers = ["会社名"] 28 time = Time.new.strftime("%Y-%m-%d") 29 CSV.open("rikunabi_tokyo_2019-#{time}.csv", "a",headers: headers, write_headers: true) do |csv| 30 (0..len).to_a.each do |idx| 31 csv_column_values = [companies[idx]] 32 csv << csv_column_values 33 end 34 end 35end 36 37if __FILE__ == $0 38 puts("Process Start") 39 main() 40 puts("Process Finished") 41end
■list_2
ruby
1require 'open-uri' 2require 'nokogiri' 3require 'csv' 4require 'byebug' 5require 'kconv' 6 7def get_data(uri, data) 8 companies = data[0] 9 parameters = data[1] 10 html = open(uri).read 11 documents = Nokogiri::HTML(html.toutf8, nil, 'utf-8') 12 companies << documents.xpath("//h1[@class='ts-h-company-mainTitle']").text 13 parameters << documents.xpath("//div[@class='ts-h-company-sentence']")[1].text.strip.gsub(/(\r)/, " ") 14 return [companies, parameters] 15end 16 17def main() 18 uri = "https://job.rikunabi.com/2019/company/r294900083/" 19 puts "What is the page? " 20 page = gets.to_i 21 22 companies = [] 23 parameters = [] 24 data = [companies, parameters] 25 data = get_data(uri,data) 26 (2..page).to_a.each do |idx| 27 uri = "https://job.rikunabi.com/2019/company/r294900083/" 28 data = get_data(uri,data) 29 end 30 31 len = [companies.size,parameters.size].min - 1 32 33 headers = ["会社名","Email"] 34 time = Time.new.strftime("%Y-%m-%d") 35 CSV.open("rikunabi_tokyo_2019-#{time}.csv", "a",headers: headers, write_headers: true) do |csv| 36 (0..len).to_a.each do |idx| 37 csv_column_values = [companies[idx], parameters[idx]] 38 csv << csv_column_values 39 end 40 end 41end 42 43if __FILE__ == $0 44 puts("Process Start") 45 main() 46 puts("Process Finished") 47end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/06 01:16