質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

0回答

489閲覧

Ruby docker環境でクローラーが動くことを確認したい

masaosan18

総合スコア65

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/10/14 02:00

やりたいこと

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

詳しい方、教えてください。宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inductor

2020/10/14 09:58

Docker Composeのログには何も実行結果は無いでしょうか? アプリケーションログを出すようにしてデバッグするのが確実のように思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問