استخراج داده از سایت با کمک هوش مصنوعی
نوشتن اسکریپر دیگر نیاز به تسلط کامل بر HTML ندارد، ولی جایی که واقعاً وقت میخورد جای دیگری است: تمیزکردن دادهی درهم و رعایت قواعد سایت مقصد.
فرض کنید باید قیمت دویست محصول را از چند فروشگاه جمع کنید، یا فهرست آگهیهای یک دسته را در یک فایل داشته باشید. کپیکردن دستی چند ساعت وقت میبرد و هفتهی بعد باید دوباره تکرارش کنید.
نوشتن اسکریپت برای این کار سالها مهارت تخصصی بود. حالا نیست — ولی نه به آن شکلی که تبلیغ میشود. آنچه عوض شده این است که نوشتن کد آسان شده؛ آنچه عوض نشده، فهمیدن ساختار صفحه و مسئولیت رعایت قواعد سایت مقصد است.
قبل از هر کدی: سه سؤال
این سه سؤال را جدی بپرسید، چون بعداً هزینهشان بیشتر میشود:
- آیا این سایت API دارد؟ خیلی از سایتها راه رسمی برای گرفتن داده دارند که هم پایدارتر است هم بدون دردسر. یک جستجوی ساده معمولاً جوابش را میدهد.
- شرایط استفاده و robots.txt چه میگویند؟ فایل robots.txt در ریشهی هر سایت است و میگوید کدام مسیرها برای دسترسی خودکار باز است.
- دادهی شخصی در کار هست؟ نام، شماره تماس و آدرس کاربران، حساسیت حقوقی دارد. جمعآوریشان را جدی نگیرید مگر با مبنای روشن.
اسکریپتی که بدون وقفه درخواست میفرستد، برای سایت مقصد مثل حمله عمل میکند. بین درخواستها یک تا سه ثانیه فاصله بگذارید، شبها اجرا کنید، و اگر یک بار داده را گرفتید دوباره از اول نگیرید. این هم اخلاقیتر است و هم شانس بلاکشدنتان را کم میکند.
پیدا کردن سلکتور: جایی که مدل خوب کار میکند
سختترین بخش برای تازهکارها این است که بفهمند دادهی موردنظر در کدام تگ و با چه کلاسی نشسته. راهحل ساده: صفحه را باز کنید، روی عنصر موردنظر راستکلیک و بازرسی کنید، بخش HTML آن را کپی کنید و بدهید.
این تکه HTML از یک صفحهی محصول است:
[چند ده خط HTML]
برای این موارد سلکتور CSS بده:
- نام محصول · قیمت · موجودی · لینک تصویر
قواعد:
- سلکتوری بده که به کلاسهای تصادفی وابسته نباشد
- اگر ساختار قابل اتکا نیست، بگو کدام قسمت شکننده است
- کد پایتون با BeautifulSoup بنویس که این چهار را
در یک دیکشنری برگرداند و اگر چیزی نبود None بگذارد
این کار در عمل خیلی سریعتر از خواندن دستی HTML است. فقط حواستان باشد کلاسهای عجیب و طولانی معمولاً تولید خودکارند و با هر بهروزرسانی سایت عوض میشوند.
سه چالشی که همه به آن میخورند
| مشکل | نشانه | راهحل |
|---|---|---|
| محتوای جاوااسکریپتی | کد خالی برمیگرداند | مرورگر واقعی یا گرفتن مستقیم درخواست شبکه |
| صفحهبندی | فقط ۲۰ ردیف اول | حلقه روی شمارهی صفحه با شرط توقف |
| بلاکشدن | خطای ۴۲۹ یا ۴۰۳ | فاصله بین درخواستها، هدر درست |
| تغییر ساختار سایت | خروجی خالی میشود | هشدار خودکار وقتی ردیف صفر شد |
| دادهی ناهمگون | قیمتها فرمتهای مختلف | مرحلهی جدا برای نرمالسازی |
نکتهی دوم جدول را دستکم نگیرید. خیلی وقتها دادهای که صفحه نمایش میدهد از یک آدرس دیگر میآید که خروجی JSON مرتب دارد. تب Network در ابزار توسعهدهندهی مرورگر را باز کنید و ببینید صفحه چه درخواستی میزند — اگر پیدایش کنید، کل کار به چند خط کد تبدیل میشود.
تمیزکردن داده: پرسودترین بخش
اینجاست که هوش مصنوعی بیشترین ارزش را دارد و کمتر از همه استفاده میشود. دادهی خام وب همیشه کثیف است: قیمتها گاهی «۱٬۲۵۰٬۰۰۰ تومان» و گاهی «1250000»، تاریخها شمسی و میلادی قاطی، فاصلههای اضافی، و کاراکترهای عربی بهجای فارسی.
این نمونه از دادهی خام خروجی است:
[۱۵ ردیف نمونه]
یک تابع پایتون بنویس که هر ردیف را تمیز کند:
- قیمت به عدد صحیح تومان
- ی و ک عربی به فارسی
- ارقام فارسی به لاتین
- تاریخ به فرمت یکسان
- فاصلههای اضافی و نیمفاصلهی اشتباه
- ردیف ناقص را دور نریز، فیلد خالی بگذار
خروجی نهایی: CSV با هدر فارسی و انکدینگ UTF-8
هر اسکریپت را روی یک نمونهی کوچک که خودتان جوابش را میدانید اجرا کنید. اگر روی ده ردیف درست بود، به بقیه اعتماد کنید. اجرای مستقیم روی کل داده یعنی اگر خطایی باشد، ساعتها بعد و بعد از فشار زیاد به سرور مقصد متوجهش میشوید.
مدل کجا کمک میکند و کجا نه
مدل کد مینویسد، سلکتور پیشنهاد میدهد، خطا را تفسیر میکند و داده را تمیز میکند. آنچه نمیکند: صفحه را نمیبیند مگر خودتان HTML را بدهید، ساختار امروز سایت را نمیداند، و مسئولیت حقوقی کار را به عهده نمیگیرد.
در دیباگ هم روش درست همان است که در راهنمای برنامهنویسی با هوش مصنوعی گفتهایم: متن کامل خطا را بچسبانید، نه توصیف آن. و اگر خروجی نهایی را میخواهید تحلیل کنید، راهنمای تحلیل داده ادامهی طبیعی این مسیر است.
جمعبندی
استخراج داده از سایت با کمک هوش مصنوعی، مسیر ورود را کوتاه کرده اما مسئولیت را حذف نکرده. کد در چند دقیقه نوشته میشود؛ تصمیم دربارهی اینکه از کجا داده بردارید، با چه سرعتی، و با چه دادهای چه کنید، هنوز کاملاً با شماست.
روال پیشنهادی: اول دنبال API بگردید، بعد robots.txt را بخوانید، بعد روی ده ردیف تست کنید، و در آخر بگذارید آرام اجرا شود. برای دیدن ساختار یک اسکریپر ساده، مستندات BeautifulSoup شروع خوبی است و بقیهاش را میتوانید در نارنگی بپرسید.
مطالب مرتبط: