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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

0回答

1163閲覧

GASでスクレイピングをしたい

ngngm

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2021/11/26 09:40

実現したいこと

ログイン情報が必要なサイトで個別ページを連続でスクレイピング

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

ポータルサイトへのログインは出来ているが、そこで取得したクッキーを使用して個別ページへのログインができない。

該当のソースコード

function myFunction() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('URL'); var lastrow = sheet.getDataRange().getLastRow(); //シート内の最終行 var mainsheet = sheet.getRange(1, 1, lastrow,1).getValues(); if(lastrow >0 ){ var LOGIN_URL = "https://auth2.circle.ms/"; var headers = { "User-Agent":"設定していますが、念のため隠させていただきます" }; // POSTオプション var post_options = { method: "post", Username:"ここにはログイン用のメールアドレスが入ります", Password:"ここにはログイン用のパスワードが入ります", ReturnUrl: "https://webcatalog.circle.ms/Account/Login", StayOnError: true, status:"OK", ".AspNet.Consent":"yes", _gat:1, success:1, CirclemsMobileMode:0, deliveryevent157:"done", StayOnError:true, headers: headers, }; // POSTリクエスト var html1 = UrlFetchApp.fetch(LOGIN_URL, post_options).getContentText("UTF-8"); var response = UrlFetchApp.fetch(LOGIN_URL, post_options); // レスポンスヘッダーからcookieを取得 var cookies = response.getHeaders()["Set-Cookie"]; var headers = { "User-Agent":"設定していますが、念のため隠させていただきます", Cookie: cookies }; var get_options = { method: "post", Username:"ここにはログイン用のメールアドレスが入ります", Password:"ここにはログイン用のパスワードが入ります", ReturnUrl: "https://webcatalog.circle.ms/Account/Login", StayOnError: true, status:"OK", ".AspNet.Consent":"yes", _gat:1, success:1, CirclemsMobileMode:0, deliveryevent157:"done", StayOnError:true, headers: headers, muteHttpExceptions: true }; var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('result'); var lastrow2 = sheet2.getRange(sheet2.getMaxRows(), 4).getNextDataCell(SpreadsheetApp.Direction.UP).getRow()+1; var tenkiyou = []; var nom = lastrow2; let hiduke = new Date(); nitiji = Utilities.formatDate(hiduke,"JST", "yyyy/MM/dd"); for(var nowrow = 0; nowrow < lastrow; nowrow++) { //配分表シートの行数分ループ var SCRAPING_URL = mainsheet[nowrow][0]; var html = UrlFetchApp.fetch(SCRAPING_URL, get_options).getContentText("UTF-8"); tenkiyou.push([html1, html, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",]) nom = nom+1; } sheet2.getRange(lastrow2,1,nom-lastrow2,34).setValues(tenkiyou); } }

補足

初心者なりに色々なコードを参考にしたのでキメラ化したコードとなってしまっていますが、とりあえずは動いています。
クッキーはとりあえずで思い当たる物を投げ込んでいる状態です。

URLシートにはA行のセルに1から順に個別ページのURLが羅列されています。
スクレイピング予定の個別ページはhttps://webcatalog.circle.ms/Circle/~(ここに8桁の数字が個別に割り振られています)
となります。R18も一部含まれてしまうので、申し訳ございませんが詳細は割愛いたします。

ログインURLを変えてみたりと色々試したのですが完全に手詰まりとなってしまったため、ご質問となります。
なぜ一度ログインが成功しているクッキーを使用して弾かれてしまうのかが不明のため、ご教授いただければ幸いです。

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

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

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

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

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

mike2mike4

2021/11/26 11:31

そもそもそのサイトはスクレイピング許可されているのですか?
mike2mike4

2021/11/26 16:32

利用規約に以下があるのですが…… (12)当社またはその他のサーバーに対して負荷をかける行為、 および他のユーザーのアクセスを妨害する行為。
mike2mike4

2021/11/26 16:54 編集

これも引っかかりそう。 (17)Webブラウザ以外のプログラムから、当社規定のAPIを利用したアクセス方法以外の手段を使用して、サービス及びサービスのデータにアクセスする行為。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問