اسکرپ قیمت ارز یا API رسمی؟ مقایسهٔ فنی، حقوقی و هزینهٔ واقعی
اسکرپ قیمت ارز از سایتها ارزان به نظر میرسد اما با تغییر قالب، مسدود شدن IP و دادههای غلط هزینهساز میشود. مقایسهٔ کامل اسکرپینگ و API با جدول تصمیم.

- اسکرپینگ یعنی خواندن HTML سایت دیگر و بیرون کشیدن عدد؛ با هر تغییر طراحی آن سایت، کد شما میشکند.
- مشکل بزرگتر از قطعی، دادهٔ غلط بیصداست: عددی که اشتباه خوانده شده اما خطا نمیدهد.
- API رسمی قرارداد ثابت دارد (JSON، کد خطا، زمان بهروزرسانی، تعداد منبع) و هزینهٔ نگهداری را تقریباً صفر میکند.
بسیاری از برنامهنویسها اولین بار با یک اسکریپت کوچک سراغ قیمت دلار میروند: صفحهٔ یک سایت قیمت را باز میکند، عدد را از HTML بیرون میکشد و تمام. این روش برای یک پروژهٔ آزمایشی کار میکند، اما در محصولی که مشتری به آن اعتماد کرده، دیر یا زود مشکل میسازد. در این مقاله اسکرپ قیمت ارز را با استفاده از API رسمی از نظر فنی، حقوقی و هزینهٔ واقعی مقایسه میکنیم.
این مقاله بخشی از راهنمای کامل API قیمت ارز و طلا است.
اسکرپینگ دقیقاً چطور کار میکند؟
اسکریپت اسکرپر صفحهٔ وب را مثل یک مرورگر دریافت میکند، ساختار HTML را تحلیل میکند و با یک انتخابگر (مثلاً #usd .price) عدد را برمیدارد. اگر سایت مقصد قیمت را با جاوااسکریپت بارگذاری کند، اسکرپر باید یک مرورگر کامل (مثل Playwright) را اجرا کند که چند ده برابر حافظه و زمان مصرف میکند.
پنج مشکلی که در اسکرپینگ قیمت پیش میآید
۱. شکستن با هر تغییر طراحی
انتخابگر شما به ساختار صفحهٔ دیگری وابسته است. سایت مقصد یک کلاس CSS را عوض میکند، یک ستون جدید اضافه میکند یا جدول را به کارت تبدیل میکند و کد شما از کار میافتد. معمولاً هم این اتفاق در بدترین زمان، مثلاً روز نوسان شدید بازار، کشف میشود.
۲. دادهٔ غلط بیصدا
از قطعی بدتر، وقتی است که اسکرپر عدد اشتباه برمیدارد و خطا هم نمیدهد: قیمت یورو بهجای دلار، نرخ خرید بهجای فروش، عدد ریالی بهجای تومانی، یا قیمت دیروز از یک بخش آرشیوی. سیستم شما با اطمینان عدد غلط را به مشتری نشان میدهد.
۳. مسدود شدن IP
سایتهای قیمت معمولاً پشت سرویسهایی مثل کلودفلر هستند و درخواستهای مکرر از یک IP را بهعنوان ربات مسدود میکنند یا کپچا نشان میدهند. دور زدن این محدودیتها هم هزینه دارد و هم اخلاقی و قانونی نیست.
۴. نامعلوم بودن تازگی عدد
صفحهٔ وب به شما نمیگوید عدد چه ساعتی ثبت شده و از چند منبع آمده است. در API، فیلدهای updated_at و sources این را صریح میگویند و شما میتوانید تصمیم بگیرید عدد قدیمی را نمایش ندهید.
۵. ریسک حقوقی
بیشتر سایتها در شرایط استفادهٔ خود برداشت خودکار داده را منع کردهاند. استفادهٔ تجاری از دادهٔ اسکرپشده میتواند به اختلاف حقوقی یا دستکم مسدود شدن دائمی برسد.

جدول مقایسه
| معیار | اسکرپینگ | API رسمی |
|---|---|---|
| هزینهٔ شروع | صفر | پلن رایگان دارد |
| هزینهٔ نگهداری | بالا و غیرقابل پیشبینی | تقریباً صفر |
| پایداری قالب داده | با هر تغییر سایت میشکند | قرارداد ثابت و نسخهدار |
| اعلام خطا | ندارد؛ خطای بیصدا | کدهای 401، 403، 429 صریح |
| زمان و منبع عدد | نامعلوم | updated_at و sources در هر نرخ |
| چند دارایی در یک درخواست | به تعداد صفحهها | یک درخواست برای همه |
| وضعیت حقوقی | معمولاً خلاف شرایط سایت | مجاز طبق شرایط سرویس |
هزینهٔ واقعی را حساب کنید
فرض کنید هر بار که اسکرپر میشکند، یک برنامهنویس دو ساعت برای پیدا کردن مشکل و اصلاح وقت میگذارد و این اتفاق ماهی دو بار میافتد. یعنی سالی حدود ۴۸ ساعت کار، بهعلاوهٔ ساعتهایی که سایت عدد غلط یا قدیمی نشان داده است. در بیشتر کسبوکارها همین هزینه از اشتراک سالانهٔ یک API بیشتر است. محاسبهٔ دقیقتر هزینهٔ مالکیت را در نسخهٔ انگلیسی Scraping vs Financial API آوردهایم.
چه زمانی اسکرپینگ منطقی است؟
- پروژهٔ آموزشی یا آزمایشی که خطای آن هزینهای ندارد.
- دادهای که هیچ وبسرویسی ارائه نمیدهد و صاحب سایت اجازهٔ برداشت را داده است.
- بررسی یکبارهٔ آرشیو برای پژوهش، با رعایت فایل robots.txt و فاصلهٔ زمانی مناسب بین درخواستها.
برای همهٔ موارد دیگر، از یک API با قرارداد روشن استفاده کنید. اگر دنبال API رایگان غیررسمی هستید، پیش از آن خطرات وبسرویسهای غیررسمی قیمت ارز را هم بخوانید.
نشانههای اینکه اسکرپر شما در حال خراب شدن است
اگر هنوز اسکرپر دارید، این علائم را زیر نظر بگیرید. هر کدام دیده شد، وقت مهاجرت است:
- عدد چند ساعت تغییر نمیکند در حالی که بازار باز است.
- گاهی عددی ده برابر یا یکدهم مقدار معمول ثبت میشود (احتمالاً ریال و تومان قاطی شده).
- زمان پاسخ اسکرپر رو به افزایش است یا گاهی کپچا برمیگردد.
- برای نگه داشتن اسکرپر مجبور شدهاید مرورگر کامل (Headless Chrome) اجرا کنید.
- بیش از یک انتخابگر جایگزین در کد گذاشتهاید «برای وقتی که سایت عوض شد».
یک روش کمهزینه برای کشف خطای بیصدا، مقایسهٔ خودکار است: عدد اسکرپر را هر ساعت با یک منبع دوم مقایسه کنید و اگر بیش از ۲ درصد فاصله داشت، هشدار بفرستید.
مهاجرت از اسکرپر به API در یک روز
- فهرست دادهها: بنویسید اسکرپر دقیقاً چه عددهایی را برمیدارد و هر کدام کجا استفاده میشود.
- نگاشت نمادها: برای هر عدد، نماد معادل را از
GET /assetsپیدا کنید (مثلاً «دلار آزاد» =usd، «سکه طرح جدید» =emami). - واحد: بررسی کنید اسکرپر ریال برمیداشت یا تومان و
quoteرا همان بگذارید تا کدهای بعدی تغییر نکنند. - لایهٔ جایگزین: تابعی که امروز عدد اسکرپشده را برمیگرداند، از فردا همان خروجی را از API بدهد. بقیهٔ سیستم نباید بفهمد.
- اجرای موازی: یک هفته هر دو را اجرا و مقایسه کنید، سپس اسکرپر را خاموش کنید.
نمونهکد دریافت نرخ در پایتون و PHP آماده است.
نکتهٔ اخلاقی و فنی برای اسکرپهای مجاز
اگر به هر دلیلی مجبورید از سایتی داده بردارید که API ندارد، دستکم اینها را رعایت کنید: فایل robots.txt و شرایط سایت را بخوانید، فاصلهٔ بین درخواستها را چند ثانیه نگه دارید، User-Agent واقعی و قابل تماس بگذارید و نتیجه را کش کنید تا یک صفحه را بارها نخوانید. اینها هم احتمال مسدود شدن را کم میکنند و هم بار اضافه روی سایت دیگران نمیگذارند.

نرخهای لحظهای مرتبط با این مطلب: قیمت دلار، قیمت طلای ۱۸ عیار، قیمت سکه امامی.

نظرات (۰)
نظرها پس از تأیید نمایش داده میشوند؛ برای ارسال، ورود به حساب لازم است.


