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

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

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

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

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

4328閲覧

WEBスクレイピングでログインが必要なサイトの場合どのような方法がありますか?

standard-soft

総合スコア197

スクレイピング

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

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

7クリップ

投稿2017/10/15 04:44

こんにちは。

Webスクレイピング(データダウンロード)についての質問があります。

スクレイピングを、
GoogleSpreadSheet の GAS あるいは
Windows Excel VBA での IE コントロール
によって、何回か行ったことがあります。

GoogleSpreadSheet の GAS はWebで動くので
Mac環境などのユーザーでも動くため便利なのですが

あるWEBショップのデータダウンロードなどのときに
ログインが必要になる場合があります。

そうすると、普通のURL指定したダウンロードだけではなくなります。

Excel の IE 操作の場合は、
ブラウザの入力欄に文字を埋め込み
特定のボタンを押し、そして、データダウンロード
という操作ができるものの、

GoogleSpreadSheet の GAS では、
そのような操作ができるのかどうかわからず、困っています。

やり方をご存知の方、おられましたら
教えていただけると助かります。

自分の書いた記事ですが、GASでの通常のスクレイピングはこの内容のようにやっています。
Google SpreadSheet のGAS(JavaScript)でスクレイピング(Webデータゲット) - Qiita

繰り返しになりますが、
ExcelVBAではそれはできるのですが、

GAS では、
ブラウザの入力欄に文字を埋め込み
特定のボタンを押し、そして、データダウンロード
という操作ができるものでしょうか?

また、
スプレッドシート使わない、node.jsを使ったJavaScriptや
Python Ruby PHP などでは、
そのようなブラウザ操作系のスクレイピングは
できるものでしょうか?

最初のとっかかりのやり方やテクニックサイトなどを教えていただけましたら助かります。
よろしくおねがいします。

Windows の Excel ではできるのですが
IEを操作するというやや不安定な動作になることと
IEの将来性などを考えると、違う方法を模索したいと思っております。

GoogleChrome の非表示モードと
Selenium Web Driver を使うというやり方は
どうやらできるらしいという程度しかしらないのですが
他にもやれる方法があるかもしれないと思って質問しております。
Selenium Web Driver でのやり方のサイトも、入力欄への文字の配置やwebページ上のボタンを押すやり方が存在すれば教えていただきたいです。

今のところ対象なのは、"ふるせる"というところなのですが
そこに限らず、一般的なWEBショップ、
あるいは、ブログなどのログインができるようになりたいと
思っております。

長々とすいません。
よろしくおねがいします。

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

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

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

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

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

guest

回答5

0

phpのスクレイピングについてだけ解答します。

Goutteというライブラリが有名です。
実際、とても使い勝手が良いです。
単純なスクレイピングならGoutteでサクッと出来てしまいます。
ただこのライブラリの欠点として、ソースコードの中に直接クローリングと解析(取得?)手順を書くので、コードが汚くなってしまうというのがあります(Google Apps Scriptより猥雑)。
保守性は落ちるかもしれません。
そしてもう1つ大きな問題があって、javascriptを使った動的なページは扱えないんです。
たぶんこれはrubyやpythonのスクレイピングライブラリでも同じだと思います。

動的ページのスクレイピングツールはSeleniumが有名ですが、他にPhantomJSがよく使われています。
PhantomJSはヘッドレスブラウザとよばれる画面表示のないブラウザで、画面がないだけ環境を選ばずに使えます。
私はPhantomJSを便利に扱えるCasperJSというユーティリティ経由で使用しています。

しかし今年6月、ついにChromeがヘッドレスモードを搭載しました。
これによってPhantomJSの開発が終了してしまいました。
今後はHeadless Chromeがスクレイピングの中心になるはずです。
まだまだHeadless Chromeの情報は少ないですが、macとlinux版のChromeで使えるので、少しでも触っておくといいと思いますよ。

投稿2017/10/15 13:26

ooeok

総合スコア469

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

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

standard-soft

2017/10/16 02:51

PhantomJSのこと、耳にしたことがある、程度でした。 Headless Chrome がこれからきますよね。技術的な幅が広がります。 そう、JavaScriptで動的生成されたデータは難しいですよね。 ExcelVBAのIEコントロールだと、 ロードして待機してたら、なんかDOM上でデータが取れてるようだから、そのようにプログラム組んだらなんとか操作できる。 みたいな、可能だけれども不安定、というプログラムでなんとかやっておりました。 JSで動的生成されるページも今後増えてくると思うので Selenium の Headless Chrome のコントロール。とても学ぶ価値のある技術ですね。 大変ためになりました。情報ありがとうございます。助かりました。
guest

0

ベストアンサー

GAS でのログイン処理は以下が参考になりました。
Google Apps Scriptでクレジットカード利用明細を毎月自動で奥さんにメール送信する

スクレイピングする際にログイン有無の違いは、簡単に言うと「Cookieの有無」です。

  1. ログインページに対して必要なパラメータをセットして POST リクエストを行い、Cookie を取得する
  2. 取得した Cookie を用いて取得したいページに GET リクエストを行う

大まかに説明するとこれだけですが、1.の「必要なパラメータ」はサイト毎に異なりますので、どういった値を渡す必要があるかはサイト毎に調査する必要があります。
(ID、パスワードは必ず必要と思います)

単純な Web サイトであればログインも簡単だと思いますが、スクレイピング対策をしているようなサイトではパラメータも多くなるなど、難易度は高くなるでしょう。

IE や Chrome 等のブラウザ操作ならログイン処理時の(画面上にない)パラメータを気にする必要がないため比較的容易にログインを実現できますが、GAS ではブラウザ操作ができずサイト毎に調査する必要があるため、別物と考えたほうが良いかと思います。

投稿2017/10/15 11:19

rokuni

総合スコア174

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

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

standard-soft

2017/10/16 02:45

なるほど。そういうふうになっているのですね。 よくわかりました。ありがとうございます。 POSTリクエストでCookieに何らかの値を入れてるわけか。 そこでJSなどでいろいろやれるということか。 なるほどなるほど。
rokuni

2017/10/16 02:48

補足ですが、GAS をそのまま使うだけではJSのサイトは対応できません。 PhantomJS Cloud を利用するなど JS の解析を行う必要がありますので、ご注意ください。 https://phantomjscloud.com/
guest

0

ブラウザの入力欄に文字を埋め込み
特定のボタンを押し、そして、データダウンロード

上記の操作もWebサーバとの通信ではHTTPプロトコルでの通信として行われることに変わりはありません。
そして、プログラムからGETリクエストとPOSTリクエストが発行できるのであれば、通常のブラウザアクセスはほぼ行うことができると考えて良いかと思います。

Google Apps ScriptのUrlFetchAppはGET、POSTの両方に対応できますので、ご質問の内容は可能と思われます。

Class UrlFetchApp  |  Apps Script  |  Google Developers

投稿2017/10/15 05:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

standard-soft

2017/10/15 06:13

なるほど、GETとPOSTという考えがあまりわかっていませんでした。 フォームから操作するときに、GETかPOSTで何をどうしているのか、 っていうのを、見抜くわけですね。 単純なHTMLのsubmitとかなら、すぐにわかるわけか。 ありがとうございます。
guest

0

あれからいろいろ調べましたので、記載しておきます。

ログインの必要なページをスクレイピングする際に
ExcelVBA IE のコントロールと同等の操作を行うためには、

アドバイスいただいた PhantomJS でも可能かと思いますが
開発の先がなさそうなので、
node.js 上で chromy というライブラリを使って
Google Chrome のヘッドレスモードでコントロールする
という方法がやりやすいと感じました。
サンプルを幾つか作ってみましたが、これは使えるという実感しました。

WebDriverをインストールしてSelemiumでブラウザコントロールしてもいいかもしれません。
こちらはほとんど試していません。

また、GoogleSpreadSheetからのスクレイピングでは
ブラウザコントロールは難しいので
Postなどでユーザー/パスワードを送ることになり
HTMLの解析がけっこう手間がかかるかもしれません。
PhantomJSCloudについては調べきれていません。

アドバイス、回答くださったみなさま、ありがとうございます。

投稿2018/01/10 06:05

編集2018/01/10 06:08
standard-soft

総合スコア197

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

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

0

あれからいろいろ調べましたので、記載しておきます。

ログインの必要なページをスクレイピングする際に
ExcelVBA IE のコントロールと同等の操作を行うためには、

アドバイスいただいた PhantomJS でも可能かと思いますが
開発の先がなさそうなので、
node.js 上で chromy というライブラリを使って
Google Chrome のヘッドレスモードでコントロールする
という方法がやりやすいと感じました。

また、GoogleSpreadSheetからのスクレイピングでは
ブラウザコントロールは難しいので
Postなどでユーザー/パスワードを送ることになり
HTMLの解析がけっこう手間がかかるかもしれません。
PhantomJSCloudについては調べきれていません。

投稿2018/01/10 06:05

standard-soft

総合スコア197

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問