عدم تسلط به مفاهیم پایه

فکر می‌کنید سخت‌ترین قسمت Data Scrapping چیست؟

ایجاد آبجکت request و ارسال آن به سرور؟
حفظ ViewState؟
login کردن به سایت راه دور؟
دریافت و نگهداری cookie؟
مسائل DNS؟
ور رفتن با استرینگ‌ها، استخراج دیتا، Regex و XPath؟
مسائل Encoding؟

نه اشتباه می‌کنید! برای من سخت‌ترین قسمت کار، بحث Stream بود. چند جا کار متوقف شد. ابتدا فکر کردم مشکل از نحوه کار با Request/Response یا Cookie است. کلی هم وقت تلف کردم ولی دست آخر فهمیدم مشکل از عدم استفاده صحیح از Stream بوده. مثلاً نبستن یک stream. این قضیه برای چند صدمین بار به من ثابت کرد که عدم تسلط به بعضی مفاهیم پایه چقدر می‌تواند مشکل ساز باشد.

‫خلاصه‌ای کوتاه از پروتکل HTTP

HTTP پروتکلی برای تبادل اطلاعات بین Web Serverها و Web Broswerها است. HTTP در معماری شبکه در بالاترین لایه یعنی لایه Application قرار دارد. این پروتکل مبتنی بر text ساده است و بر پایه پروتکل TCP کار می‌کند.

HTTP یک پروتکل Client-Server بوده و از جفت‌های Request/Response تشکیل شده است. هر گاه Browser درخواستی از Web Server داشته باشد، درخواست خودش را از طریق قالب Request به سرور می‌فرستد. یک درخواست می‌تواند شامل درخواست کد html یک صفحه خاص یا ارسال اطلاعات login به یک سرور باشد. سرور به ازای هر Request یک Response می‌فرستد. داخل هر Response اطلاعاتی نظیر جواب سرور، headerها و encoding قرار می‌گیرد. تفاوت نسخه 1.0 و 1.1 این پروتکل خیلی زیاد نیست. نسخه 1.1 سریعتر عمل می‌کند.

برای امتحان کردن پروتکل یک وب سرور بدون استفاده از Browser می‌توان از ابزار ویندوزی telnet استفاده کرد. برای این کار در command prompt دستور telnet karvis.ir 80 را وارد کنید. سپس دستور GET /index.html را در محیط آماده telnet صادر کنید. telnet محتواب فایل index.html را به شما نمایش خواهد داد (به جای karvis.ir می‌توانید از هر وب‌سایت دیگری هم استفاده کنید). علاوه بر اینها می‌توانید از فیدلر به عنوان یک ابزار خیلی قدرتمند برای مشاهده و دستکاری Request/Response استفاده کنید.

headerها نقش مهمی در Request/Responseها دارند. خیلی از اطلاعاتی که ما راجع به اطلاعات و صفحات وب داریم در headerها ذخیره می‌شوند. شناخت متودهای Request مثل GET و POST در استفاده از HTTP خیلی مهم است. اگر کسی بخواهد در زمینه Scraping کار کند یا بخواهد تکنولوژی ASP.NET را کامل بشناسد، حتماً باید اطلاعات خوبی راجع به HTTP داشته باشد.

فیدلر

اگر روزی علاقه‌مند به ور رفتن با HTTP شدید، حالا چرا برای درک عملکرد ASP.NET چه برای مقاصد Web Scraping حتما سری به فیدلر بزنید. با فیدلر می‌توان تمام Requestها و Responseها ارسالی و دریافتی از وب‌سرور را مشاهده کرده و در صورت نیاز دستکاری کرد. مثلاً یکی از اولین چیزهای جالبی که می‌شود با فیدلر دید، passwordهایی است که سایت‌های غیر https بدون هیچ مخفی‌سازی به سرور می‌فرستند. با فیدلر می‌توان حجم بخش‌های مختلف تشکیل دهنده یک صفحه وب نوعی را به دست آورد. 

بهترین راه آشنایی با فیدلر دیدن ویدئوهای آن است. این ویدئوها از این آدرس قابل دریافت هستند.

نرم‌افزارهای داده‌ای در وب

در حین جستجو در oDesk متوجه شدم طیف جالبی از پروژه‌ها وجود دارد که انجامشان جالب خواهد بود: پروژه‌های مربوط به استخراج یا بازتولید اطلاعات از وب. این جور پروژه‌ها و نرم‌افزار برای ما برنامه‌نویسان ایرانی کمتر شناخته شده هستند. البته یک دلیل آن هم این است که معمولاً در بازار داخل چنین تقاضایی وجود ندارد. تقریباً تمام پروژه‌های داخلی از نوع پروژه‌ها مالی اداری هستند و همیشه یک سر آنها به دیتابیس وصل هستند.

به عنوان نمونه به پروژه‌های زیر توجه کنید:

۱- ترافیک مصنوعی: بازدید مصنوعی از یک سایت خاصی به طور مکرر. به طوری که سایت مذکور فکر کند بازدید کننده‌هایش از OSها و browserها مختلف آمده است.

۲- تبدیل فید RSS به تکست

۳- نرم‌افزار email marketing

پ. ن.: به نرم‌افزارهای web scraping هم نگاهی بیندازید.