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

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

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

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

Q&A

解決済

3回答

2887閲覧

nokogiriを用いて行うスクレイピングに関して。

kaju

総合スコア11

Ruby

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

0グッド

0クリップ

投稿2016/11/22 09:52

スクレイピングはDOS攻撃にあたるそうですが、

nokogiriの場合

url = ~~~~~~~~ html = open(url, "r:binary").read doc = Nokogiri::HTML(html.toutf8, nil, 'utf-8')

とし、each文などでループした場合
1リクエストごとにsleepで停める処理を行う必要はあるのでしょうか?
docに代入された時点でリクエスト1回しているという認識で大丈夫ですか?

スクレイピング素人なものでよくわからなくて困ってます。
よろしくおねがいします。

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

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

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

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

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

guest

回答3

0

回答は既にありますが、

docに代入された時点でリクエスト1回しているという認識で大丈夫ですか?

という時点で、それぞれの行の意味を理解していないと言うことですよね。

自分が書いているプログラムの意味を理解できるまでは、ループしてのスクレイピングなどに手を出さない方が良いかと思います。

投稿2016/11/22 13:43

otn

総合スコア84538

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

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

kaju

2016/11/23 00:32

確かにおっしゃる通りですね。 もう少し勉強したいと思います。
guest

0

ベストアンサー

docに代入された時点でリクエスト1回しているという認識

Nokogiriはパーサで、リクエストしているのはopen(OpenURI)です。
OpenURIを使うときに、openメソッドを再定義しているはずです。


スクレイピングはDOS攻撃にあたるそうですが

両者はイコールではありませんが、
過度なスクレイピングが攻撃と見なされる場合はあります。

となると、「過度」の目安は何か、という話になってきます。
これは法律ではなくて、自主的で慣習的な規約に過ぎませんが、
1秒ルール」というのが一番有名だと思います。

クローラーが同じサイトに連続してアクセスするのは、
1度につき1秒以上の間隔を空ける、というルールです。
分かりやすいし、私も推奨したいルールです。

さらに、「robots.txt」を読んで、クローラー禁止サイトでは、
クローリングを避けるルールも同時に推奨したいです。
絶対訴えられないという保証はありませんが、そのようにすればより安全でしょう。


1リクエストごとにsleepで停める処理を行う必要

私の場合は、1リクエストごとに、1秒以上確実にスリープを入れています。

もしかすると、「それだとムダな待機時間が生じるのではないか」、
という疑問がおありになるかもしれませんね。

しかし、時間を計測するなどして、その余分を厳密に詰めていくより、
たとえば複数サイトに分散アクセスした方が、はるかに効率的になると思うので、
私はそこまで詰め込んでいません。むしろ2~3秒待つとか、より余裕を持たせています。

投稿2016/11/22 12:46

LLman

総合スコア5592

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

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

kaju

2016/11/23 00:32

とてもわかりやすかったです。参考にさせて頂きます! ありがとうございました!!
guest

0

ざっと調べただけですが、
NokogiriはHTMLを解析するためのもので、
リクエストを投げるものではありません。

今回のソースの場合、
open()のタイミングで1リクエストされています。

1リクエストごとにsleepで停める処理を行う必要はあるのでしょうか?

1リクエストごとにsleepしようが、相手がDOSアタックだと認識すれば、対応を取られてしまいます。
例えばIPの遮断や、威力業務妨害での通報などです。

通報された後は、法律的には具体的な値は決まっていないので、
判例やサーバの状況、公共性、その他諸々から判断されて、
その行為が犯罪であるか判断されることでしょう。

投稿2016/11/22 10:43

tanat

総合スコア18713

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

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

kaju

2016/11/23 00:31

詳しく説明してくださり、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問