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

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

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

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

スクレイピング

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

Google Apps Script

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

JavaScript

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

Q&A

解決済

2回答

10739閲覧

Cookieが必要なサイトをUrlFetchAppでスクレイピングする方法

SASAKI_APPL

総合スコア100

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

スクレイピング

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

Google Apps Script

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

JavaScript

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

0グッド

3クリップ

投稿2017/03/10 07:38

編集2017/03/12 07:04

Google Apps ScriptでCookieを使うサイトをスクレイピングしたいです。

このサイトの検索結果をスクレイピングしたいのですが、一発でアクセスすることができないよう、大元のページにリダイレクトされます。
ブラウザの場合、もう一度URLにアクセスすると、見れるようになります。

これをUrlFetchで行いたいのですが、ただ、二回アクセスするだけではCookieが保存されず、検索結果のページを取得でしません。

JavaScript

1 2 var options = { 3 "method" : "GET", 4 muteHttpExceptions:true 5 }; 6 var core = UrlFetchApp.fetch("https://catalog.library.metro.tokyo.jp/winj/opac/search-detail.do?org.apache.struts.taglib.html.TOKEN=1d95d116da40c48b0a1b726593e72d0c&cmb_column1=title&txt_word1=&cmb_like1=2&cmb_unit1=0&cmb_column2=author&txt_word2=&cmb_like2=2&cmb_unit2=0&cmb_column3=publisher&txt_word3=&cmb_like3=2&cmb_unit3=0&cmb_column4=fulltext&txt_word4=&cmb_like4=2&cmb_unit4=0&txt_atykey1=&chk_atytp1=11+21&hid_aty_column1=oatyid_11_21&txt_atyword1_dummy=&cmb_unit_aty=0&txt_atykey2=&chk_atytp2=12+22&hid_aty_column2=oatyid_12_22&txt_atyword2_dummy=&txt_ndc=&txt_stpubdate=&txt_edpubdate=&cmb_form=&cmb_littp=&cmb_lang=&txt_holcd=5019490166&cmb_code_column=isbn&txt_code=&txt_magcd=&txt_lom=&txt_cln1=&txt_cln2=&txt_cln3=&cmb_volume_column=volume&txt_stvolume=&txt_edvolume=&chk_catph=11+31&chk_catph=12+22+32&chk_catph=13+33&chk_area=01&chk_hol1tp=101+201+211+221+231+241+251+301+401+411+501+601+801&chk_hol1tp=103+203+213+223+233+243+253+303+403+413+503+603+803&chk_hol1tp=104+204+214+224+234+244+254+304+404+414+504+604+804&chk_hol1tp=105+205+215+225+235+245+255+305+405+415+505+605+805&chk_hol1tp=106+206+216+226+236+246+256+306+406+416+506+606+806&chk_hol1tp=107+207+217+227+237+247+257+307+407+417+507+607+707+807&chk_hol1tp=221+223+224+225+226+227+251+253+254+255+256+257&chk_hol1tp=201+203+204+205+206+207+231+233+234+235+236+237&chk_hol1tp=211+213+214+215+216+217+241+243+244+245+246+247&cmb_column9=ctntp&cmb_like9=0&cmb_unit9=0&txt_word9=&cmb_order=pubYear&opt_order=1&opt_pagesize=50&submit_btn_searchDetailSelAr=検索",options); 7var response = UrlFetchApp.fetch("https://catalog.library.metro.tokyo.jp/winj/opac/search-detail.do?org.apache.struts.taglib.html.TOKEN=1d95d116da40c48b0a1b726593e72d0c&cmb_column1=title&txt_word1=&cmb_like1=2&cmb_unit1=0&cmb_column2=author&txt_word2=&cmb_like2=2&cmb_unit2=0&cmb_column3=publisher&txt_word3=&cmb_like3=2&cmb_unit3=0&cmb_column4=fulltext&txt_word4=&cmb_like4=2&cmb_unit4=0&txt_atykey1=&chk_atytp1=11+21&hid_aty_column1=oatyid_11_21&txt_atyword1_dummy=&cmb_unit_aty=0&txt_atykey2=&chk_atytp2=12+22&hid_aty_column2=oatyid_12_22&txt_atyword2_dummy=&txt_ndc=&txt_stpubdate=&txt_edpubdate=&cmb_form=&cmb_littp=&cmb_lang=&txt_holcd=5019490166&cmb_code_column=isbn&txt_code=&txt_magcd=&txt_lom=&txt_cln1=&txt_cln2=&txt_cln3=&cmb_volume_column=volume&txt_stvolume=&txt_edvolume=&chk_catph=11+31&chk_catph=12+22+32&chk_catph=13+33&chk_area=01&chk_hol1tp=101+201+211+221+231+241+251+301+401+411+501+601+801&chk_hol1tp=103+203+213+223+233+243+253+303+403+413+503+603+803&chk_hol1tp=104+204+214+224+234+244+254+304+404+414+504+604+804&chk_hol1tp=105+205+215+225+235+245+255+305+405+415+505+605+805&chk_hol1tp=106+206+216+226+236+246+256+306+406+416+506+606+806&chk_hol1tp=107+207+217+227+237+247+257+307+407+417+507+607+707+807&chk_hol1tp=221+223+224+225+226+227+251+253+254+255+256+257&chk_hol1tp=201+203+204+205+206+207+231+233+234+235+236+237&chk_hol1tp=211+213+214+215+216+217+241+243+244+245+246+247&cmb_column9=ctntp&cmb_like9=0&cmb_unit9=0&txt_word9=&cmb_order=pubYear&opt_order=1&opt_pagesize=50&submit_btn_searchDetailSelAr=検索",options); 8 Logger.log(response);

どのようにしたら、検索結果のページをUrlFetchでアクセスできるのでしょうか。

*3/12追記
Cookie取得まではできたのですが、以下のようにしても結果が変わりません。
何かミスなどがあったらご教授ください。

JavaScript

1function metro(){ 2 3var url = "https://catalog.library.metro.tokyo.jp/winj/opac/search-detail.do?org.apache.struts.taglib.html.TOKEN=1d95d116da40c48b0a1b726593e72d0c&cmb_column1=title&txt_word1=&cmb_like1=2&cmb_unit1=0&cmb_column2=author&txt_word2=&cmb_like2=2&cmb_unit2=0&cmb_column3=publisher&txt_word3=&cmb_like3=2&cmb_unit3=0&cmb_column4=fulltext&txt_word4=&cmb_like4=2&cmb_unit4=0&txt_atykey1=&chk_atytp1=11+21&hid_aty_column1=oatyid_11_21&txt_atyword1_dummy=&cmb_unit_aty=0&txt_atykey2=&chk_atytp2=12+22&hid_aty_column2=oatyid_12_22&txt_atyword2_dummy=&txt_ndc=&txt_stpubdate=&txt_edpubdate=&cmb_form=&cmb_littp=&cmb_lang=&txt_holcd=5019490166&cmb_code_column=isbn&txt_code=&txt_magcd=&txt_lom=&txt_cln1=&txt_cln2=&txt_cln3=&cmb_volume_column=volume&txt_stvolume=&txt_edvolume=&chk_catph=11+31&chk_catph=12+22+32&chk_catph=13+33&chk_area=01&chk_hol1tp=101+201+211+221+231+241+251+301+401+411+501+601+801&chk_hol1tp=103+203+213+223+233+243+253+303+403+413+503+603+803&chk_hol1tp=104+204+214+224+234+244+254+304+404+414+504+604+804&chk_hol1tp=105+205+215+225+235+245+255+305+405+415+505+605+805&chk_hol1tp=106+206+216+226+236+246+256+306+406+416+506+606+806&chk_hol1tp=107+207+217+227+237+247+257+307+407+417+507+607+707+807&chk_hol1tp=221+223+224+225+226+227+251+253+254+255+256+257&chk_hol1tp=201+203+204+205+206+207+231+233+234+235+236+237&chk_hol1tp=211+213+214+215+216+217+241+243+244+245+246+247&cmb_column9=ctntp&cmb_like9=0&cmb_unit9=0&txt_word9=&cmb_order=pubYear&opt_order=1&opt_pagesize=50&submit_btn_searchDetailSelAr=検索"; 4var options = { 5"method" : "post", 6followRedirects: false 7} 8 9var core = UrlFetchApp.fetch(url,options); 10Logger.log("core:"+core) 11 12var headers = core.getAllHeaders(); 13var cookies = []; 14 15if ( typeof headers['Set-Cookie'] !== 'undefined' ) { 16// Set-Cookieヘッダーが2つ以上の場合はheaders['Set-Cookie']の中身は配列 17var cookies = typeof headers['Set-Cookie'] == 'string' ? [ headers['Set-Cookie'] ] : headers['Set-Cookie']; 18for (var i = 0; i < cookies.length; i++) { 19// Set-Cookieヘッダーからname=valueだけ取り出し、セミコロン以降の属性は除外する 20cookies[i] = cookies[i].split( ';' )[0]; 21}; 22} 23Logger.log(cookies); 24 25var headers = { 26"Cookie" : cookies 27} 28// リクエストオプションにheadersを設定 29var options = { 30"method" : "GET", 31muteHttpExceptions:true, 32"headers" : headers 33} 34var response = UrlFetchApp.fetch(url,options); 35Logger.log("response:"+response); 36}

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

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

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

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

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

guest

回答2

0

自己解決

自分が知らぬ間にサイトの仕様が変更されていたらしく、Cookieで取得したJSESSIONIDをURLに含めることで無事スクレイピングできました。

JavaScript

1 var url1 = "https://catalog.library.metro.tokyo.jp/winj/opac/search-detail.do?lang=ja"; 2 var options = { 3 "method" : "post", 4 followRedirects: false 5 } 6 7 var core = UrlFetchApp.fetch(url1,options); 8 9 10 var headers = core.getAllHeaders(); 11 var cookies = []; 12 13 if ( typeof headers['Set-Cookie'] !== 'undefined' ) { 14 // Set-Cookieヘッダーが2つ以上の場合はheaders['Set-Cookie']の中身は配列 15 var cookies = typeof headers['Set-Cookie'] == 'string' ? [ headers['Set-Cookie'] ] : headers['Set-Cookie']; 16 for (var i = 0; i < cookies.length; i++) { 17 // Set-Cookieヘッダーからname=valueだけ取り出し、セミコロン以降の属性は除外する 18 cookies[i] = cookies[i].split( ';' )[0]; 19 }; 20 } 21 var cookies = cookies + ""; 22 var cookie = cookies.replace( "JSESSIONID=" , "" ) ; 23 24 var url2 = "https://catalog.library.metro.tokyo.jp/winj/opac/search-detail.do;jsessionid="+cookie+"?txt_holcd="+BAR+"&cmb_code_column=isbn&txt_code=&txt_magcd=&txt_lom=&txt_cln1=&txt_cln2=&txt_cln3=&cmb_volume_column=volume&txt_stvolume=&txt_edvolume=&chk_catph=11+31&chk_catph=12+22+32&chk_catph=13+33&chk_area=01&chk_area=03&chk_hol1tp=101+201+211+221+231+241+251+301+401+411+501+601+801&chk_hol1tp=103+203+213+223+233+243+253+303+403+413+503+603+803&chk_hol1tp=104+204+214+224+234+244+254+304+404+414+504+604+804&chk_hol1tp=105+205+215+225+235+245+255+305+405+415+505+605+805&chk_hol1tp=106+206+216+226+236+246+256+306+406+416+506+606+806&chk_hol1tp=107+207+217+227+237+247+257+307+407+417+507+607+707+807&chk_hol1tp=221+223+224+225+226+227+251+253+254+255+256+257&chk_hol1tp=201+203+204+205+206+207+231+233+234+235+236+237&chk_hol1tp=211+213+214+215+216+217+241+243+244+245+246+247&cmb_column9=ctntp&cmb_like9=0&cmb_unit9=0&txt_word9=&cmb_order=pubYear&opt_order=1&opt_pagesize=50&submit_btn_searchDetailSelAr=検索"; 25 var options = { 26 "method" : "post", 27 followRedirects: false 28 } 29 var response = UrlFetchApp.fetch(url2,options);

投稿2017/05/10 15:48

SASAKI_APPL

総合スコア100

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

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

0

javascript

1var url = "https://catalog.library.metro.tokyo.jp/winj/opac/search-detail.do?org.apache.struts.taglib.html.TOKEN=1d95d116da40c48b0a1b726593e72d0c&cmb_column1=title&txt_word1=&cmb_like1=2&cmb_unit1=0&cmb_column2=author&txt_word2=&cmb_like2=2&cmb_unit2=0&cmb_column3=publisher&txt_word3=&cmb_like3=2&cmb_unit3=0&cmb_column4=fulltext&txt_word4=&cmb_like4=2&cmb_unit4=0&txt_atykey1=&chk_atytp1=11+21&hid_aty_column1=oatyid_11_21&txt_atyword1_dummy=&cmb_unit_aty=0&txt_atykey2=&chk_atytp2=12+22&hid_aty_column2=oatyid_12_22&txt_atyword2_dummy=&txt_ndc=&txt_stpubdate=&txt_edpubdate=&cmb_form=&cmb_littp=&cmb_lang=&txt_holcd=5019490166&cmb_code_column=isbn&txt_code=&txt_magcd=&txt_lom=&txt_cln1=&txt_cln2=&txt_cln3=&cmb_volume_column=volume&txt_stvolume=&txt_edvolume=&chk_catph=11+31&chk_catph=12+22+32&chk_catph=13+33&chk_area=01&chk_hol1tp=101+201+211+221+231+241+251+301+401+411+501+601+801&chk_hol1tp=103+203+213+223+233+243+253+303+403+413+503+603+803&chk_hol1tp=104+204+214+224+234+244+254+304+404+414+504+604+804&chk_hol1tp=105+205+215+225+235+245+255+305+405+415+505+605+805&chk_hol1tp=106+206+216+226+236+246+256+306+406+416+506+606+806&chk_hol1tp=107+207+217+227+237+247+257+307+407+417+507+607+707+807&chk_hol1tp=221+223+224+225+226+227+251+253+254+255+256+257&chk_hol1tp=201+203+204+205+206+207+231+233+234+235+236+237&chk_hol1tp=211+213+214+215+216+217+241+243+244+245+246+247&cmb_column9=ctntp&cmb_like9=0&cmb_unit9=0&txt_word9=&cmb_order=pubYear&opt_order=1&opt_pagesize=50&submit_btn_searchDetailSelAr=検索" 2 3function cookies(){ 4 var options = { 5 method : "post", 6 followRedirects: false 7 }; 8 9 var response = UrlFetchApp.fetch(url,options); 10 11 var headers = response.getAllHeaders(); 12 var cookies = []; 13 14 if ( typeof headers['Set-Cookie'] !== 'undefined' ) { 15 // Set-Cookieヘッダーが2つ以上の場合はheaders['Set-Cookie']の中身は配列 16 var cookies = typeof headers['Set-Cookie'] == 'string' ? [ headers['Set-Cookie'] ] : headers['Set-Cookie']; 17 for (var i = 0; i < cookies.length; i++) { 18 // Set-Cookieヘッダーからname=valueだけ取り出し、セミコロン以降の属性は除外する 19 cookies[i] = cookies[i].split( ';' )[0]; 20 }; 21 } 22 return cookies 23} 24 25Logger.log(cookies)

これでcookieがとれるまではやりました。
その後ちょっと時間がないのであれですが、参考になれば。。。

投稿2017/03/10 08:16

MasakazuFukami

総合スコア1869

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

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

SASAKI_APPL

2017/03/12 06:52 編集

回答ありがとうございます。 Cookie取得まではできました。 が、Cookie取得前と結果が変わりません、、 ```JavaScript function metro(){ var url = "https://catalog.library.metro.tokyo.jp/winj/opac/search-detail.do?org.apache.struts.taglib.html.TOKEN=1d95d116da40c48b0a1b726593e72d0c&cmb_column1=title&txt_word1=&cmb_like1=2&cmb_unit1=0&cmb_column2=author&txt_word2=&cmb_like2=2&cmb_unit2=0&cmb_column3=publisher&txt_word3=&cmb_like3=2&cmb_unit3=0&cmb_column4=fulltext&txt_word4=&cmb_like4=2&cmb_unit4=0&txt_atykey1=&chk_atytp1=11+21&hid_aty_column1=oatyid_11_21&txt_atyword1_dummy=&cmb_unit_aty=0&txt_atykey2=&chk_atytp2=12+22&hid_aty_column2=oatyid_12_22&txt_atyword2_dummy=&txt_ndc=&txt_stpubdate=&txt_edpubdate=&cmb_form=&cmb_littp=&cmb_lang=&txt_holcd=5019490166&cmb_code_column=isbn&txt_code=&txt_magcd=&txt_lom=&txt_cln1=&txt_cln2=&txt_cln3=&cmb_volume_column=volume&txt_stvolume=&txt_edvolume=&chk_catph=11+31&chk_catph=12+22+32&chk_catph=13+33&chk_area=01&chk_hol1tp=101+201+211+221+231+241+251+301+401+411+501+601+801&chk_hol1tp=103+203+213+223+233+243+253+303+403+413+503+603+803&chk_hol1tp=104+204+214+224+234+244+254+304+404+414+504+604+804&chk_hol1tp=105+205+215+225+235+245+255+305+405+415+505+605+805&chk_hol1tp=106+206+216+226+236+246+256+306+406+416+506+606+806&chk_hol1tp=107+207+217+227+237+247+257+307+407+417+507+607+707+807&chk_hol1tp=221+223+224+225+226+227+251+253+254+255+256+257&chk_hol1tp=201+203+204+205+206+207+231+233+234+235+236+237&chk_hol1tp=211+213+214+215+216+217+241+243+244+245+246+247&cmb_column9=ctntp&cmb_like9=0&cmb_unit9=0&txt_word9=&cmb_order=pubYear&opt_order=1&opt_pagesize=50&submit_btn_searchDetailSelAr=検索"; var options = { "method" : "post", followRedirects: false } var core = UrlFetchApp.fetch(url,options); Logger.log("core:"+core) var headers = core.getAllHeaders(); var cookies = []; if ( typeof headers['Set-Cookie'] !== 'undefined' ) { // Set-Cookieヘッダーが2つ以上の場合はheaders['Set-Cookie']の中身は配列 var cookies = typeof headers['Set-Cookie'] == 'string' ? [ headers['Set-Cookie'] ] : headers['Set-Cookie']; for (var i = 0; i < cookies.length; i++) { // Set-Cookieヘッダーからname=valueだけ取り出し、セミコロン以降の属性は除外する cookies[i] = cookies[i].split( ';' )[0]; }; } Logger.log(cookies); var headers = { "Cookie" : cookies } // リクエストオプションにheadersを設定 var options = { "method" : "GET", muteHttpExceptions:true, "headers" : headers } var response = UrlFetchApp.fetch(url,options); Logger.log("response:"+response); } ``` 何が間違っているのでしょうか...?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問