استخراج داده از سایت با کمک هوش مصنوعی

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

🍊 تیم نارنگی ⏱ 5 دقیقه مطالعه
صفحه کد پایتون برای استخراج داده در کنار جدول خروجی مرتب‌شده

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

نوشتن اسکریپت برای این کار سال‌ها مهارت تخصصی بود. حالا نیست — ولی نه به آن شکلی که تبلیغ می‌شود. آنچه عوض شده این است که نوشتن کد آسان شده؛ آنچه عوض نشده، فهمیدن ساختار صفحه و مسئولیت رعایت قواعد سایت مقصد است.

قبل از هر کدی: سه سؤال

این سه سؤال را جدی بپرسید، چون بعداً هزینه‌شان بیشتر می‌شود:

  1. آیا این سایت API دارد؟ خیلی از سایت‌ها راه رسمی برای گرفتن داده دارند که هم پایدارتر است هم بدون دردسر. یک جستجوی ساده معمولاً جوابش را می‌دهد.
  2. شرایط استفاده و robots.txt چه می‌گویند؟ فایل robots.txt در ریشه‌ی هر سایت است و می‌گوید کدام مسیرها برای دسترسی خودکار باز است.
  3. داده‌ی شخصی در کار هست؟ نام، شماره تماس و آدرس کاربران، حساسیت حقوقی دارد. جمع‌آوریشان را جدی نگیرید مگر با مبنای روشن.
⚠️ فشار روی سرور، هزینه‌ی واقعی دارد

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

پیدا کردن سلکتور: جایی که مدل خوب کار می‌کند

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

این تکه HTML از یک صفحه‌ی محصول است:
[چند ده خط HTML]

برای این موارد سلکتور CSS بده:
- نام محصول · قیمت · موجودی · لینک تصویر

قواعد:
- سلکتوری بده که به کلاس‌های تصادفی وابسته نباشد
- اگر ساختار قابل اتکا نیست، بگو کدام قسمت شکننده است
- کد پایتون با BeautifulSoup بنویس که این چهار را
  در یک دیکشنری برگرداند و اگر چیزی نبود None بگذارد

این کار در عمل خیلی سریع‌تر از خواندن دستی HTML است. فقط حواستان باشد کلاس‌های عجیب و طولانی معمولاً تولید خودکارند و با هر به‌روزرسانی سایت عوض می‌شوند.

سه چالشی که همه به آن می‌خورند

مشکلنشانهراه‌حل
محتوای جاوااسکریپتیکد خالی برمی‌گرداندمرورگر واقعی یا گرفتن مستقیم درخواست شبکه
صفحه‌بندیفقط ۲۰ ردیف اولحلقه روی شماره‌ی صفحه با شرط توقف
بلاک‌شدنخطای ۴۲۹ یا ۴۰۳فاصله بین درخواست‌ها، هدر درست
تغییر ساختار سایتخروجی خالی می‌شودهشدار خودکار وقتی ردیف صفر شد
داده‌ی ناهمگونقیمت‌ها فرمت‌های مختلفمرحله‌ی جدا برای نرمال‌سازی

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

تمیزکردن داده: پرسودترین بخش

اینجاست که هوش مصنوعی بیشترین ارزش را دارد و کمتر از همه استفاده می‌شود. داده‌ی خام وب همیشه کثیف است: قیمت‌ها گاهی «۱٬۲۵۰٬۰۰۰ تومان» و گاهی «1250000»، تاریخ‌ها شمسی و میلادی قاطی، فاصله‌های اضافی، و کاراکترهای عربی به‌جای فارسی.

این نمونه از داده‌ی خام خروجی است:
[۱۵ ردیف نمونه]

یک تابع پایتون بنویس که هر ردیف را تمیز کند:
- قیمت به عدد صحیح تومان
- ی و ک عربی به فارسی
- ارقام فارسی به لاتین
- تاریخ به فرمت یکسان
- فاصله‌های اضافی و نیم‌فاصله‌ی اشتباه
- ردیف ناقص را دور نریز، فیلد خالی بگذار

خروجی نهایی: CSV با هدر فارسی و انکدینگ UTF-8
💡 اول ده ردیف، بعد ده هزار

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

مدل کجا کمک می‌کند و کجا نه

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

در دیباگ هم روش درست همان است که در راهنمای برنامه‌نویسی با هوش مصنوعی گفته‌ایم: متن کامل خطا را بچسبانید، نه توصیف آن. و اگر خروجی نهایی را می‌خواهید تحلیل کنید، راهنمای تحلیل داده ادامه‌ی طبیعی این مسیر است.

جمع‌بندی

استخراج داده از سایت با کمک هوش مصنوعی، مسیر ورود را کوتاه کرده اما مسئولیت را حذف نکرده. کد در چند دقیقه نوشته می‌شود؛ تصمیم درباره‌ی اینکه از کجا داده بردارید، با چه سرعتی، و با چه داده‌ای چه کنید، هنوز کاملاً با شماست.

روال پیشنهادی: اول دنبال API بگردید، بعد robots.txt را بخوانید، بعد روی ده ردیف تست کنید، و در آخر بگذارید آرام اجرا شود. برای دیدن ساختار یک اسکریپر ساده، مستندات BeautifulSoup شروع خوبی است و بقیه‌اش را می‌توانید در نارنگی بپرسید.

مطالب مرتبط:

پرسش‌های پرتکرار

استخراج داده از سایت قانونی است؟ +
بستگی به سایت و نوع داده دارد. خواندن اطلاعات عمومی معمولاً مشکلی ندارد، ولی شرایط استفاده‌ی سایت، فایل robots.txt و به‌ویژه داده‌های شخصی کاربران محدودیت ایجاد می‌کند. برای کار تجاری بهتر است پیش از شروع با یک متخصص حقوقی مشورت کنید.
مدل خودش می‌تواند صفحه را باز کند و داده بردارد؟ +
بعضی سرویس‌ها قابلیت جستجو و باز کردن صفحه دارند ولی این با استخراج ساختاریافته فرق دارد. برای گرفتن هزار ردیف داده‌ی مرتب، هنوز اسکریپت لازم است؛ نقش مدل نوشتن و اصلاح همان اسکریپت است.
سایت جاوااسکریپتی است و کد چیزی برنمی‌گرداند. چه کنم؟ +
یعنی محتوا بعد از بارگذاری صفحه ساخته می‌شود و کتابخانه‌های ساده آن را نمی‌بینند. دو راه دارید: استفاده از ابزارهایی که مرورگر واقعی اجرا می‌کنند، یا پیدا کردن درخواست شبکه‌ای که خود صفحه می‌زند و گرفتن مستقیم همان داده.
کپچا را چطور رد کنم؟ +
دور زدن کپچا کار درستی نیست؛ کپچا یعنی صاحب سایت صریحاً گفته دسترسی خودکار را نمی‌خواهد. راه درست این است که دنبال API رسمی بگردید یا با صاحب سایت تماس بگیرید و اجازه بگیرید.
#وب اسکرپینگ #کراولر #پایتون #جمع آوری داده #تبدیل داده به csv
به‌دردِ کسی می‌خورد؟ تلگرام واتساپ
🍊

خواندنش خوب بود — حالا امتحانش کن

هرچه در این صفحه خواندی، همین حالا داخلِ نارنگی قابلِ اجراست. ثبت‌نام با شماره‌ی موبایل، نارنگیِ رایگانِ شروع، بدونِ نیاز به کارت یا تحریم‌شکن.

بدونِ نصب هم کار می‌کند — ولی در اپ سریع‌تر است