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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

3276閲覧

GAS(jQuery使用)のスクレイピングで、class,idの振られていない複数のtableタグから、要素を取得したいです。

Takashi8787

総合スコア43

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/10/28 00:38

こちらのコロナ情報から、それぞれの市(横浜市、山北町等)のコロナ感染者の累計を取得(スクレイピング)したいです。
https://www.pref.kanagawa.jp/docs/ga4/covid19/occurrence.html

【環境】
GoogleAppsScript
【利用ライブラリ】
Cheerio

GASでCheerioライブラリを使い、jQueryでの要素指定をして、データを取得するスクレイピングをしたいです。
サイトのtableタグ等に、class名、id等が振られていないため、要素数の番号で指定する方法で取得しております。

現状のコードは以下のとおりです。

GAS

1 2 //スクレイピングスタートするURL 3 const url = "https://www.pref.kanagawa.jp/docs/ga4/covid19/occurrence.html"; 4 5 // UrlFetchAppにて取得(UTF-8を指定) 6 const html = UrlFetchApp.fetch(url).getContentText('UTF-8'); 7 8 // 返り値をCheerioに食わせる 9 let $ = Cheerio.load(html); 10 11 // 指定したいテーブルにid:area01を追加 12 $('table').eq(3).attr('id', 'area01') 13 14 const hiratsuka_data = $('#area01 tr:nth-child(6) td:nth-child(5)').text(); 15

テーブル番号で指定したいテーブルにidを付与し、それをもとに、
nth-childの番号で取得する・・・という、なんとも強引なやり方になっております。

jQueryの知識が乏しいことでこれ以上のコードが書けないのですが、
もっとスマートに要素を指定する方法はありませんでしょうか??

もしわかる方いましたら、ご教示いただけますと助かります。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

要素数の番号で指定するしかなさそうですね。

js

1const city_table = $('table').eq(3); 2const hiratsuka_data = cityTable.find("tr:nth-child(6) td:nth-child(5)").text();

スクレイピングは変更に弱いため、コロナ感染者APIを使った方が良いかもしれないです。
https://corona.go.jp/dashboard/

投稿2021/10/28 01:55

heroyct

総合スコア434

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

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

Takashi8787

2021/10/28 02:16

ご教示頂きありがとうございます! 教えて頂いたコードの方が、idを不必要に追加しないので、コードが見やすくなりました。 ありがとうございます! コロナ感染者APIも最初は考えたのですが、私が把握している限りでは、 ・最新情報が2〜3日遅れる ・市区町村別の感染者数は見れない といった仕様上の問題があったため、市のHPからスクレイピング・・・ ということになりました。。 コロナAPIがもう少し最新情報をあげてくれ、 市区町村別のデータも提供してくれればよかったのですが、、、 この度はとても助かりました。 どうもありがとうございました!
heroyct

2021/10/28 02:33

・最新情報が2〜3日遅れる ・市区町村別の感染者数は見れない なるほど、大変ですが、スクレイピングで頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問