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

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

ただいまの
回答率

89.06%

gasで自身をスクレイピングしたい

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,781

compliance1

score 6

前提・実現したいこと

google apps scriptでwebアプリを公開しました
そのscriptから、定期的に自身にアクセスを当て、スクレイピングしたいと思い、以下のコードを書きました。
すると、知らないコードが返ってきました。
自分で書いたhtmlを受け取るにはどうすればいいですか?

発生している問題

返ってきた知らないコード
長いので後ろの方をカットしています

logger.log
[17-10-07 21:05:29:155 JST] <!doctype html>
<html>
<head>
<meta name="chromevox" content-script="no"><link rel="stylesheet" href="/static/macros/client/css/224145535-mae_html_css_ltr.css">

<script type="text/javascript" src="/static/macros/client/js/711297240-warden_bin_i18n_warden.js"></script>

</head>
<body>
<table id="warning-bar-table" class="full_size" cellspacing="0" cellpadding="0"><tr><td><div id="warning" class="warning-bar"></div></td></tr><tr><td style="height: 100%"><iframe id="sandboxFrame" sandbox="allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-top-navigation">
</iframe>
</td></tr></table><script type="text/javascript">
var el = document.getElementById('sandboxFrame');
el.onload = function() {
goog.script.init("boxMode\x22:\x22IFRAME_SANDBOX\x22,\x22libid\x22:\x22Mt3NspQwFyALwrJtSkISKatLyYyhOIA4a\x22,\x22callbackTimeout\x22:390000,\x22eei\x22:\x22\x22,\x22sandboxHost\x22:\x22https:\/\/n-プレビューす

該当のソースコード

function myFunction() {
  var response = UrlFetchApp.fetch("https://script.google.com/macros/s/キー/exec");
  Logger.log(response);
}
//https://script.google.com/macros/s/キー/execはこのスクリプトでアプリを公開した時にもらったurlです

試したこと

公開時の設定を、
次のユーザーとしてアプリケーションを実行:自分
アプリケーションにアクセスできるユーザー:全員(匿名も含む)
にしています
グーグルアカウントはログアウトした状態での、https://script.google.com/macros/s/キー/execのアクセス確認はできています

補足情報(言語/FW/ツール等のバージョンなど)

言語はgas,htmlです
エディタはgoogle apps scriptです

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

GAS で公開したウェブサービスのスクレイピングを初めて試してみましたが、
質問者さんと同様、公開した HTML とは違った形で取得されました。
ですが全く別物というわけではなく、GAS がフレームワーク?で囲んでいるだけのようです。

また Unicode でエスケープされているようなので見辛いですが、
欲しい箇所を正規表現等で抜き出すことは不可能ではなさそうです。
試しに <title> タグの文章を抜き出してみました。

 公開したウェブアプリケーション

 コード.gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile("index.html");
}

 index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <title>スクレイピングテスト用</title>
  </head>
  <body>
    <h1>これはテストです</h1>
  </body>
</html>

 スクレイピング

 コード.gs

function myFunction() {
  const URL = "https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXX/exec";
  var response = UrlFetchApp.fetch(URL);
  var text = response.getContentText();
  var title = text.match(/\\\\u003ctitle\\\\u003e(.*?)\\\\u003c/);
  Logger.log(title[1]);
}

 レスポンス一部抜粋

\\u003ctitle\\u003eスクレイピングテスト用\\u003c\\\/title\\u003e\\n  \\u003c\\\/head\\u003e\\n  \\u003cbody\\u003e\\n    \\u003ch1\\u003eこれはテストです\\u003c\\\/h1\\u003e\\n  

 実行結果

[17-10-13 00:02:55:821 JST] スクレイピングテスト用

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/24 11:15

    返信遅くなってすみません
    本当にありがとうございます

    本当ですね、スクレイピンングはできているようです
    ただ難しいですね......
    また、このコードをスクレイピングだけでなく実行したいのですが、できていません
    どういったことが考えられますか?

    キャンセル

  • 2017/10/24 13:59

    「このコード」とは、質問者さんが Web アプリとして公開したコードのことでしょうか?
    HTML ファイルに JavaScript が埋め込まれており、JavaScript が HTML に展開されていないのはなぜか?という意図だと受け止めて解答します。

    UrlFetchApp.fetch(url) では JavaScript がそのまま取得されます。
    もしブラウザで読み込んだように HTML に展開された結果が欲しいのであれば、PhantomJSCloud のサービスを利用すれば可能でしょう。
    https://phantomjscloud.com/

    もしくは、JavaScript ではなく GoogleAppsScritp を埋め込めば取得できるかもしれません。

    Apps Script code in scriptlets
    https://developers.google.com/apps-script/guides/html/templates#apps_script_code_in_scriptlets

    キャンセル

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

  • ただいまの回答率 89.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る