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

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

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

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

JavaScript

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

Q&A

1回答

1236閲覧

【Google Apps Script】Webスクレイピング:htmlから該当の数値を抜き取りたい

YousukeTanaka

総合スコア79

Google Apps Script

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

JavaScript

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

0グッド

0クリップ

投稿2021/01/31 09:14

編集2021/02/01 00:14

やりたいこと

現在、日本のコロナの状況を日々アップデートし、gmailで報告するプログラムをgasで作成しています。
そこでまず、以下のサイトの情報のうち、感染者数、回復者数、100万あたりの感染者数、100万あたりの死者数を抜き取り、
spreadsheetに反映したいと考えています。

イメージ説明
参考サイト

取り組みと問題

現在、外部ライブラリーのparser(外部ライブラリーParser)を使用して、該当箇所を抜き取ることに取り組んでいますが、この値の抜き出しがうまくできない状況です。
色々資料を当たりましたが、サンプルは非常にシンプルなHTMLを使用しているケースが多く、参考になりませんでした。
また、正規表現を用いたやり方も紹介されていましたが、見合った正規表現を書く能力は足りないと感じています。

イメージ説明

コード

現状、以下のような状態で手が止まっている状況です。

gas

1function webScraping() { 2 const url = 'https://www.worldometers.info/coronavirus/'; 3 const response = UrlFetchApp.fetch(url); 4 const content = response.getContentText('UTF-8'); 5 6 const parser = Parser.data(content); 7 // @ts-ignore 8 9 var start_str = '<td style="font-weight: bold; text-align:right" class="sorting_1">'; 10 var end_str = '</td>'; 11 // @ts-ignore 12 var start_num = parser.from(start_str).to(end_str).iterate(); 13 14}

実行ログ

9:13:35 情報 Logging output too large. Truncating output. {position=0.0, _from={}, direction=from, log=false, content= <!DOCTYPE html> <!--[if IE 8]> <html lang="en" class="ie8"> <![endif]--> <!--[if IE 9]> <html lang="en" class="ie9"> <![endif]--> <!--[if !IE]><!--> <html lang="en"> <!--<![endif]--> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Coronavirus Update (Live): 103,502,314 Cases and 2,236,938 Deaths from COVID-19 Virus Pandemic - Worldometer</title> <meta name="description" content="Live statistics and coronavirus news tracking the number of confirmed cases, recovered patients, tests, and death toll due to the COVID-19 coronavirus from Wuhan, China. Coronavirus counter with new cases, deaths, and number of tests per 1 Million population. Historical data and info. Daily charts, graphs, news and updates"> <link rel="shortcut icon" href="/favicon/favicon.ico" type="image/x-icon"> <link rel="apple-touch-icon" sizes="57x57" href="/favicon/apple-icon-57x57.png"> <link rel="apple-touch-icon" sizes="60x60" href="/favicon/apple-icon-60x60.png"> <link rel="apple-touch-icon" sizes="72x72" href="/favicon/apple-icon-72x72.png"> <link rel="apple-touch-icon" sizes="76x76" href="/favicon/apple-icon-76x76.png"> <link rel="apple-touch-icon" sizes="114x114" href="/favicon/apple-icon-114x114.png"> <link rel="apple-touch-icon" sizes="120x120" href="/favicon/apple-icon-120x120.png"> <link rel="apple-touch-icon" sizes="144x144" href="/favicon/apple-icon-144x144.png"> <link rel="apple-touch-icon" sizes="152x152" href="/favicon/apple-icon-152x152.png"> <link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-icon-180x180.png"> <link rel="icon" type="image/png" sizes="192x192" href="/favicon/android-icon-192x192.png"> <link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="96x96" href="/favicon/favicon-96x96.png"> <link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png"> <link rel="manifest" href="/favicon/manifest.json"> <meta name="msapplication-TileColor" content="#ffffff"> <meta name="msapplication-TileImage" content="/favicon/ms-icon-144x144.png"> <meta name="theme-color" content="#ffffff"> <meta property="og:image" content="http://www.worldometers.info/img/worldometers-fb.jpg" /> <link href="/css/bootstrap.min.css" rel="stylesheet"> <link href="/wm16.css" rel="stylesheet"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> <script src="/js/jquery.min.js"></script> <script src="/js/bootstrap.min.js"></script> <script src="/js/ie10-viewport-bug-workaround.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap.min.css" /> <script type="text/javascript" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script> <script type="text/javascript" src="https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap.min.js"></script> <script type="text/javascript" class="init"> $.extend( $.fn.dataTable.defaults, { responsive: true } ); $(document).ready(function() { $('#example2').dataTable( { "scrollCollapse": true, "sDom": '<"bottom"flp><"clear">', "paging": false } ); } ); </script> <script type="text/javascript" class="init"> $.extend( $.fn.dataTable.defaults, { responsive: true } ); $(document).ready(function() { $('#table3').dataTable( { "scrollCollapse": true, "order": [[ 1, 'desc' ]], "sDom": '<"bottom"flp><"clear">', "paging": false } ); } ); </script> <script type="text/javascript" class="init"> $.extend( $.fn.dataTable.defaults, { responsive: true } ); $(document).ready(function() { $('#example').dataTable( { "scrollCollapse": true, "searching": false, "sDom": '<"top">rt<"bottom"flp><"clear">', "paging": false } ); } ); </script> <script type="text/javascript" class="init"> $(document).ready(function() { $('#popbycountry').dataTable(); } ); </script> <script data-cfasync="false" type="text/javascript"> var freestar = freestar || {}; freestar.hitTime = Date.now(); freestar.queue = freestar.queue || []; freestar.config = freestar.config || {}; freestar.debug = window.location.search.indexOf('fsdebug') === -1 ? false : true; freestar.config.enabled_slots = []; !function(a,b){var c=b.getElementsByTagName("script")[0],d=b.createElement("script"),e="https://a.pub.network/worldometers-info";e+=freestar.debug?"/qa/pubfig.min.js":"/pubfig.min.js",d.async=!0,d.src=e,c.parentNode.insertBefore(d,c)}(window,document); </script> </head> <body> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-1438574-2', 'auto'); ga('send', 'pageview'); </script> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-1438574-30"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-1438574-30'); </script> <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js"></script> <script> window.addEventListener("load", function(){ window.cookieconsent.initialise({ "palette": { "popup": { "background": "#efefef", "text": "#404040" }, "button": { "background": "#8ec760", "text": "#ffffff" } }, "theme": "classic", "content": { "href": "http://www.worldometers.info/policy/" } })}); </script> <style type="text/css"> .style1 { color: #666666 } </style> <div class="navbar navbar-default"> <div class="container"> <div class="navbar-header"> <div class="logo"><a href="/" class="navbar-brand"><img src="/img/worldometers-logo.gif" border="0" title="Worldometer"></a></div> <button class="navbar-toggle" type="button" data-toggle="collapse" data-target="#navbar-main"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> <div class="navbar-collapse collapse" id="navbar-main"> <ul class="nav navbar-nav"> <li><a href="/coronavirus/"><span style="color:#FF9900; font-weight:bold">Coronavirus</span></a></li> <li><a href="/population/">Population</a></li> </ul> </div> </div> </div> <div class="container"> <div class="row"> <div style="text-align:left; margin-bottom:10px"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:inline-block;width:970px;height:90px" data-ad-client="ca-pub-3701697624350410" data-ad-slot="3287840995"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="row"> <div class="col-md-8"> <div class="content-inner"> <style> .number-table { font-size: 20px; font-weight: bold } .number-table-main { font-size: 24px; font-weight: bold } </style> <script src="/js/highcharts.js"></script> <style type="text/css"> <!-- .source { } .style2 { color: #FF0000 } .style4 { color: #FF0000; font-weight: bold; } .style6 { font-size: 12px; color: #bbb; font-weight: bold; } .source1 { font-size: 12px; color: #bbb; } .source1 { font-size: 12px; color: #bbb; } .source11 { font-size: 12px

試したこと

以下のライブラリーに変更を試みたり、正規表現に挑戦したりしましあたが、時間が多大にかかっている状況です。
Parser以外の外部ライブラリー

解決のアイデアを頂戴できればと思います。

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

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

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

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

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

guest

回答1

0

該当のページで取得したい所ってグラフの所になりますか?
画像で出してくださっているDevToolではなく、ツールから叩いた場合の結果が知りたいです。
見た所恐らくここは非同期で生成されるページのため、単純な静的ページのように取得は難しいかもしれません。

まず、contentの中には該当の取得したい情報のHTMLが存在していますか?

投稿2021/01/31 12:14

eneko0513

総合スコア349

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

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

YousukeTanaka

2021/02/01 00:18

>該当のページで取得したい所ってグラフの所になりますか? その通りです。 >画像で出してくださっているDevToolではなく、ツールから叩いた場合の結果が知りたいです。 上記に、「実行ログ」として追加いたしました。 >まず、contentの中には該当の取得したい情報のHTMLが存在していますか? こちらに関しては、上記の実行ログとほぼ同じの結果となりました。そして、取得したい情報のHTMLは存在していませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問