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

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

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

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

1回答

6704閲覧

Google apps scirptを利用した正規表現でのスクレイピングについて

ant

総合スコア8

Google Apps Script

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2016/12/28 13:48

###前提・実現したいこと
・現在、Google apps scriptを利用して、自信のWebサイトをスクレイピングを試みています。
・h2タグから次のh2タグまでをブロックとして複数取得したいです。

//ここから <h2>見出し</h2> <p>テキストテキストテキストテキストテキスト</p> //ここまでと //ここから <h2>見出し</h2> <p>テキストテキストテキストテキストテキスト</p> //ここまでを抽出したい。

・ソースコードをスクレイピングするために以下を参考にして<h2><h2>に囲まれたソースコードの抽出を試しましたが、なぜか奇数のh2タグしか取得できません。原因がわかる方、ご教示いただけないでしょうか?
http://qiita.com/murapon/items/5c7ec6568bc56799da99

###該当のソースコード

Google

1function myFunction() { 2 var response = UrlFetchApp.fetch("http://xxx.jp"); 3 var myRegexp = /<h2>([\s\S]*)<\h2>/gi; 4 var elems = response.getContentText().match(myRegexp); 5 6 for(var i in elems) { 7 var title = elems[i] 8 title = title.replace(/(^\s+)|(\s+$)/g, ""); 9 title = title.replace(/<\/?[^>]+>/gi, ""); 10 } 11}

###試したこと
以下のサイトを参考にしています。
http://yoshiyuki-hirano.hatenablog.jp/entry/2015/10/02/104750
http://os0x.g.hatena.ne.jp/os0x/20080213/1202900650
http://qiita.com/inamoth/items/23248b7290d8140f53fc

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

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

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

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

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

guest

回答1

0

正規表現での参照の問題ではないでしょうか?
下記で複数のh2タグをマッチする事ができます。

Javascript

1text.match(/.*<h2>.*/g);

javascript

1function myFunction() { 2 var response = UrlFetchApp.fetch("http://***.jp/"); 3 var getBody = response.getContentText(); 4 var regExp = new RegExp( ".*<h2>.*", "g" ) ; 5 var elems = getBody.match(regExp); 6 7 for(var i in elems) { 8 var title = elems[i] 9 } 10}

応用でスプレッドシートと連携の場合は、下記でいかがでしょう?

Javascript

1function myFunction() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = ss.getActiveSheet(); 4 var row = sheet.getLastRow() + 1; 5 6 var response = UrlFetchApp.fetch("http://***.jp/"); 7 var getBody = response.getContentText(); 8 var regExp = new RegExp( ".*<h2>.*", "g" ) ; 9 var elems = getBody.match(regExp); 10 11 for(var i in elems) { 12 var title = elems[i] 13 sheet.getRange(row,1).setValue(title); 14 row++; 15 } 16}

良いお年を!

投稿2016/12/29 05:46

編集2016/12/30 02:18
uznetro

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問