やりたいこと
docker環境でクローラーを動作させ、DBに情報を保存したい。
現状
現状は、docker環境ではないRailsアプリではDBへの保存が確認できた。
viewsで更新をかけると、更新するごとに表示数が増えていく。→記述が間違いではないことは確認できた。
ただ、docker環境でクローラーを動かそうとすると、確認ができない。
APIモードのため、JSONがどうなるか、もしくはrails cで確認したいができていない。
$ docker-compose exec api bin/rails runner lib/batch/crawler.rb $
コマンドを入力すると、何も反応なく、$になってしまう。
特にエラー文が出るわけではないので、何をすればいいのか不明です。
該当のコード
ruby
1require 'nokogiri' 2require 'anemone' 3require 'pry' 4require 'open-uri' 5 6URL = 'https://*******************' 7html = URI.encode_www_form_component(URL) 8 9area_urls = [] 10prefecture_urls = [] 11city_urls = [] 12 13Anemone.crawl(html, depth_limit: 0, delay: 3) do |anemone| 14 anemone.focus_crawl do |page| 15 page.links.keep_if do |link| 16 link.to_s.match(%r{***************/[0-9]{1,2}}) 17 end 18 page.links.each do |link| 19 area_urls << link 20 end 21 end 22end 23 24area_urls.each do |area| 25 Anemone.crawl(area, depth_limit: 0, delay: 3) do |anemone| 26 anemone.focus_crawl do |page| 27 page.links.keep_if do |link| 28 link.to_s.match(%r{*************/[0-9]{1,2}/[0-9]{5}}) 29 end 30 page.links.each do |link| 31 prefecture_urls << link 32 end 33 end 34 end 35 36 prefecture_urls.each do |prefecture| 37 Anemone.crawl(prefecture, depth_limit: 1, delay: 3, skip_query_strings: true) do |anemone| 38 anemone.focus_crawl do |page| 39 page.links.keep_if do |link| 40 link.to_s.match(%r{************/[0-9]{1,2}/[0-9]{5}/[0-9]}) 41 end 42 page.links.each do |link| 43 city_urls << link 44 end 45 end 46 47 anemone.on_every_page do |page| 48 url = page.url 49 html = open(url) 50 51 doc = Nokogiri::HTML.parse(html, nil, 'UTF-8') 52 53 name = doc.xpath('/html/body/div[4]/div/div[2]/div[1]/h1').text 54 postcode = doc.xpath('/html/body/div[4]/div/div[2]/table[1]/tbody/tr[3]/td/text()[1]').text 55 address = doc.xpath('/html/body/div[4]/div/div[2]/table[1]/tbody/tr[3]/td/text()[2]').text 56 tel = doc.xpath('/html/body/div[4]/div/div[2]/table[1]/tbody/tr[4]/td').text 57 fax = doc.xpath('/html/body/div[4]/div/div[2]/table[1]/tbody/tr[5]/td').text 58 staff_number = doc.xpath('/html/body/div[4]/div/div[2]/table[4]/tbody/tr[1]/td/p').text 59 company = doc.xpath('/html/body/div[4]/div/div[2]/table[5]/tbody/tr[2]/td').text 60 office_url = doc.xpath('/html/body/div[4]/div/div[2]/table[1]/tbody/tr[6]/td/a').text 61 62 offices = Office.new(name: name, 63 postcode: postcode, 64 tel: tel, fax: fax, 65 address: address, 66 staff_number: staff_number, 67 company: company, 68 url: office_url) 69 offices.save(validate: false) 70 end 71 end 72 end 73end 74
詳しい方、教えてください。宜しくお願い致します。
あなたの回答
tips
プレビュー