n8nでWebの情報を集める:RSS・HTTP Request・スクレイピングの線引き

公開 書いた人 大林 諒

n8nでWebの情報を集める方法は3つあります。相手が用意したAPIを呼ぶ、RSSを読む、ページのHTMLから値を取り出す(スクレイピング)です。この記事では、社員30名ほどの法人向けサービス会社が、業界ニュースと競合のお知らせを毎朝Slackの #業界ニュース にまとめて流す仕組みを作ります。読み終わると、RSSは重複なしで届き、RSSの無いページはHTMLノードで必要な所だけ取れて、取ってはいけないページも見分けられます。前提は、n8n 2.44.7(2026年10月時点の安定版)が動いていて、SlackとGoogleスプレッドシートのCredential(認証情報)があることです。

この記事の内容
  1. 先に決めること
  2. 集め方の一覧
  3. RSSで業界ニュースと競合の更新を毎朝Slackへ
  4. RSSの無いページからHTMLノードで取り出す
  5. やってはいけないこと・気を付けること
  6. 取れないときの代わり
  7. 応用
  8. できないことと、その代わり
  9. よく詰まるところ
  10. 次にやること

先に決めること

集める順番は、API、RSS、HTMLの取り出し

同じ情報でも、取り方によって壊れやすさが大きく違います。上から順に探し、見つかった時点で下は使いません。

  1. 公式のAPI。項目名と形が約束されていて、相手がページのデザインを変えても壊れない。利用条件も文書になっている
  2. RSS(Atomなど同じ仕組みのフィードを含む)。「更新を外に配る」ために相手が用意したもので、取りに行くこと自体が想定されている
  3. HTMLの取り出し。人が読むためのページを機械で読むので、デザインが変わった日に黙って0件になる。取ってよいかの確認も一番重い

実際に本番で動かしていると、HTMLから取っている仕組みは年に1〜2回は相手のリニューアルで止まります。APIやRSSで取れるものをわざわざHTMLから取る理由はありません。

何に使うか、どこまで広げるか

この記事の例は「社内のSlackに見出しとリンクを流し、本文は元のサイトで読む」使い方です。本文を丸ごと保存して社外に出す、他社のページを自社サイトに転載する、といった使い方は、取り方とは別に権利の確認が要ります。

取ってよいかを誰が見るか

取る前に、相手のサイトの利用規約と robots.txt を見る人を決めます。n8nのHTTP Requestには robots.txt を確かめる設定が無いので、作る人が自分で確かめます。この記事は法的な判断を示すものではないので、迷うものは社内の法務か弁護士に確認してから動かします。

集め方の一覧

集め方使うノード向くもの壊れやすさ例
公式のAPI専用ノード、無ければ「HTTP Request」決まった形のデータを継続して取る低い自社の広告の数字、政府や自治体の公開データ
RSS(定時に読む)「Schedule Trigger」+「RSS Read」(RSSを読む)複数のサイトの新着を毎朝まとめる低い業界ニュース、競合のブログ
RSS(更新を待つ)「RSS Feed Trigger」(RSSの更新で動く)1つのフィードの新着をすぐ知らせる低い取引先のプレスリリース
HTMLの取り出し「HTTP Request」+「HTML」(Extract HTML Content)RSSもAPIも無いページの一部高い競合の「お知らせ」一覧
外部の取得サービス「Airtop」「Jina AI」などJavaScriptで描くページ中くらい動的に表示される一覧
人の目人が確認してスプレッドシートに入力ログインが要る、規約で禁止されているなし会員向けの価格表
ノードを追加するパネルで「RSS」と検索し、「RSS Read」と「RSS Feed Trigger」が並んでいる状態
ノードを追加するパネルで「RSS」と検索し、「RSS Read」と「RSS Feed Trigger」が並んでいる状態

HTTP Requestの基本(メソッド、ヘッダー、認証、リトライ)は「n8nで外部サービスとつなぐ:Webhook・HTTP Request・API」に書いたので、ここではWebページを取るときに違うところだけ書きます。

RSSで業界ニュースと競合の更新を毎朝Slackへ

この章で作るもの

ノード役割主な設定
Schedule Trigger毎朝8時に動くTrigger Interval: Days、Trigger at Hour: 8am
Google Sheets「情報源一覧」を読むGet Row(s)
RSS Readフィードを1本ずつ読むURL: {{ $json['URL'] }}
Edit Fields (Set)項目をそろえる情報源・タイトル・URL・識別子・公開日時
Filter古い記事を落とす公開日時が36時間以内、または日付が無い
Remove Duplicates前に送った記事を落とすRemove Items Processed in Previous Executions
Aggregate1通にまとめるAll Item Data (Into a Single List)
Slack#業界ニュース に送るMessage の Send
完成した「業界ニュース収集」ワークフローの全体
完成した「業界ニュース収集」ワークフローの全体
完成した「業界ニュース収集」ワークフローの全体

RSSのURLを見つける

RSSのURLはページに書かれていないことが多いので、次の順で探します。

  1. サイトのフッターや「お知らせ」ページに、RSSのアイコンやリンクが無いか見る
  2. ページを右クリックして「ページのソースを表示」を開き、application/rss+xml か application/atom+xml で検索する。<link rel="alternate" ...> の href がフィードのURL
  3. WordPressで作られたサイトは標準でフィードを出している。URLの形は設定で変わり、末尾に /feed/ か ?feed=rss2 を付けると開けることが多い
  4. 見つからなければ、そのサイトはRSSが無いものとして、APIかHTMLの取り出しに進む

ブラウザで開いてXMLの文字が並べばフィードです。Googleアラートのように結果がメールで届くものは、Gmailで受けて処理します。

情報源をスプレッドシートで管理する

フィードのURLをノードに直接書くと、増やすたびにワークフローを直すことになります。Googleスプレッドシートに「情報源一覧」というシートを作り、営業企画の人がそこに行を足せば済む形にします。

名前URL種類
業界ニュースAhttps://news.example.com/feed/業界
競合B社ブログhttps://www.example.com/blog/feed/競合
取引先C社リリースhttps://c.example.com/rss.xml取引先

ワークフローを組む

  1. 新しいワークフローを作り、名前を「業界ニュース収集」にする。
  2. 最初のノードに「Schedule Trigger」を追加し、「Trigger Interval」を「Days」、「Trigger at Hour」を「8am」、「Trigger at Minute」を 0 にする。
  3. 後ろに「Google Sheets」を追加し、「Operation」を「Get Row(s)」にして「情報源一覧」のシートを選ぶ。
  4. 後ろに「RSS Read」を追加し、「URL」を式にして {{ $json['URL'] }} を入れる。
  5. RSS Readの「Settings」タブで「On Error」を「Continue (using error output)」にする。
  6. エラー用の出口にSlackノードをつなぎ、「フィードが読めませんでした」と情報源の名前を送る。
  7. 通常の出口に「Edit Fields (Set)」を追加し、下の表の項目を作る。
  8. 「Execute workflow」(ワークフローを実行)を押し、Edit Fieldsの出力に記事が並ぶことを確かめる。
項目式ねらい
情報源{{ $('Google Sheets').item.json['名前'] }}どのフィードの記事かをSlackに出す
タイトル{{ $json.title }}見出し
URL{{ $json.link }}記事のリンク
識別子{{ $json.guid ? $json.guid : $json.link }}重複の判定に使う。guidが無いフィードはURLで代える
公開日時{{ $json.isoDate }}古い記事を落とすのに使う
RSS Readの出力(JSON表示)。title・link・pubDate・content・contentSnippet・guid・isoDateが並んでいる状態
RSS Readの出力(JSON表示)。title・link・pubDate・content・contentSnippet・guid・isoDateが並んでいる状態

RSS Readは、前のノードから届いたアイテムの数だけ動きます。情報源一覧に3行あれば3本のフィードを読み、記事を1件1アイテムにして出します。isoDate は世界標準時なので、日本時間で見せるなら {{ DateTime.fromISO($json.isoDate).setZone('Asia/Tokyo').format('M/d HH:mm') }} と直します。日付の式は「n8nの式(Expression)とデータの扱い:$json・ノードの参照・日付・JSON」で扱います。

手順5は、1本のフィードが消えただけで全体が止まるのを避けるためです。「Continue」だけにすると読めなかったことに誰も気づかないので、エラー用の出口から知らせます。

重複を出さない

毎朝同じフィードを読むと、昨日送った記事がまた入ってきます。ここを2段で防ぎます。

  1. Edit Fieldsの後ろに「Filter」を追加する。
  2. 1つめの条件の左に {{ $json['公開日時'] }}、型を「Date & Time」、比べ方を「is after」、右に {{ $now.minus({ hours: 36 }) }} を入れる。
  3. 条件を足し、{{ $json['公開日時'] }} が「is empty」を入れ、2つの条件のつなぎを「OR」にする。
  4. Filterの後ろに「Remove Duplicates」を追加し、「Operation」を「Remove Items Processed in Previous Executions」にする。
  5. 「Keep Items Where」を「Value Is New」、「Value to Dedupe On」を {{ $json['識別子'] }} にする。
Remove Duplicatesの設定(Remove Items Processed in Previous Executions、Value Is New、Value to Dedupe On に識別子)
Remove Duplicatesの設定(Remove Items Processed in Previous Executions、Value Is New、Value to Dedupe On に識別子)

Remove Duplicatesは、前の実行までに通した値を覚えておき、同じ値のアイテムを落とします。覚えておく件数は「History Size」で、初期値は10,000件です。1日50件でも半年以上もつので触りません。覚えた値は初期設定ではこのノードだけのものです。

Filterを前に置くのは、初日や履歴を消した直後に、フィードに残った古い記事が一度に流れるのを防ぐためです。日付の無い記事は「is empty」で通し、Remove Duplicatesのほうで止めます。

判定のキーにはURLよりguidを使います。運用しているn8nで、記事のURLの後ろに配信元が計測用の ?utm_source=... を付けたり外したりするサイトがあり、URLで判定していたら同じ記事が週に何度も届きました。

Slackに1通にまとめて送る

記事ごとに送ると、新着が20件の朝はチャンネルが20通で埋まります。1通にまとめます。

  1. Remove Duplicatesの後ろに「Limit」を追加し、「Max Items」を 30 にする(多すぎる朝の保険)。
  2. 後ろに「Aggregate」を追加し、「Aggregate」を「All Item Data (Into a Single List)」、「Put Output in Field」を articles にする。
  3. 後ろに「Slack」を追加し、「Resource」を「Message」、「Operation」を「Send」にして #業界ニュース を選ぶ。
  4. 「Message Text」に下の式を入れる。
  5. 「Options」の「Include Link to Workflow」をオフにする(初期値はオンで、メッセージの末尾にn8nへのリンクが付く)。
  6. 「Publish」(公開)を押す。Schedule Triggerは公開しないと動かない。
{{ '今朝の新着 ' + $json.articles.length + '件\n' + $json.articles.map(a => '• <' + a['URL'] + '|' + a['タイトル'].replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;') + '>(' + a['情報源'] + ')').join('\n') }}

Slackでは <URL|表示する文字> がリンクになります。&・<・> は記号として読まれるので、タイトルの中のものは &amp;・&lt;・&gt; に置き換えます。

新着が0件の朝は、Remove Duplicatesから先にアイテムが流れないので、Slackには何も届きません。Slackノードの細かい使い方は「n8nとSlack連携:通知・投稿・ボタンで承認・スラッシュコマンド」に、毎朝動かす設定とタイムゾーンは「n8nの定期実行とサブワークフロー:Schedule Triggerと部品化」に書いています。

RSS Feed Triggerとの使い分け

RSSには、更新を待って動く「RSS Feed Trigger」もあります。

Schedule Trigger+RSS ReadRSS Feed Trigger
読めるフィードスプレッドシートの行の数だけノード1つにつき1本
動くタイミング決めた時刻「Poll Times」で決めた間隔で見に行き、新着があったとき
重複の防ぎ方Remove Duplicatesで自分で作るノードが最後に見た記事の日時を覚える
n8n Cloudの実行回数動くたびに1回新着があったときだけ1回
向く使い方複数のフィードを朝にまとめて読む1本のフィードの新着をすぐ知らせる

RSS Feed Triggerは、記事の日時(isoDate)が前回見た一番新しい記事より後のものだけを流します。日付の無いフィードでは一度も動かず、公開前からある記事も流れません。テストの「Fetch Test Event」(テストイベントを取得)で出るのは先頭の1件だけです。

RSSの無いページからHTMLノードで取り出す

競合のB社がRSSを出しておらず、「お知らせ」ページ(https://www.example.com/news/)にだけ新着が載るとします。利用規約と robots.txt で禁止されていないことを確かめた前提で進めます。

JavaScriptで描くページかを先に確かめる

HTTP Requestが受け取るのは、サーバーが最初に返すHTMLだけです。ブラウザがあとからJavaScriptで読み込んで描く一覧は、n8nには届きません。作り始める前に見分けます。

  1. ブラウザで「お知らせ」ページを開く。
  2. 右クリックして「ページのソースを表示」を開く。
  3. 一覧に出ている記事のタイトルを1つコピーし、ソースの画面で検索する。
  4. 見つかればHTTP Requestで取れる。見つからなければ、この章の手順では取れないので「取れないときの代わり」に進む。

CSSセレクタを決める

HTMLノードは、CSSセレクタ(ページの中の場所を指す書き方)で取り出す場所を指定します。ページのソースが次の形だったとします。

<ul class="news-list">
  <li>
    <time datetime="2026-10-20">2026.10.20</time>
    <a href="/news/1024/">料金プラン改定のお知らせ</a>
  </li>
  <li>
    <time datetime="2026-10-14">2026.10.14</time>
    <a href="/news/1019/">年末年始の営業について</a>
  </li>
</ul>

記事のタイトルを右クリックして「検証」を選ぶと、該当するHTMLの行が開発者ツールに出ます。そこでコピーできるセレクタは body > div:nth-child(3) > ul > li:nth-child(1) > a のように長く、構成が少し変わるだけで外れるので、クラス名を使った短い形に書き直します。

書き方指す場所例
.クラス名そのクラスが付いた要素.news-list
親 子親の中にある子(何段下でもよい).news-list li
親 > 子親の直下の子だけul.news-list > li
要素[属性]その属性を持つ要素a[href]
要素[属性="値"]属性が特定の値の要素meta[property="og:title"]
:nth-child(n)n番目の要素table tr td:nth-child(2)

ページを取る

  1. 新しいワークフロー「競合お知らせ収集」を作り、「Schedule Trigger」で毎朝8時10分に動くようにする。
  2. 「HTTP Request」を追加し、「Method」を GET、「URL」を https://www.example.com/news/ にする。
  3. 「Send Headers」をオンにし、「Name」に User-Agent、「Value」に n8n-news-check/1.0 (+mailto:info@example.co.jp) を入れる。
  4. 「Add option」から「Timeout」を足し、30000 にする。
  5. 「Add option」から「Response」を足し、「Response Format」を「Text」、「Put Output in Field」を data にする。
  6. 「Execute step」(このノードだけ実行)を押し、出力の data にページのHTMLが文字列で入っていることを確かめる。
HTTP Requestの出力。data にHTMLの文字列が入っている状態
HTTP Requestの出力。data にHTMLの文字列が入っている状態

User-Agentに連絡先を書くのは、相手のサーバーの管理者が「どこの誰が取りに来ているか」を分かるようにするためです。ブラウザのふりをするUser-Agentは使いません。

HTMLノードで1件ずつに分けてから取り出す

いきなり日付とタイトルとリンクを別々に配列で取ると、日付の無い記事が1件混ざっただけで、日付とタイトルが1つずつずれます。まず記事1件ぶんのHTMLを取り、1件ずつに分けてから中身を取ります。

  1. HTTP Requestの後ろに「HTML」を追加し、「Operation」を「Extract HTML Content」にする。
  2. 「Source Data」を「JSON」、「JSON Property」を data にする。
  3. 「Extraction Values」の「Key」に rows、「CSS Selector」に ul.news-list > li、「Return Value」に「HTML」を入れ、「Return Array」をオンにする。
  4. 後ろに「Split Out」を追加し、「Fields To Split Out」に rows を入れる。
  5. 後ろにもう1つ「HTML」を追加し、「Extract HTML Content」、「JSON Property」を rows にする。
  6. 下の表の3つを「Extraction Values」に足す。
  7. 「Execute step」を押し、記事が1件1アイテムで、日付・タイトル・リンクがそろって出ることを確かめる。
KeyCSS SelectorReturn ValueAttribute
日付timeAttributedatetime
タイトルaText
リンクaAttributehref
2つめのHTMLノードの設定。Extraction Valuesに日付・タイトル・リンクの3行がある状態
2つめのHTMLノードの設定。Extraction Valuesに日付・タイトル・リンクの3行がある状態
2つめのHTMLノードの出力。1件ずつ日付・タイトル・リンクが並んでいる状態
2つめのHTMLノードの出力。1件ずつ日付・タイトル・リンクが並んでいる状態

「Options」の「Trim Values」と「Clean Up Text」は初期値がオンで、余分な空白と改行を落とします。タイトルに「NEW」の印などの文字が混ざるときは、「Text」の行に出る「Skip Selectors」に .new-icon のように除く場所を書きます。

リンクを完全なURLに直してSlackへ

href には /news/1024/ のように、サイトの中の住所だけが書かれていることが多いです。そのままSlackに出しても開けないので、Edit Fieldsで直します。

項目式
URL{{ $json['リンク'].startsWith('http') ? $json['リンク'] : 'https://www.example.com' + $json['リンク'] }}
情報源競合B社お知らせ

この後ろはRSSの章と同じで、Remove Duplicatesの「Value to Dedupe On」を {{ $json['URL'] }} にし、Aggregateでまとめて送ります。

文字化けするページ

古い日本語のサイトには、文字コードがShift_JISのものがあります。サーバーの返すヘッダーに charset=Shift_JIS があればそのまま読めますが、ページの中の <meta charset> にしか無いと文字化けすることがあります。その場合は受け取り方を変えます。

  1. HTTP Requestの「Response Format」を「File」にする。
  2. 後ろに「Extract from File」を追加し、「Operation」を「Extract From Text File」にする。
  3. 「Options」から「File Encoding」を足し、shiftjis を選ぶ(EUC-JPのページは eucjp)。
  4. 出力の data を、HTMLノードの「JSON Property」に指定する。

やってはいけないこと・気を付けること

項目気を付けることこの記事での扱い
利用規約自動での取得や転載を禁止しているサイトがある禁止なら取らない。迷えば法務に確認
robots.txt機械で見てほしくない場所を示すファイル。守らせる仕組みは無く、従うかは取る側次第開いて Disallow の場所は取らない
アクセス頻度短い間隔で何度も取ると相手のサーバーの負担になる1サイト1日数回まで。複数ページは「Batching」で数秒あける
ログインが要るページ規約で機械での取得を禁止していることが多く、パスワードもn8nに預けることになる取らない
JavaScriptで描くページHTTP Requestでは中身が届かない「取れないときの代わり」へ
取ったものの使い方本文を保存して社外に配ると、取り方とは別の問題になる見出しとリンクだけ社内に流す
ボット対策の画面確認画面やアクセス拒否は、相手が機械での取得を望んでいない合図回避しない
個人の情報名前や連絡先を集めて名簿にすると個人情報の扱いになる集めない

robots.txt は https://www.example.com/robots.txt のようにサイトの直下にあります。User-agent: * はすべての取得プログラムへの指示で、Disallow: /members/ は「/members/ 以下は見ないでほしい」という意味です。

User-agent: *
Disallow: /members/
Disallow: /search

アクセス頻度は、n8nの側では「動かす間隔」と「1回に取るページ数」で決まります。競合のお知らせは1日1回、朝に見れば足ります。n8n CloudではSchedule Triggerは動くたびに1回の実行と数えられるので、間隔を詰めると実行回数の枠も減ります(「n8nの料金:Cloudとセルフホストの費用、商用利用の線引き」)。

取れないときの代わり

取れない理由代わりの手押さえどころ
JavaScriptで描くページ開発者ツールの「ネットワーク」で、ページが裏で呼んでいるJSONのURLを探す公開APIでないものは予告なく変わる。規約も確かめる
JavaScriptで描くページ「Airtop」ノード(クラウド上のブラウザを操作する)や「Jina AI」ノード(URLの中身を読みやすい形に変える)外部サービスの契約と費用が要る。規約で禁止されていれば使わない
規約で禁止、ログインが要る相手に公式のAPIやデータ提供の有無を問い合わせる取引先なら更新をメールで知らせてもらう形でも足りる
規約で禁止、ログインが要るデータ提供サービスや官公庁の公開データを探す有料のものは契約の範囲を読む
年に数回しか変わらない人が確認してスプレッドシートに入力し、n8nは入力をきっかけにSlackへ知らせる月初に1回など回数を決める

応用

AIで要約して、関係の深い記事だけ流す

見出しが多い朝は、全部を読む人がいなくなります。Aggregateの前に、AIで「自社に関係があるか」を判定する段を入れます。

  1. Remove Duplicatesの後ろに「Information Extractor」(文章から決めた項目を取り出す)を追加する。
  2. 「Text」に {{ $json['タイトル'] }} を入れる。
  3. 「Schema Type」を「From Attribute Descriptions」にし、「関連度」(1〜3の数字)を足す。
  4. 後ろに「Filter」を置き、関連度が2以上だけを残す。

モデルのつなぎ方と費用は「n8nでAIエージェントを作る:ChatGPT・Claude・Geminiをつなぐ」に書いています。AIに渡すのは見出しまでにします。本文を取りに行くと、相手へのアクセスが記事の数だけ増えます。

ページの内容が変わったときだけ知らせる

料金ページや採用ページのように、一覧ではなく1ページの中身が変わったかを見たいときは、取り出した文字列の指紋(ハッシュ)を比べます。

  1. HTMLノードで見たい場所(例 .price-table)を「Text」で取る。
  2. 後ろに「Crypto」を追加し、「Action」を「Hash」、「Type」を「SHA256」にして、取った文字列を「Value」に入れる。
  3. 後ろに「Remove Duplicates」を置き、「Value to Dedupe On」にハッシュの値を入れる。
  4. 値が前回と違うときだけアイテムが残るので、そのままSlackに知らせる。

ページの中に日時やアクセス数のような毎回変わる部分が入ると、毎朝「変わった」と届きます。取る場所を、変化を見たい部分だけに絞ります。

できないことと、その代わり

できないこと代わりの手
HTTP RequestでJavaScriptを動かしてから中身を取る裏で呼んでいるJSONを探す、Airtopなど外部のブラウザサービスを使う
HTMLノードでXPathを使うCSSセレクタで書く。書けない複雑な条件は「Code」ノードで文字列を処理する
robots.txt を読んで自動で止まる作る人が先に読み、取ってよい場所だけをURLに書く
RSS Feed Triggerで日付の無いフィードを見張るSchedule Trigger+RSS Read+Remove Duplicatesにする
RSS Feed Trigger1つで複数のフィードを見るフィードごとにトリガーを置くか、Schedule Trigger+RSS Readで一覧を読む
ログインして会員ページを取り続ける公式のAPI、書き出し機能、人の目に切り替える

よく詰まるところ

症状原因直し方
HTMLノードの出力が空JavaScriptで描くページで、HTTP Requestで取ったHTMLに一覧が無い「ページのソースを表示」で探す。無ければ代わりの手へ
先月まで取れていたのに急に0件相手がページのデザインを変え、セレクタが外れた取れた件数が0件の日はSlackに警告を出す。セレクタを書き直す
日付とタイトルの組み合わせがずれる項目ごとに配列で取り、1件だけ日付が無かった記事1件ぶんのHTMLを取り、Split Outで分けてから中身を取る
Slackのリンクを押しても開かないhref がサイト内の住所だけEdit Fieldsでドメインを付けて完全なURLにする
文字化けするShift_JISのページで、ヘッダーに文字コードが無い「File」で受けて「Extract From Text File」の「File Encoding」で shiftjis を選ぶ
同じ記事が何度も届くURLに計測用の文字が付いたり外れたりする判定のキーをguidにする
テストで動いたのに、公開後の初回に何も届かない2.44.7では、テストの実行でもRemove Duplicatesが記事を覚える公開前に「Clear Deduplication History」を1回流すか、翌日の新着から届くものとして扱う
RSS Feed Triggerがずっと動かないフィードに日付が無い、または公開後に新着がまだ無いブラウザでフィードを開き pubDate を確かめる。無ければSchedule Trigger+RSS Readにする
1本のフィードの不調で朝のまとめが届かないRSS Readのエラーでワークフロー全体が止まった「On Error」を「Continue (using error output)」にし、エラーの出口から知らせる
403が返る相手が機械での取得を拒否している回避しない。APIや問い合わせなど別の手段にする
タイムアウトする相手のページが重い、または初期値10秒で足りない「Timeout」を 30000 にする。続くならそのサイトは対象から外す
新着20件がSlackに20通で届く記事ごとにSlackノードが動いたAggregateで1アイテムにまとめてから送る
Executionsタブの実行と、HTMLノードの出力で rows が空の配列になっている状態
Executionsタブの実行と、HTMLノードの出力で rows が空の配列になっている状態
Executionsタブの実行と、HTMLノードの出力で rows が空の配列になっている状態

0件の日を見逃さないのが一番大事です。HTMLから取る仕組みは、壊れてもエラーになりません。セレクタが外れると、HTMLノードは1アイテムのまま rows が空の配列で出し、Split Outの後ろは0件になって何も流れません。HTMLノードの後ろにIFノードを置いて rows が空かを見て、空ならSlackに「お知らせページから1件も取れませんでした」と送る段を足しておきます。止まったことに気づく仕組み全体は「n8nを止めずに運用する:アップデート・バックアップ・エラー通知・脆弱性」に書いています。

次にやること

あわせて読む