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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby

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

Q&A

解決済

1回答

2265閲覧

rubyのnokogiriを用いてクローリングを行う

snoooopy

総合スコア10

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby

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

0グッド

0クリップ

投稿2016/09/08 02:02

rubyのnokogriを用いて、Amazonサイトにある本カテゴリーの部分から書籍情報だけをクローリングしたいと考えております。

形としては、

id title author image 0 コンビニ人間 村田 沙耶香 51+px9T8vNL._AC_US200_.jpg 1 陸王 池井戸 潤 515Olc9vuUL._AC_US200_.jpg 2 ... ...

というようにcsvファイルにしたいと考えています。

require 'open-uri' require 'nokogiri' require 'csv' url = 'https://www.amazon.co.jp/s/ref=lp_466284_nr_n_0?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A548206&bbn=466284&ie=UTF8&qid=1470908910&rnid=466284' charset = nil html = open(url) do |f| charset = f.charset f.read end doc = Nokogiri::HTML.parse(html, nil, charset) csv = "" table = doc.xpath('//table[@class="a-size-base a-color-null s-inline s-access-title a-text-normal"]') table.search('.//a[position()>1]').each do |a| arr = Array.new() a.search('.//h2').each do |h2| arr.push(h2.text) end csv << arr.to_csv end File.open('export2.csv', 'w') do |io| io.write csv end

プログラムはここまで書いてみたんですが、何かしらのエラーが出てしまい
xpathの取得の部分と、csvの部分の書き方があまり分かりません。
また、本カテゴリーの部分のクローリングを実現したいと考えています。

解決策をご教授いただけますと幸いです。
どうぞ宜しくお願いいたします

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

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

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

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

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

guest

回答1

0

ベストアンサー

プログラムはここまで書いてみたんですが、何かしらのエラーが出てしまい

エラーやバグを解決するまでがプログラミングなので、
まずエラー文をじっくり読んで、内容をしっかり把握しましょう。

とくに、クローラー開発はエラー処理がメインです。ネット越しに相手がいて、
相手がサイトやページをいじると即エラーですから、エラーが多い分野です。
Nokogiriがあるからコードは短いですが、エラー対応が大変なんです。

サイトの数だけエラーがあるし、運用期間中ずっとエラー対応が必要なので、
エラー文を読むのも面倒、といった感じでは長い目で見て続きません。
エラーが100回とか出るたびに質問してるとかえって大変になります。

しかも、サイト側にはクローラーはじつは目障りです。
客でもないのに負荷を増やすから。だから意図的に弾く場合があります。

サイト側の規約(Amazon側はAPIを推奨してるはず)や
図書館事件もあるので、トラブルを避けるためには慎重さが必要です。

なので、自力解決して欲しいのですが、でもまあヒントとしましては、
エラー文をエスパーすると、まずSSLのエラーで突っかかってそうです。

で、何とかそれを解決しても、次はたぶん503エラーになる。
こうしたエラーの原因の推測は難しいですが、クローラー運用に大事な能力です。


Rubyによるクローラー開発技法

学習の入口として、Rubyでクローラー開発するなら定番の良書があります。
Ruby、Nokogiri、Amazon、にも触れていますので、お勧めの本です。

投稿2016/09/08 10:52

LLman

総合スコア5592

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問