実現したいこと
下記サイトから下記内容を取得したいと考えています.ブラウザの開発者ツールから見た内容と,後述するコードにて取得した内容が異なってしまいます.どのようにして合わせたらいいかご教示いただけないでしょうか?よろしくお願いいたします.
https://weathernews.jp/s/pain/city.html?lat=38.0151938888889&lon=138.371501944444
取得内容
- <div class="item trasparent">タグの最後のところに含まれる内容を取得したい
- <p class="ti">の内容が開発者ツールと取得した内容で異なっている
発生している問題・エラーメッセージ
後述のコードで取得できし,tmpdの変数に格納される内容が下記のとおりです. <p class="da sun day-change">21<span class="week">(日)</span></p> <p class="ti">0</p> <p class="fc lv0"><img src="//smtgvs.weathernews.jp/s/pain/images/statusA/Lv0.svg"><span class="txt">安心</span></p> <p class="we"><img src="//mwsgvs.weathernews.jp/s/img/telop/600.png"></p> <p class="ap">987</p> 開発者ツールから確認できた内容は添付画像のとおりです.
該当のソースコード
1 2const level = ["安心", "やや注意", "注意", "警戒"] 3var date = new Date(); // 現在時刻を取得 4var futureDate = new Date(date.getTime() + (36 * 60 * 60 * 1000)); // 36時間後の日付を計算 5 6var hour = futureDate.getHours(); // 時間を取得 7var nearestHour = Math.floor(hour / 3) * 3; // 最も近い3の倍数の時間を計算 8 9var targetDate = getClosestTime()//new Date(futureDate.getFullYear(), futureDate.getMonth(), futureDate.getDate(), nearestHour, 0, 0, 0); // 最も近い3の倍数の時間の日付を作成 10 11function main_dataStorage() { 12 //URL指定 13 var tgtSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('2:取得データ'); 14 15 const url = tgtSheet.getRange("A2").getValue() 16 //getResource関数を呼び出し 17 var APIKEY = tgtSheet.getRange("G2").getValue() 18 var response = getResource(url, APIKEY); 19 //parseResponse関数を呼び出し 20 var source = parseResponse(response); 21 22 //地域を取得 23 var area = Parser.data(source) 24 .from('class="tit-h1">') 25 .to('の天気痛予報') 26 .build(); 27 var prefec = Parser.data(source) 28 .from('index.html?') 29 .to('</a>') 30 .iterate(); 31 32 var strt = prefec[1].indexOf(">") + 1 33 var last = prefec[1].length 34 var head = prefec[1].substring(strt, last) 35 36 var area = head + area 37 tgtSheet.getRange("B1").setValue(area) 38 39 //スクレイピングの対象をすべて取得する 40 var items = Parser.data(source).from('<div class="item transparent">').to('</div>').iterate(); 41 var tmpd = items[items.length-1] 42 Logger.log(tmpd) 43 44 //時刻を取得する 45 var hh = parseInt(Parser.data(tmpd).from('"ti">').to("</p").build())+6 46 var today = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd HH'); 47 // today.; 48 // today.setMinutes(0); 49 // today.setSeconds(0); 50 // today.setMilliseconds(0); 51 52 53 54} 55 56 57 58 59function getResource(target_url, APIKEY) { 60 //HTTPSレスポンスに設定するペイロードのオプション項目を設定する 61 var _options = { 62 url: target_url, 63 renderType: "html", 64 outputAsJson: true 65 }; 66 67 //オプション項目をJSONにしてペイロードとして定義し、エンコードする 68 var _payload = encodeURIComponent(JSON.stringify(_options)); 69 //PhantomJsCloudのAPIリクエストを行うためのURLを設定 70 var _request = 71 "https://phantomjscloud.com/api/browser/v2/" + 72 APIKEY + 73 "/?request=" + 74 _payload; 75 //設定したAPIリクエスト用URLにフェッチして、情報を取得 76 var _response = UrlFetchApp.fetch(_request).getContentText(); 77 78 return _response; 79} 80 81function parseResponse(response) { 82 //取得したjsonデータを配列データとして格納 83 var _json = JSON.parse(response); 84 //APIから取得したデータからJSから生成されたソースコードを取得 85 var _source = _json["content"]["data"]; 86 87 return _source; 88} 89 90function getCurrentDate() { 91 var date = new Date(); // 現在の日付を取得 92 var options = { year: 'numeric', month: '2-digit', day: '2-digit', weekday: 'short' }; 93 var formattedDate = date.toLocaleDateString('ja-JP', options); // フォーマットを指定して日付を文字列化 94 return formattedDate//.replace(/\//g, ""); // / を削除して返す 95} 96 97 98} 99 100 101

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2023/05/21 04:59
2023/05/21 08:43