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

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

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

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

Ruby

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

1回答

2676閲覧

RubyのスクレイピングしたHTMLを文字列に変換する

urayam

総合スコア2

スクレイピング

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

Ruby

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/09/05 00:47

前提・実現したいこと

Rubyでライブラリを使わずにwebページからスクレイピングした値をハッシュに保存し配列にしたいのですがスクレイピングした値を文字列に変換する事ができません。

見本はこのようになっています

{"拠点名"=>"本社", "郵便番号"=>"〒106-6231", "住所"=>"東京都港区六本木3-2-1 六本木グランドタワー31F", "アクセス"=>"東京メトロ南北線「六本木一丁目」駅直結"} {"拠点名"=>"仙台オフィス", "郵便番号"=>"〒980-0013", "住所"=>"宮城県仙台市青葉区花京院1-1-10 あいおいニッセイ同和損保仙台ビル9F", "アクセス"=>"JR「仙台」駅、「あおば通」駅地下鉄南北線「広瀬通」駅"} {"拠点名"=>"新宿第2オフィス", "郵便番号"=>"〒151-0051", "住所"=>"東京都渋谷区千駄ヶ谷5-34-7 NEX新宿ビル10F", "アクセス"=>"JR、小田急線、京王線「新宿」駅東京メトロ丸ノ内線、副都心線、都営新宿線「新宿三丁目」駅"}...

発生している問題・エラーメッセージ

[{:拠点名=> ["<tr><th>\xE6\x8B\xA0\xE7\x82\xB9\xE5\x90\x8D</th><td>\xE6\x9C\xAC\xE7\xA4\xBE</td></tr><tr><th>\xE9\x83\xB5\xE4\xBE\xBF\xE7\x95\xAA\xE5\x8F\xB7</th><td>\xE3\x80\x92106-6231</td></tr><tr><th>\xE4\xBD\x8F\xE6\x89\x80</th><td>\xE6\x9D\xB1\xE4\xBA\xAC\xE9\x83\xBD\xE6\xB8\xAF\xE5\x8C\xBA\xE5\x85\xAD\xE6\x9C\xAC\xE6\x9C\xA83-2-1\xE3\x80\x80\xE5\x85\xAD\xE6\x9C\xAC\xE6\x9C\xA8\xE3\x82\xB0\xE3\x83\xA9\xE3\x83\xB3\xE3\x83\x89\xE3\x82\xBF\xE3\x83\xAF\xE3\x83\xBC31F</td></tr><tr><th>\xE3\x82\xA2\xE3\x82\xAF\xE3\x82\xBB\xE3\x82\xB9</th><td>\xE6\x9D\xB1\xE4\xBA\xAC\xE3\x83\xA1\xE3\x83\x88\xE3\x83\xAD\xE5\x8D\x97\xE5\x8C\x97\xE7\xB7\x9A\xE3\x80\x8C\xE5\x85\xAD\xE6\x9C\xAC\xE6\x9C\xA8\xE4\xB8\x80\xE4\xB8\x81\xE7\x9B\xAE\xE3\x80\x8D\xE9\xA7\x85\xE7\x9B\xB4\xE7\xB5\x90</td></tr>"], :郵便番号=> ["<tr><th>\xE6\x8B\xA0\xE7\x82\xB9\xE5\x90\x8D</th><td>\xE6\x9C\xAD\xE5\xB9\x8C\xE3\x82\xAA\xE3\x83\x95\xE3\x82\xA3\xE3\x82\xB9</td></tr><tr><th>\xE9\x83\xB5\xE4\xBE\xBF\xE7\x95\xAA\xE5\x8F\xB7</th><td>\xE3\x80\x92060-0001</td></tr><tr><th>\xE4\xBD\x8F\xE6\x89\x80</th><td>\xE5\x8C\x97\xE6\xB5\xB7\xE9\x81\x93\xE6\x9C\xAD\xE5\xB9\x8C\xE5\xB8\x82\xE4\xB8\xAD\xE5\xA4\xAE\xE5\x8C\xBA\xE5\x8C\x97\xEF\xBC\x91\xE6\x9D\xA1\xE8\xA5\xBF3-3\xE3\x80\x80\xE6\x9C\xAD\xE5\xB9\x8CMN\xE3\x83\x93\xE3\x83\xAB12F</td></tr><tr><th>\xE3\x82\xA2\xE3\x82\xAF\xE3\x82\xBB\xE3\x82\xB9</th><td>\xE5\x9C\xB0\xE4\xB8\x8B\xE9\x89\x84\xE5\x8D\x97\xE5\x8C\x97\xE7\xB7\x9A\xE3\x80\x8C\xE6\x9C\xAD\xE5\xB9\x8C\xE3\x80\x8D\xE9\xA7\x85<br>\xE5\x9C\xB0\xE4\xB8\x8B\xE9\x89\x84\xE6\x9D\xB1\xE8\xA5\xBF\xE7\xB7\x9A\xE3\x80\x8C\xE5\xA4\xA7\xE9\x80\x9A\xE3\x80\x8D\xE9\xA7\x85</td></tr>"], :住所=> ["<tr><th>\xE6\x8B\xA0\xE7\x82\xB9\xE5\x90\x8D</th><td>\xE4\xBB\x99\xE5\x8F\xB0\xE3\x82\xAA\xE3\x83\x95\xE3\x82\xA3\xE3\x82\xB9</td></tr><tr><th>\xE9\x83\xB5\xE4\xBE\xBF\xE7\x95\xAA\xE5\x8F\xB7</th><td>\xE3\x80\x92980-0013</td></tr><tr><th>\xE4\xBD\x8F\xE6\x89\x80</th><td>\xE5\xAE\xAE\xE5\x9F\x8E\xE7\x9C\x8C\xE4\xBB\x99\xE5\x8F\xB0\xE5\xB8\x82\xE9\x9D\x92\xE8\x91\x89\xE5\x8C\xBA\xE8\x8A\xB1\xE4\xBA\xAC\xE9\x99\xA21-1-10\xE3\x80\x80\xE3\x81\x82\xE3\x81\x84\xE3\x81\x8A\xE3\x81\x84\xE3\x83\x8B\xE3\x83\x83\xE3\x82\xBB\xE3\x82\xA4\xE5\x90\x8C\xE5\x92\x8C\xE6\x90\x8D\xE4\xBF\x9D\xE4\xBB\x99\xE5\x8F\xB0\xE3\x83\x93\xE3\x83\xAB9F</td></tr><tr><th>\xE3\x82\xA2\xE3\x82\xAF\xE3\x82\xBB\xE3\x82\xB9</th><td>JR\xE3\x80\x8C\xE4\xBB\x99\xE5\x8F\xB0\xE3\x80\x8D\xE9\xA7\x85\xE3\x80\x81\xE3\x80\x8C\xE3\x81\x82\xE3\x81\x8A\xE3\x81\xB0\xE9\x80\x9A\xE3\x80\x8D\xE9\xA7\x85<br>\xE5\x9C\xB0\xE4\xB8\x8B\xE9\x89\x84\xE5\x8D\x97\xE5\x8C\x97\xE7\xB7\x9A\xE3\x80\x8C\xE5\xBA\x83\xE7\x80\xAC\xE9\x80\x9A\xE3\x80\x8D\xE9\xA7\x85</td></tr>"], :アクセス=> ["<tr><th>\xE6\x8B\xA0\xE7\x82\xB9\xE5\x90\x8D</th><td>\xE6\x96\xB0\xE5\xAE\xBF\xE3\x82\xAA\xE3\x83\x95\xE3\x82\xA3\xE3\x82\xB9</td></tr><tr><th>\xE9\x83\xB5\xE4\xBE\xBF\xE7\x95\xAA\xE5\x8F\xB7</th><td>\xE3\x80\x92151-0051</td></tr><tr><th>\xE4\xBD\x8F\xE6\x89\x80</th><td>\xE6\x9D\xB1\xE4\xBA\xAC\xE9\x83\xBD\xE6\xB8\x8B\xE8\xB0\xB7\xE5\x8C\xBA\xE5\x8D\x83\xE9\xA7\x84\xE3\x83\xB6\xE8\xB0\xB75-33-8\xE3\x80\x80SOUTHGATE\xE6\x96\xB0\xE5\xAE\xBF8F</td></tr><tr><th>\xE3\x82\xA2\xE3\x82\xAF\xE3\x82\xBB\xE3\x82\xB9</th><td>\xEF\xBC\xAA\xEF\xBC\xB2\xE3\x80\x81\xE5\xB0\x8F\xE7\x94\xB0\xE6\x80\xA5\xE7\xB7\x9A\xE3\x80\x81\xE4\xBA\xAC\xE7\x8E\x8B\xE7\xB7\x9A\xE3\x80\x8C\xE6\x96\xB0\xE5\xAE\xBF\xE3\x80\x8D\xE9\xA7\x85<br>\xE6\x9D\xB1\xE4\xBA\xAC\xE3\x83\xA1\xE3\x83\x88\xE3\x83\xAD\xE4\xB8\xB8\xE3\x83\x8E\xE5\x86\x85\xE7\xB7\x9A\xE3\x80\x81\xE5\x89\xAF\xE9\x83\xBD\xE5\xBF\x83\xE7\xB7\x9A\xE3\x80\x81\xE9\x83\xBD\xE5\x96\xB6\xE6\x96\xB0\xE5\xAE\xBF\xE7\xB7\x9A\xE3\x80\x8C\xE6\x96\xB0\xE5\xAE\xBF\xE4\xB8\x89\xE4\xB8\x81\xE7\x9B\xAE\xE3\x80\x8D\xE9\xA7\x85</td></tr>"]}]

該当のソースコード

Ruby

1require "uri" 2require "net/http" 3 4url = URI("https://www.dip-net.co.jp/company/access") 5 6 7https = Net::HTTP.new(url.host, url.port); 8https.use_ssl = true 9 10request = Net::HTTP::Get.new(url) 11 12response = https.request(request) 13html = response.read_body 14 15#puts html 16 17tbodies = html.scan(/<table>(.+?)</table>/m) #/<table>.?</table>/m 18 19table = [] 20 21address_texts = tbodies.index('td') 22 23tbodies.each_slice(4) do |office, postal_code, address, description| 24 hash = { 25 "拠点名": office, 26 "郵便番号": postal_code, 27 "住所": address, 28 "アクセス": description 29 } 30 table << hash 31end 32 33pp table.first(3)

試したこと

指定しているcssのコードを入れ替える

調べたURL
qiita,ハッシュに関して,0からスクレイピングを作る

補足情報(FW/ツールのバージョンなど)

Ruby ver 2.7.1

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

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

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

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

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

guest

回答1

0

スクレイピングした値を文字列に変換する事ができません。

スクレイピングしたデータはもともと文字列ですけど???

発生している問題

エンコーディングがおかしいので直したいと言うこと?
force_encoding("utf-8")すればいいかと思います。

投稿2020/09/05 01:25

otn

総合スコア85901

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

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

urayam

2020/09/05 02:19

tbodiesにforce_encodingをしても上手くいかないのですが何が間違っているのでしょうか?
otn

2020/09/05 02:40

> 上手くいかない 具体的にどうぞ。
urayam

2020/09/05 07:01 編集

tbodies1 = tbodies.force_encording としたのですが。 エラーコードで undefined method `force_encoding' for #<Array:0x00007fcfa88340d0> (NoMethodError) と出てしまいます。
otn

2020/09/05 09:14

force_encodingとは何なのか調べましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問