スクレイピングを使いこなせば、インターネット上のデータを簡単に拾っていろいろやること拡がりますね。
例えば、最新のYahoo!ニュースの全カテゴリを一発で一覧に出力できたら便利です。
スクレイピングはいろいろな言語で対応可能だと思いますが、とりあえずGASで実装してみました。
Googleスプレッドシートであれば、割と簡単に自分好みのわかりやすい形にカスタマイズできます。
いろんな方法があると思いますが、正規表現によるゴリゴリの置換で実現してます。
スマートな方法ではないかもしれませんが、なるべく直感的にわかりやすいように実装してます。
もしよかったら参考にしてください。スクレイピング技術を使って必要な情報を効率的に取得しましょう。
Yahoo!ニュースページの取得箇所とスクレイピング操作イメージ映像
スクレイピングで取得するYahooニュースページソースの項目と実際にマクロを起動してスプレッドシートに反映するまでの映像です。
やるべきことのイメージを沸かせてみてください。

Yahoo!ニューススクレイピングGASマクロの主な仕様
細かい処理はコメントで補足してるので、ザックリとした仕様を箇条書きで記載します。
- Yahoo!ニュースからカテゴリ単位でページリストを取得
- ページ番号範囲指定で複数ページを一度に取得(ただしページ制限制御あり)
- 実行判断の確認メッセージ制御(フラグon/offあり)
- 既に取得済データかをタイトルでチェック(既に存在している場合は反映しない)
- ソート・枠線・フィルタ処理を追加
Yahoo!ニューススクレイピングGASマクロのソースコード
下記のソースを全てコピーして起動してください。

【GAS】Googleスプレッドシートでマクロの使い方入門【動画付】
Googleの「Google Apps Script」通称GAS。GoogleマップやGメールなど、いろんなGoogle関連のサービスと自由に連携できたり、独自のWebアプリを開発することもできる、いろんな可能性を秘めたワクワクの言語ですね...
目的に合っていない場合は適当にカスタマイズしてみてください。GASマクロの勉強にも少しは役立つと思います。
/* Yahoo!ニューススクレイピング */
function yahooNewsScraping() {
// 確認メッセージフラグ
var confirmMsgFlg = 0; // 0:確認メッセージを表示しない、1:確認メッセージを表示する
// 開始位置
var startRow = 4;
var startColumn = 1;
// 目次シートと各シート左上に目次リンク作成処理
yahooNewsScrapingShori(confirmMsgFlg,
startRow,
startColumn);
}
////////////////////////////////////////////////////////////////////////////////
/* スクレイピング処理 */
function yahooNewsScrapingShori(confirmMsgFlg,
startRow,
startColumn) {
var spSheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet(); // アクティブシート
var pageRange = 10; // ページ制限範囲
var outColCnt = 5; // 出力列数
var categoryCol = 1; // カテゴリ
var titleCol = 2; // タイトル
var upDtTmCol = 3; // 掲載日時
var urlCol = 4; // URL
var addDtTmCol = 5; // 追加日時
var inCategory = sheet.getRange(1,2).getValue();
var inPageNo = sheet.getRange(2,2).getValue();
var inPageNoTo = sheet.getRange(3,2).getValue();
//////////チェック//////////
if (inCategory == "") {
Browser.msgBox("カテゴリが入力されていません。\\n"+"処理を終了します。"+"処理を終了します。");
return;
}
if (inPageNo == "") {
Browser.msgBox("ページ番号が入力されていません。\\n"+"処理を終了します。");
return;
} else {
if (isNaN(Number(inPageNo))) {
Browser.msgBox("ページ番号が数値ではありません。\\n"+"処理を終了します。");
return;
} else {
inPageNo = Number(inPageNo);
}
}
if (inPageNoTo == "") {
inPageNoTo = Number(inPageNo);
} else {
if (isNaN(inPageNo)) {
Browser.msgBox("ページ番号Toが数値ではありません。\\n"+"処理を終了します。");
return;
} else {
inPageNoTo = Number(inPageNoTo);
}
if (inPageNo > inPageNoTo) {
Browser.msgBox("ページ範囲指定が逆です。\\n"+"処理を終了します。");
return;
}
if (inPageNoTo-inPageNo+1 > pageRange) {
Browser.msgBox("ページ制限範囲「"+pageRange+"」を超えてます。\\n"+"処理を終了します。");
return;
}
}
//////////確認処理//////////
if (confirmMsgFlg == 1) {
var msg = "";
if (inPageNoTo == inPageNo) {
msg = msg
+"・Yahooニュース「"+inCategory+"」"+inPageNo+"ページ目のリストを出力します。\\n";
} else {
msg = msg
+"・Yahooニュース「"+inCategory+"」"+inPageNo+"ページ目から"+inPageNoTo+"ページ目のリストを出力します。\\n";
}
msg = msg
+"・タイトルで存在チェックし、既に存在している場合は追加しません。\\n";
// 実行確認
if (msg != "") {
var msgRtn = Browser.msgBox(msg+"\\n実行してよろしいですか?",Browser.Buttons.OK_CANCEL);
if (msgRtn == 'cancel') {return;}
}
}
//////////コンテンツ取得//////////
var Data = [];
for (var p=inPageNo;p<=inPageNoTo;p++) {
// 対象URL取得
switch(inCategory) {
case '全て':
var inUrlArr = [
["国内", "https://news.yahoo.co.jp/topics/domestic?page=" + p]
,["国際", "https://news.yahoo.co.jp/topics/world?page=" + p]
,["経済", "https://news.yahoo.co.jp/topics/business?page=" + p]
,["エンタメ","https://news.yahoo.co.jp/topics/entertainment?page=" + p]
,["スポーツ","https://news.yahoo.co.jp/topics/sports?page=" + p]
,["IT", "https://news.yahoo.co.jp/topics/it?page=" + p]
,["科学", "https://news.yahoo.co.jp/topics/science?page=" + p]
,["地域", "https://news.yahoo.co.jp/topics/local?page=" + p]
];
break;
case '主要':
var inUrl = "https://news.yahoo.co.jp/topics/top-picks?page=" + p;
break;
case '国内':
var inUrl = "https://news.yahoo.co.jp/topics/domestic?page=" + p;
break;
case '国際':
var inUrl = "https://news.yahoo.co.jp/topics/world?page=" + p;
break;
case '経済':
var inUrl = "https://news.yahoo.co.jp/topics/business?page=" + p;
break;
case 'エンタメ':
var inUrl = "https://news.yahoo.co.jp/topics/entertainment?page=" + p;
break;
case 'スポーツ':
var inUrl = "https://news.yahoo.co.jp/topics/sports?page=" + p;
break;
case 'IT':
var inUrl = "https://news.yahoo.co.jp/topics/it?page=" + p;
break;
case '科学':
var inUrl = "https://news.yahoo.co.jp/topics/science?page=" + p;
break;
case '地域':
var inUrl = "https://news.yahoo.co.jp/topics/local?page=" + p;
break;
default:
Browser.msgBox("対象外のカテゴリです。\\n"+"処理を終了します。");
return;
}
// HTML結果取得
if (inCategory == "全て") {
for (var i=0;i<\/div><\/div><\/div><\/a><\/li>/g);
var liTag,aTag,url,dlTag,title,category,timeTag,upDtTm,upDate,upTime,addDtTm;
for (var i=0;i<=liTags.length-1;i++) {
// 空の配列作成
var data = [];
/////htmlタグからコンテンツを抽出/////
liTag = liTags[i];
// 「」と「
コメント