ProxynetProxynet

چگونه تغییرات یک وب‌سایت را پایش کنیم و هشدار بگیریم؟

تاریخ انتشار:

15 دقیقه مطالعه

Enver Kaya
نویسنده: Enver Kaya
زنگی که به صدا درآمده و ذره‌بینی روی سطرهای شماره‌دار صفحه؛ سطر تاریخ و تبلیغ خط خورده و فقط سطر تغییرکرده آبی می‌درخشد.

مدیر فروش یک شرکت تجهیزات پزشکی در قونیه هر صبح کارش را با تازه کردن صفحه مناقصه‌های شهرداری کلان‌شهر و اطلاعیه‌های خرید دو بیمارستان شروع می‌کند. یک جمعه اطلاعیه‌ای ساعت 17:40 منتشر می‌شود و او آن را سه‌شنبه می‌بیند. فرصت باقی‌مانده برای آماده کردن پیشنهاد قیمت کافی نیست. در همان هفته، تیم حقوقی می‌فهمد که یک تأمین‌کننده نرم‌افزار بی‌سروصدا شرایط استفاده‌اش را تغییر داده است، اما فقط وقتی فاکتور تازه می‌رسد.

هر دو مشکل یک راه‌حل دارند: ابزاری که صفحه را زیر نظر می‌گیرد و وقتی تغییر کرد به شما خبر می‌دهد. این راهنما توضیح می‌دهد پایش چگونه کار می‌کند، از کدام نوع مقایسه استفاده کنید، جلوی هشدارهای کاذب را چگونه بگیرید، هر چند وقت یک بار بررسی کنید، این ابزار که به آن پایشگر (monitor) می‌گوییم کجا اجرا شود و چه زمانی پروکسی جایی در این چیدمان دارد. رصد قیمت و موجودی راهنمای جداگانه‌ای دارد: رصد قیمت رقبا در فروشگاه اینترنتی چگونه انجام می‌شود؟

پایش تغییرات وب‌سایت چیست و به چه کاری می‌آید؟

پایش تغییرات وب‌سایت (یا مانیتورینگ تغییرات سایت) یعنی برنامه‌ای صفحه‌ای را طبق زمان‌بندی بار می‌کند، نسخه‌ای از آن نگه می‌دارد و وقتی نسخه تازه با نسخه قبلی فرق داشت به شما خبر می‌دهد. این کار جای تازه کردن دستی صفحه را می‌گیرد، روشی که عصر جمعه یا در روزهای تعطیل از کار می‌افتد.

هدف‌های مفید اغلب قیمت نیستند: آگهی‌های مناقصه برای شرکتی که به بخش دولتی می‌فروشد، شرایط استفاده یک تأمین‌کننده برای تیم حقوقی، سایت آگهی استخدام برای منابع انسانی و یادداشت‌های انتشار نسخه برای واحد فناوری اطلاعات. بررسی اینکه سایت در دسترس است یا از کار افتاده کار دیگری است به نام پایش آپتایم (uptime monitoring): این راهنما درباره چیزی است که صفحه می‌گوید، نه اینکه صفحه بار می‌شود یا نه.

پایش تغییرات وب‌سایت گام‌به‌گام چگونه کار می‌کند؟

هر ابزاری در هر بررسی همین هفت گام را اجرا می‌کند:

  1. نشانی و نقطه دید. URL را وارد می‌کنید. برخی ابزارها اجازه می‌دهند کشوری را هم که بررسی از آن انجام می‌شود انتخاب کنید.
  2. بارگذاری صفحه. یک درخواست ساده HTTP فایل HTML را دریافت می‌کند. صفحه‌هایی که محتوایشان را با JavaScript می‌سازند به مرورگر واقعی نیاز دارند، وگرنه پایشگر فقط یک قاب خالی می‌بیند (صفحه‌های ایستا و پویا در وب اسکرپینگ).
  3. انتخاب بخشی که باید زیر نظر باشد. به یک بخش اشاره می‌کنید، مانند جدول اطلاعیه‌ها. در ابزارهای بدون کد کافی است روی آن کلیک کنید؛ در پس‌زمینه این انتخاب به یک انتخابگر CSS یا یک عبارت XPath تبدیل می‌شود (انتخابگر CSS یا XPath: کدام برای اسکرپینگ؟).
  4. پاک‌سازی متن. فاصله‌های اضافی حذف می‌شوند و اگر برای تاریخ‌ها یا شمارنده‌ها قاعده‌ای گذاشته باشید، آن‌ها هم کنار گذاشته می‌شوند.
  5. مقایسه. متن پاک‌شده سطربه‌سطر با نسخه قبلی مقایسه می‌شود.
  6. فیلتر کردن. قاعده‌ها تعیین می‌کنند که تفاوت ارزش هشدار دارد یا نه؛ برای نمونه فقط سطرهای افزوده‌شده یا سطرهایی که یک کلیدواژه دارند.
  7. هشدار و ذخیره. ابزار تفاوت را می‌فرستد و نسخه تازه را در تاریخچه خود نگه می‌دارد.

گام 2 می‌تواند سبک‌تر باشد. سرور می‌تواند به صفحه برچسب ETag یا تاریخ Last-Modified بدهد. کلاینتی که این‌ها را همراه درخواست بعدی برگرداند در واقع می‌پرسد آیا صفحه تغییر کرده است؛ اگر نکرده باشد، سرور بدون بدنه صفحه با 304 Not Modified پاسخ می‌دهد. MDN درخواست‌های شرطی را توضیح می‌دهد و قواعد آن در ⁦RFC 9110⁩ آمده است.

پیش از همه، دو میان‌بر را امتحان کنید: فید RSS، اگر سایت آن را داشته باشد، و تاریخ‌های lastmod در نقشه سایت که نشان می‌دهند کدام صفحه‌ها تغییر کرده‌اند (چگونه نقشه سایت را پیدا کنیم و همه صفحه‌هایش را فهرست کنیم؟).

تفاوت مقایسه متنی، مقایسه عنصر و مقایسه تصویری چیست؟

مقایسه متنی به واژه‌های صفحه نگاه می‌کند، سطربه‌سطر. کمترین نویز را دارد و در متن هشدار به‌راحتی خوانده می‌شود. تغییرات طراحی را نمی‌بیند: تصویر بنر تازه هیچ متنی را تغییر نمی‌دهد.

مقایسه عنصر فقط یک بخش از صفحه را زیر نظر دارد، مانند فهرست مناقصه‌های باز، و بقیه را نادیده می‌گیرد. نقطه ضعف آن انتخابگر است: پس از طراحی دوباره سایت، ممکن است آن عنصر نام تازه‌ای بگیرد و پایشگر چیزی پیدا نکند.

مقایسه تصویری اسکرین‌شات‌ها را پیکسل به پیکسل مقایسه می‌کند. لوگوی تازه یا چیدمان تغییرکرده را می‌بیند، اما پرنویزترین گزینه است و همیشه به مرورگر واقعی نیاز دارد؛ پس بیشترین بار را روی سایت می‌گذارد.

برای صفحه شرایط استفاده مقایسه متنی، برای فهرست مناقصه‌ها مقایسه عنصر و برای بنر کمپین مقایسه تصویری مناسب است. اگر تأمین‌کننده‌ای «مهلت 30 روزه اعلام فسخ» را به «15 روز» تغییر دهد، مقایسه متنی دقیقاً همان یک سطر را نشان می‌دهد.

سرویس ابری، افزونه مرورگر یا سرور خودتان؟

جست‌وجوی «جایگزین Visualping» اغلب در واقع این پرسش است که پایشگر کجا اجرا شود. اطلاعات زیر در سپتامبر 2026 بررسی شده‌اند؛ پلن‌ها تغییر می‌کنند.

مسیرنمونهکجا اجرا می‌شودسایت کدام IP را می‌بیندکوتاه‌ترین فاصلهپروکسیمناسب برای
افزونه مرورگرپایشگر محلی Distillمرورگر شما که باید باز بماندIP خودتان5 ثانیهپشتیبانی نمی‌شودیک نفر، چند صفحه
سرویس ابریVisualping، پایشگر ابری Distillسرورهای سرویسIP سرویس (Visualping: به‌طور پیش‌فرض کالیفرنیا)2 دقیقه در پلن‌های بالاتراز فهرست موقعیت‌های سرویستیم‌هایی که نمی‌خواهند چیزی نصب کنند
سرور خودتانchangedetection.io در Dockerسرور شماIP سرور یا پروکسی شماخودتان تعیین می‌کنیدبرای هر پایشگر، در proxies.jsonصفحه‌های زیاد، داده درون سازمان، تیمی با پشتیبان فنی

Distill دو حالت دارد. مستندات آن می‌گوید پایشگرهای محلی در مرورگر شما بررسی می‌کنند، می‌توانند هر 5 ثانیه اجرا شوند و از پروکسی پشتیبانی نمی‌کنند؛ در حالی که پایشگرهای ابری با خاموش بودن رایانه شما هم کار می‌کنند و از پروکسی پشتیبانی می‌کنند.

Visualping یک سرویس ابری است. به‌طور پیش‌فرض از یک IP در آمریکا (کالیفرنیا) بررسی می‌کند و برای هر کار می‌توان از منوی «Check from» موقعیت دیگری انتخاب کرد، همان‌طور که مرکز راهنمای آن توضیح می‌دهد. در سپتامبر 2026 ترکیه در این فهرست نبود؛ اگر به نسخه‌ای از صفحه نیاز دارید که در ترکیه نمایش داده می‌شود، این نکته مهم است.

changedetection.io نرم‌افزاری متن‌باز با مجوز ⁦Apache 2.0⁩ است. آن را با Docker اجرا می‌کنید، در مرورگر روی پورت 5000 باز می‌کنید و همه نسخه‌ها روی دستگاه خودتان می‌مانند. نسخه 0.60.7 در 17 سپتامبر 2026 منتشر شد؛ فرمان نصب در مخزن پروژه آمده است. همین تیم نسخه میزبانی‌شده‌ای را هم می‌فروشد.

جلوی هشدارهای کاذب ناشی از تاریخ، تبلیغ و کد نشست را چگونه بگیریم؟

پایشگری که در هر بررسی هشدار بدهد، دیر یا زود نادیده گرفته می‌شود. نویز معمولاً از این‌ها می‌آید:

  • سطرهایی مانند «3 دقیقه پیش به‌روز شد» و شمارنده‌های بازدیدکننده
  • بنرهای چرخان، تبلیغ‌ها و اعلان‌های کوکی
  • توکن‌های امنیتی و شناسه‌های نشست در HTML که در هر بازدید تازه‌اند
  • آزمون‌های A/B و کادرهای «پیشنهاد برای شما»
  • فهرست‌هایی که هر بار با ترتیب دیگری برمی‌گردند

راه‌حل نخست محدود کردن دامنه است. فقط بخشی را که برایتان مهم است زیر نظر بگیرید و متن آن را مقایسه کنید، نه HTML آن را: کدهای نشست در HTML قرار دارند، پس مقایسه HTML هر بار تغییری می‌بیند. در فهرست مناقصه‌ها، عنوان اطلاعیه‌ها را زیر نظر بگیرید، نه ستونی که تاریخ امروز را نشان می‌دهد.

راه‌حل دوم قاعده‌ها هستند. در changedetection.io این قاعده‌ها زیر Edit > Filters & Triggers قرار دارند. گزینه «Ignore lines containing» سطرهایی را که با یک واژه یا یک عبارت منظم (regular expression)، مانند الگوی تاریخ، جور درمی‌آیند کنار می‌گذارد. گزینه «Keyword triggers - Trigger/wait for text» فقط وقتی هشدار می‌دهد که واژه‌ای مانند «مناقصه» در صفحه ظاهر شود. زیر Text filtering می‌توانید فقط «Added lines» را نگه دارید، و گزینه «Only trigger when unique lines appear in all history» وقتی محتوای قدیمی فقط جابه‌جا می‌شود ساکت می‌ماند. آموزش رسمی این گزینه‌ها را نشان می‌دهد.

هر چند وقت یک بار بررسی کنیم و بار روی سایت را چگونه پایین نگه داریم؟

فاصله بررسی را با دو چیز هماهنگ کنید: صفحه واقعاً هر چند وقت یک بار تغییر می‌کند و هشدار دیرهنگام چه هزینه‌ای دارد. صفحه شرایط استفاده به روزی یک بررسی نیاز دارد و فهرست مناقصه‌ها به ساعتی یک بررسی در ساعت‌های کاری. راهنمای رصد قیمت بخش مفصلی درباره انتخاب فاصله بررسی دارد.

درخواست ساده یک فایل HTML را دریافت می‌کند؛ مرورگر تصویرها، اسکریپت‌ها و فونت‌ها را هم بار می‌کند و این اغلب در هر بررسی به ده‌ها درخواست می‌رسد. مرورگر را فقط جایی به کار ببرید که لازم است و این نکته‌ها را هم رعایت کنید:

  • به زمان‌های بررسی تأخیر تصادفی کوچکی بیفزایید تا پایشگرها هم‌زمان سراغ یک سایت نروند.
  • در changedetection.io، مقدار reuse_time_minimum در proxies.json تعیین می‌کند چند ثانیه باید بگذرد تا یک پروکسی دوباره به کار رود.
  • فایل robots.txt سایت را بخوانید. ⁦RFC 9309⁩ می‌گوید قواعد این فایل مجوز دسترسی نیستند، اما از خزنده‌ها خواسته می‌شود به آن‌ها احترام بگذارند.

اگر سایت با 403 یا 429 پاسخ داد، دفعات بررسی را کم کنید، به درخواست ساده برگردید، از صاحب سایت بپرسید یا پایش آن صفحه را متوقف کنید. معنای این کدها در کدهای وضعیت HTTP در وب اسکرپینگ آمده است. عوض کردن پروکسی تا وقتی یکی رد شود راه‌حل نیست.

چرا در پایش تغییرات وب‌سایت از پروکسی استفاده کنیم؟

دو دلیل موجه وجود دارد.

صفحه بسته به کشور متفاوت دیده می‌شود. یک سایت می‌تواند به بازدیدکنندگانی از ترکیه، آلمان یا آمریکا زبان، کمپین یا متن شرایط دیگری نشان دهد. پایشگری در کالیفرنیا ممکن است نسخه آمریکایی را زیر نظر داشته باشد، در حالی که شما به نسخه ترکیه نیاز دارید. اینکه سایت‌ها کشور شما را چگونه حدس می‌زنند در آیا از آدرس IP می‌توان موقعیت را یافت و چرا اشتباه است؟ آمده و همین اثر در نتایج جست‌وجو در چگونه در Google از کشوری دیگر جست‌وجو کنیم؟

IP دفتر شما نباید بار پایشگرها را بکشد. اگر سایتی به‌خاطر ده‌ها پایشگر، نرخ درخواست IP دفتر را محدود کند، همکارانی که همان سایت را مرور می‌کنند هم کند می‌شوند. یک IP خروجی جداگانه این دو را از هم جدا نگه می‌دارد؛ اما سقفی را که سایت تعیین کرده بالا نمی‌برد.

برای دیدی پایدار از یک کشور، پروکسی ISP نشانی ثابتی به شما می‌دهد و پروکسی با نشست ثابت یک IP را 1 تا 60 دقیقه نگه می‌دارد. برای اینکه صفحه را همان‌طور ببینید که کاربران خانگی یک کشور می‌بینند، از پروکسی مسکونی استفاده کنید (چگونه از پروکسی مسکونی استفاده کنیم). صفحه‌های عمومی دولتی اغلب به پروکسی نیاز ندارند یا پروکسی دیتاسنتر برایشان کافی است (تفاوت پروکسی مسکونی و دیتاسنتر چیست؟). اینجا پروکسی نسخه درست صفحه را به شما نشان می‌دهد؛ راهی برای پنهان شدن از سایت نیست.

پیشرفته: یک پروکسی برای هر پایشگر در changedetection.io

اگر همه پایشگرها از یک پروکسی استفاده می‌کنند، HTTP_PROXY و HTTPS_PROXY را مانند نوشته استفاده از پروکسی در wget تنظیم کنید؛ این دو متغیر حالت درخواست ساده را پوشش می‌دهند و حالت مرورگر مقدار playwright_proxy_server را می‌خواند. برای اینکه به هر پایشگر کشور خودش را بدهید، فایل proxies.json را در پوشه datastore بسازید، همان‌طور که ویکی پیکربندی پروکسی توضیح می‌دهد:

json
{
  "tr": {
    "label": "Türkiye",
    "url": "http://user-country-tr:pass@pr.proxynet.io:8000",
    "reuse_time_minimum": 300
  },
  "de": {
    "label": "Germany",
    "url": "http://user-country-de:pass@pr.proxynet.io:8000",
    "reuse_time_minimum": 300
  }
}

label نامی است که رابط کاربری نشان می‌دهد و url نشانی پروکسی است. بخش -country-tr در نام کاربری کشور را تعیین می‌کند؛ نام کاربری دقیق هر کشور را از پنل Proxynet کپی کنید. برنامه گزینه «No proxy» را خودش اضافه می‌کند.

سپس یک پایشگر را باز کنید، به Edit > Request بروید، زیر «Proxy» گزینه «Türkiye» یا «Germany» را انتخاب و ذخیره کنید. فایل در هر بارگذاری صفحه خوانده می‌شود، پس نیازی به راه‌اندازی دوباره نیست؛ اگر گزینه‌ها دیده نمی‌شوند، JSON را از نظر غلط تایپی بررسی کنید. پروکسی‌ها را زیر Settings > CAPTCHA & Proxies هم می‌توانید اضافه کنید. نشانی‌های SOCKS5 با socks5:// شروع می‌شوند، اما رابط کاربری یادآوری می‌کند که SOCKS5 با نام کاربری و رمز عبور فقط در حالت درخواست ساده کار می‌کند؛ برای حالت مرورگر از نشانی HTTP استفاده کنید یا IP سرورتان را در لیست سفید IP پنل بگذارید.

برای اطمینان از کارکرد، صفحه‌ای را که IP و کشور شما را نشان می‌دهد یک بار با «Türkiye» و یک بار با «No proxy» زیر نظر بگیرید (آیا پروکسی کار می‌کند؟ چگونه پروکسی را آزمایش کنیم).

کاربردها

  • مناقصه‌ها و اطلاعیه‌های عمومی: پایشگر روی صفحه‌های تدارکات و اطلاعیه‌ها (خزنده وب).
  • شرایط و سیاست‌های رقبا: سیاست بازگشت کالا، شرایط استفاده و صفحه‌های کمپین (حفاظت از برند).
  • تغییرات بازار: محصولات تازه و متن‌های تغییرکرده در یک صنعت (تحقیقات بازار).
  • قیمت و موجودی: کاری جداگانه است؛ صفحه رصد قیمت را ببینید.
  • فرستادن هشدار به سامانه‌های دیگر: هر تغییر را به یک تیکت، یک صفحه‌گسترده یا یک کانال گفتگو بفرستید (وب اسکرپینگ با n8n).
  • مرزهای حقوقی: اینکه چه چیزی را می‌توانید گردآوری کنید به کشور و نوع داده بستگی دارد (آیا اسکرپینگ وب قانونی است؟).

خطاهای رایج

  • زیر نظر گرفتن کل صفحه. هر تاریخ و بنری به هشدار تبدیل می‌شود.
  • مقایسه HTML به‌جای متن. کدهای نشست در هر بازدید عوض می‌شوند، پس هشدارها هرگز تمام نمی‌شوند.
  • پایش صفحه JavaScript با درخواست ساده. پایشگر دو قاب خالی را با هم مقایسه می‌کند.
  • بررسی در هر دقیقه. بیشتر صفحه‌ها هفته‌ای چند بار تغییر می‌کنند.
  • نادیده گرفتن 403 یا 429، یا عبور به‌زور با پروکسی‌های تازه. هر دو کد یعنی سایت از شما می‌خواهد آهسته‌تر شوید یا دست بکشید.
  • بررسی از کشور اشتباه. شما نسخه آمریکایی را زیر نظر دارید، در حالی که مشتریانتان نسخه ترکیه را می‌بینند.
  • فرستادن همه هشدارها برای همه. هر پایشگر را به کسی بسپارید که درباره آن اقدام می‌کند.

راهنمای انتخاب

نیازپیشنهاد
چند صفحه، رایانه شما تمام روز روشن استافزونه مرورگر (پایشگر محلی Distill)؛ یک بخش را انتخاب کنید و متن را مقایسه کنید
پایش شبانه‌روزی، بدون نصبیک سرویس ابری؛ بررسی کنید که کشور شما را پشتیبانی کند
ده‌ها یا صدها صفحه، داده درون سازمانchangedetection.io روی سرور خودتان با Docker
صفحه بسته به کشور فرق می‌کندپروکسی کشوری برای هر پایشگر (proxies.json)؛ پروکسی ISP ثابت یا مسکونی با نشست ثابت
هشدار کاذب در هر بررسییک بخش را انتخاب کنید، متن را مقایسه کنید، سطرهای تاریخ را نادیده بگیرید و فقط برای سطرهای افزوده‌شده هشدار بگیرید
محتوای JavaScript، پایشگر صفحه خالی می‌بیندحالت مرورگر، با دفعات بررسی کمتر
سایت با 403 یا 429 پاسخ می‌دهدکمتر بررسی کنید، robots.txt را بخوانید، از صاحب سایت بپرسید یا متوقف کنید؛ برای عبور از آن تلاش نکنید

پرسش‌های متداول

Distill Web Monitor چه کاری انجام می‌دهد؟

یک صفحه یا بخشی از آن را زیر نظر می‌گیرد و وقتی تغییر کرد به شما هشدار می‌دهد. پایشگرهای محلی در مرورگر شما اجرا می‌شوند که باید باز بماند؛ پایشگرهایی که از برنامه وب آن اضافه می‌شوند در فضای ابری Distill اجرا می‌شوند.

چگونه از تغییر یک وب‌سایت باخبر شوم؟

روی صفحه یک پایشگر بسازید و یک کانال هشدار به آن وصل کنید. بیشتر ابزارها ایمیل می‌فرستند و می‌توانند در Slack، Telegram یا یک webhook هم پیام بگذارند. changedetection.io از کتابخانه Apprise استفاده می‌کند و بیش از 85 نوع اعلان را فهرست کرده است.

آیا می‌توان تغییرات وب‌سایت را رایگان پایش کرد؟

بله. پایشگرهای محلی Distill و changedetection.io که روی سرور خودتان نصب شده، جز سخت‌افزار خودتان هزینه‌ای ندارند. پلن‌های رایگان سرویس‌های ابری تعداد صفحه‌هایی را که زیر نظر می‌گیرید و دفعات بررسی آن‌ها را محدود می‌کنند.

آیا با changedetection.io از پروکسی رایگان استفاده کنم؟

نه. پروکسی رایگان هر صفحه‌ای را که زیر نظر دارید، و اغلب اطلاعات ورود شما را، از سرور فردی ناشناس عبور می‌دهد. خطرهای آن در پروکسی رایگان و سایت‌های وب پروکسی امن هستند؟ آمده است.

چرا changedetection.io خطای 403 نشان می‌دهد؟

سایت درخواست را رد کرده است؛ اغلب چون پایشگر بیش از حد بررسی می‌کند یا سایت نمی‌خواهد آن بخش به‌صورت خودکار بازدید شود. دفعات بررسی را کم کنید، robots.txt و شرایط سایت را بخوانید و از صاحب سایت بپرسید. اگر پاسخ همان ماند، پایشگر را متوقف کنید.

آیا می‌توان تاریخچه تغییرات یک صفحه را دید؟

پایشگر هر نسخه را از روزی که آن را راه‌اندازی کرده‌اید نگه می‌دارد. برای نسخه‌های قدیمی‌تر، Wayback Machine از Internet Archive اغلب نسخه‌های ذخیره‌شده‌ای دارد.

خلاصه

پایش تغییرات وب‌سایت وقتی جواب می‌دهد که بخش درستی از صفحه را زیر نظر بگیرید. بخشی را که مهم است انتخاب کنید، متن آن را مقایسه کنید، تاریخ‌ها و شمارنده‌ها را نادیده بگیرید و فقط برای سطرهای تازه هشدار بگیرید. به همان اندازه بررسی کنید که صفحه واقعاً تغییر می‌کند و مسیر اجرا را بر پایه تعداد صفحه‌ها و جایی که داده باید بماند انتخاب کنید. وقتی کشور اهمیت دارد، به هر پایشگر پروکسی خودش را بدهید؛ صفحه خدمات پروکسی ما گزینه‌ها را نشان می‌دهد.

پرسش از ChatGPTپرسش از Claude