কম্পিউটার টিউটোরিয়াল

মেকানাইজ দিয়ে অ্যাডভান্সড ওয়েব স্ক্র্যাপিং: ফর্ম, লিংক ও পেজিনেশন মাস্টার করা

এই টিউটোরিয়ালে আপনি শিখবেন কিভাবে মেকানাইজ (Mechanize) ব্যবহার করে লিংক ক্লিক করতে হয়, ফর্ম পূরণ করতে হয় এবং ফাইল আপলোড করতে হয়। আপনি মেকানাইজ পেজ অবজেক্ট স্লাইস করার পদ্ধতিও শিখবেন এবং গুগল সার্চ অটোমেট করে ফলাফল সংরক্ষণ করার উপায়ও জানবেন।

বিষয়সূচি

  • সিঙ্গেল পেজ বনাম পেজিনেশন
  • মেকানাইজ (Mechanize)
  • এজেন্ট (Agent)
  • পেজ (Page)
  • নোকোগিরি (Nokogiri) মেথডসমূহ
  • লিংক (Links)
  • ক্লিক (Click)
  • ফর্ম (Forms)

সিঙ্গেল পেজ বনাম পেজিনেশন

আমরা ইতিমধ্যে নোকোগিরি ব্যবহার করে একটি একক পেজের স্ক্রিন স্ক্র্যাপ করার পদ্ধতি শিখেছি। এটি বহু পেজ থেকে কন্টেন্ট এক্সট্র্যাকশনের জন্য একটি ভালো ভিত্তি তৈরি করেছে।

আসলে আমরা যে সমস্যাটি সমাধান করতে চাই সেটি ১৪০টিরও বেশি эпизোডের কন্টেন্ট পেতে জড়িত—যা একটি একক ওয়েব পেজে যুক্ত করা যেকোনো যুক্তিসঙ্গতভাবে সম্ভব নয়। আমাদের পেজিনেশনের সাথে কাজ করতে হবে এবং কন্টেন্টটি র‍্যাবিট হোল (গভীরতর স্তর) পর্যন্ত অনুসরণ করার উপায় খুঁজে বের করতে হবে।

ইহানেই নোকোগিরি থামে এবং আরেকটি দরকারী জেম মেকানাইজ (Mechanize) কাজে লাগে।

মেকানাইজ (Mechanize)

মেকানাইজ একটি আরো শক্তিশালী টুল যাতে অনেক সুবিধা রয়েছে। এটি মূলত ওয়েবসাইটের সাথে ইন্টারঅ্যাকশন অটোমেট করতে সক্ষম করে যেখান থেকে আপনাকে কন্টেন্ট বের করতে হয়। এই দিক থেকে এটি ক্যাপিবারা (Capybara) টেস্টিং-এর কিছু কার্যকারিতার কথা স্মরণ করায়।

ভুলবেন না, একটি একক পেজে নোকোগিরি নিয়ে খেলা নিজে যথেষ্ট ভালো, কিন্তু আরও জটিল ডেটা এক্সট্র্যাকশন কাজের জন্য আমাদের কিছু অধিক হর্সপাওয়ার দরকার। আমরা প্রয়োজনততন পেজ ক্রল করতে পারি এবং তাদের এলিমেন্টের সাথে ইন্টারঅ্যাক্ট করতে পারি—মানুষের আচরণ অনুকরণ এবং অটোমেট করে। খুব শক্তিশালী বিষয়!

এই জেম আপনাকে লিংক ফলো করতে, ফর্ম ফিল্ড পূরণ করতে এবং সাবমিট করতে সক্ষম করে—কুকি (cookies) হ্যান্ডলিংও এতে সম্ভব। এর মানে আপনি ইউজার লগইন অনুকরণ করে প্রাইভেট সেশনে ঢুকে শুধু আপনার অ্যাক্সেসযোগ্য সাইট থেকে কন্টেন্ট পেতে পারেন।

আপনি আপনার শংসাপত্র দিয়ে লগইন ফর্ম পূরণ করুন এবং মেকানাইজকে কীভাবে ফলো করবেন তা বলে দিন। যেহেতু আপনি লিংক ক্লিক করতে এবং ফর্ম সাবমিট করতে পারেন, এই টুল দিয়ে করা যায় না এমন কিছুই কম। এর নোকোগিরির সাথে ঘনিষ্ঠ সম্পর্ক রয়েছে এবং এটিও নোকোগিরির উপর নির্ভর করে। আーロন প্যাটারসন (Aaron Patterson) আবার এই চমৎকার জেমের লেখকদের একজন।

মেকানাইজ এজেন্ট ইনস্ট্যানশিয়েট করা

কিছু মেকানাইজ করার আগে, আমাদের একটি মেকানাইজ এজেন্ট ইনস্ট্যানশিয়েট করতে হবে।

some_scraper.rb

এই agentটি একটি পেজ ফেচ (fetch) করতে ব্যবহৃত হবে, ঠিক যেভাবে আমরা নোকোগিরির সাথে করতাম।

some_scraper.rb

এখানে মেকানাইজ এজেন্টটি পডকাস্ট পেজটি এবং এর কুকিগুলো পেয়েছে।

পেজ কন্টেন্ট এক্সট্র্যাক্ট করা

এখন আমাদের কাছে এক্সট্র্যাকশনের জন্য প্রস্তুত একটি পেজ রয়েছে। এক্সট্র্যাকশন করার আগে, আমি পরামর্শ দিই inspect মেথড ব্যবহার করে আন্ডার দ্য হুড (under the hood) এক নজর দিন।

some_scraper.rb

আউটপুট কাফি বিস্তৃত। নিজেই দেখুন Mechanize::Page অবজেক্টটি কীসহ গঠিত। এখানে আপনি সেই পেজের সমস্ত অ্যাট্রিবিউট দেখতে পাবেন।

আমার মতে, এটি আপনার প্রয়োজনীয় ডেটা স্লাইস করে বের করার জন্য খুব হ্যান্ডি একটি অবজেক্ট।

আউটপুট

আপনি যদি HTML পেজটিই দেখতে চান, তবে body বা content মেথড ব্যবহার করতে পারেন।

some_scraper.rb

আউটপুট

যেহেতু এই পডকাস্টের পেজে সামান্য সংখ্যক এলিমেন্ট রয়েছে, এখানে github.com থেকে রিটার্ন হওয়া Mechanize::Page দেখানো হচ্ছে যাতে আরও ভেরাইটি দেখা যায়। আমার মতে এটি ফিল পাওয়ার জন্য গুরুত্বপূর্ণ।

আউটপুট github.com

পডকাস্টে ফিরে, আপনি এনকোডিং, HTTP রেসপন্স কোড, URI, বা রেসপন্স হেডারও দেখতে পারেন।

some_scraper.rb

আউটপুট

আপনি যদি আরও গভীরে যেতে চান তবে আরও অনেক কিছু রয়েছে। আমি এখানেই থামছি।

নোকোগিরি (Nokogiri) মেথডসমূহ

  • at
  • search

মেকানাইজ পেজ থেকে ডেটা স্ক্র্যাপ করতে নোকোগিরি ব্যবহার করে। আপনি প্রথম আর্টিকেলে নোকোগিরি সম্পর্কে যা শিখেছেন তা মেকানাইজ পেজেও প্রয়োগ করতে পারেন। অর্থাৎ, সাধারণত পেজ নেভিগেট করার জন্য মেকানাইজ এবং স্ক্র্যাপিংয়ের জন্য নোকোগিরি মেথড ব্যবহার করা হয়।

উদাহরণস্বরূপ, আপনি যদি একটি সিঙ্গেল অবজেক্ট সার্চ করতে চান তবে at ব্যবহার করতে পারেন, যখন search একটি নির্দিষ্ট পেজে সিলেক্টরের সাথে মিল খাওয়ানো সকল অবজেক্ট রিটার্ন করে। অন্য কথায়, এই মেথড দুটি নোকোগিরি ডকুমেন্ট অবজেক্ট এবং মেকানাইজ পেজ অবজেক্ট—দুটি misma কাজ করে।

some_scraper.rb

আউটপুট

লিংক (Links)

  • links
  • link_with
  • links_with

আমরা পুরো সাইটকে আমাদের ইচ্ছামত নেভিগেট করতে পারি। মেকানাইজের সবচেয়ে গুরুত্বপূর্ণ অংশ হলো লিংক নিয়ে খেলার ক্ষমতা। অন্যথায় আপনি শুধু নোকোগিরির সাথে থাকতে পারতেন। চলুন দেখি একটি পেজ তার লিংকগুলো চাইলে কী রিটার্ন করে।

some_scraper.rb

আউটপুট

হ olid মলি, এটা ব্রেক ডাউন করি। যেহেতু আমরা মেকানাইজকে অন্য কোথাও দেখাতে বলিনি, তাই শুধু সেই প্রথম পেজ থেকে লিংক এর একটি অ্যারে পেয়েছি। মেকানাইজ ঐ পেজটি নিচের দিকে যেতে যেতে স্ক্যান করে এবং টপ টু বটম লিংক লিস্ট রিটার্ন করে। আউটপুটে দেখা লিংকগুলোর লোকেশন বোঝাতে একটি ছবি গ্রিন পয়েন্টার দিয়ে তৈরি করা হয়েছিল।

বিশ্রান্ত, এটি ইতিমধ্যে আমার পডকাস্টের রিডিজাইনের এন্ড রেজাল্ট দেখাচ্ছে। আমার মতে ডেমো용으로는 এই ভার্সনটি কিছুটা ভালো। আপনি ফাইনাল রেজাল্ট কেমন দেখে এবং কেন আমার পুরনো সিন্যাট্রা সাইট স্ক্র্যাপ করতে হয়েছিল তার একটি ঝলক পাচ্ছেন।

স্ক্রিনশট

মেকানাইজ দিয়ে অ্যাডভান্সড ওয়েব স্ক্র্যাপিং: ফর্ম, লিংক ও পেজিনেশন মাস্টার করামেকানাইজ দিয়ে অ্যাডভান্সড ওয়েব স্ক্র্যাপিং: ফর্ম, লিংক ও পেজিনেশন মাস্টার করামেকানাইজ দিয়ে অ্যাডভান্সড ওয়েব স্ক্র্যাপিং: ফর্ম, লিংক ও পেজিনেশন মাস্টার করা

সদা ভাবেই, আমরা সেখান থেকে শুধু টেক্সট এক্সট্র্যাক্ট করতে পারি।

some_scraper.rb

আউটপুট

এত সব লিংক একসাথে পাওয়া খুব উপকারী হতে পারে অথবা খুব বিরক্তিকরও। خوشির কথা, আমাদের পাশ কিছু টুল আছে যা আমাদের প্রয়োজনীয় জিনিসটি ফাইন-টিউন করতে সাহায্য করে।

some_scraper.rb

আউটপুট

বুম! এখন আমরা কোথাও পৌঁছাচ্ছি! আমরা এভাবে নির্দিষ্ট লিংক টার্গেট করতে পারি। আমরা নির্দিষ্ট ক্রাইটেরিয়া—যেমন এর টেক্সট—মিলান করা লিংক টার্গেট করতে পারি আরও সুন্দর API যেমন links_with বা link_with দিয়ে। আরো, যদি একাধিক Focus লিংক থাকে, তবে ব্র্যাকেট [] ব্যবহার করে পেজের নির্দিষ্ট নম্বরের ওটাতে জুম ইন করতে পারি।

some_scraper.rb

যদি আপনি লিংক টেক্সট না পেয়ে লিংকটাই (href) খুঁজতে চান, তবে শুধু নির্দিষ্ট href স্পেসিফাই করলেই চলে। মেকানাইজ আপনার পথে বাধা দেওয়া নয়। text-এর বদলে মেথডগুলোকে href দিন।

some_scraper.rb

আপনি যদি কাঙ্খিত টেক্সট সহ প্রথম লিংকটাই খুঁজতে চান, তবে এই সিন্ট্যাক্সও ব্যবহার করতে পারেন। খুব সুবিধাজনক এবং কিছুটা অধিক রিডেবল।

some_scraper.rb

আর সেই ফেলাকে ফলো করে Focus লিংকের পেছনে কী আছে তা দেখার কথা? চলুন এটাকে click করি!

ক্লিক (Click)

some_scraper.rb

এটি আমাদের আগের মতো লিংকের একটি লম্বা লিস্ট দেবে। দেখুন .click.links কনবাইন করা কত সহজ ছিল। মেকানাইজ আপনার জন্য লিংকটি ক্লিক করে এবং নতুন ডেস্টিনেশনে পেজ ফলো করে। যেহেতু আমরা লিংকের লিস্টও চেয়েছিলাম, সেটা সেই নতুন পেজে মেকানাইজ যা পাবে সেটা দেবে।

মান লেন আমার একজন ইন্টারভিউই-এর দুটি টেক্সট লিংক আছে—একটি ট্যাগের तरफ এবং অন্যটি একটি সাম্প্রতিক এপিসোডের দিকে—এবং আমি উভয় পেজ থেকে লিংক পেতে চাই।

some_scraper.rb

এটি আপনাকে উভয় পেজের জন্য লিংক লিস্ট দেবে। আপনি ইন্টারভিউই-এর প্রতিটি লিংক এর ওভার ইটারেট করুন, এবং মেকানাইজ ক্লিক করা লিংক ফলো করে নতুন পেজে যা লিংক পাবে সেটা আপনার জন্য সংগ্রহ করবে। নিচে কিছু উদাহরণ দেওয়া আছে যাতে আপনি কম্বিনেশনগুলো তুলনা করে শুরু করতে পারেন।

some_scraper.rb

ফর্ম (Forms)

  • submit
  • field_with
  • checkbox_with
  • radiobuttons_with
  • file_uploads

চলুন ফর্মের দিকে তাকাই!

some_scraper.rb

আউটপুট

যেহেতু আমরা forms মেথড ব্যবহার করেছি, আমরা একটি অ্যারে পাব—যদি কেবল একটি ফর্ম রিটার্ন হোক তবুও। এখন যেহেতু আমরা জানি ফর্মটির নাম "f", আমরা সিঙ্গুলার ভার্সন form ব্যবহার করে সেটিকে টার্গেট করতে পারি।

some_scraper.rb

form('f') ব্যবহার করে আমরা যে নির্দিষ্ট ফর্মটির সাথে কাজ করতে চাই সেটিকে আলাদা করলাম। ফলস্বরূপ, আমরা আর অ্যারে পাব না।

আউটপুট

আমরা টেক্সট ইনপুট ফিল্ডের নাম (q)ও চিনতে পারি।

আমরা সেই নামে এটি টার্গেট করে এর ভ্যালু সেট করতে পারি রুবি অ্যাট্রিবিউটের মতো। আউটপুট উদাহরণে দেখুন এটি ডিফল্টভাবে খালি।

some_scraper.rb

আউটপুট

উপরে দেখুন টেক্সট ফিল্ডের ভ্যালু New Google Search এ পরিবর্তন হয়েছে। এখন আমাদের শুধু ফর্মটি submit করে গুগল যা রিটার্ন করে সেই পেজ থেকে রেজাল্ট সংগ্রহ করতে হবে। এর চেয়ে সহজ কিছু নেই। এবার অন্য কিছু সার্চ করি!

some_scraper.rb

এখানে আমি CSS সিলেক্টর h3.r ব্যবহার করে সার্চ রেজাল্ট হেডার চিনতে পেরেছি, এর text ম্যাপ করেছি এবং প্রিটি প্রিন্ট করেছি। কঠিন ছিল না, তাই না? এটি একটি সহজ উদাহরণ নিশ্চয়, কিন্তু এই টুল দিয়ে আপনার হাতে কত অসীম সম্ভাবনা আছে তা চিন্তা করুন!

আউটপুট

মেকানাইজে আপনার জন্য আপনাকে ঘামানোর মতো বিভিন্ন ইনপুট ফিল্ড আছে। আপনি ফাইলও আপলোড করতে পারেন!

  • field_with
  • checkbox_with
  • radiobuttons_with
  • file_uploads

আপনি রেডিও বাটন এবং চেকবক্স তাদের নাম দিয়ে চিনতে পারেন এবং check দিয়ে চেক করতে পারেন।

some_scraper.rb

অপশন ট্যাগ ইউজারকে ড্রপ-ডাউন লিস্ট থেকে একটি আইটেম সিলেক্ট করতে দেয়। আবার আমরা নাম দিয়ে টার্গেট করি এবং আমাদের পছন্দের অপশন নম্বর সিলেক্ট করি।

some_scraper.rb

ফাইল আপলোডও ফর্মে টেক্সট ইনপুটের মতো কাজ করে রুবি অ্যাট্রিবিউটের মতো সেট করে। আপনি আপলোড ফিল্ড চিনে নিন এবং তারপর আপনি যে ফাইল পাথ (ফাইল নাম) ট্রান্সফার করতে চান সেটা স্পেসিফাই করুন। শুনতে যত জটিল লাগে, আসলে তত নয়। দেখি!

some_scraper.rb

শেষ ভাবনা

দেখুন, কোনো ম্যাজিক নেই! এখন আপনি নিজেরamente মজা করার জন্য পুরোপুরি সক্ষম। নোকোগিরি এবং মেকানাইজ সম্পর্কে আরো কিছু শিখতে থাকবেই, কিন্তু অপ্রয়োজনীয় দিকগুলোর পেছনে বেশি وقت ব্যয় না করে নিজে খেলুন এবং ডকুমেন্টেশন দেখুন যখন বিগিনার আর্টিকেলের সুযোগের বাইরে কোনো সমস্যায় পড়েন।

আশা করি আপনি বুঝতে পেরেছেন এই জেমটি কত সুন্দরভাবে সহজ এবং কত শক্তি দেয়। আমরা সবাই জানি জনপ্রিয় সংস্কৃতির মাধ্যমে, এটাও দায়িত্ব নিয়ে আসে। কানূনী ফ্রেমওয়ার্কের ภายর এবং যখন আপনার কাছে API অ্যাক্সেস নেই তখনই এটি ব্যবহার করুন। সম্ভবত আপনার এই টুলগুলো নিয়মিত ব্যবহার হবena, কিন্তু আপনার কোনো রিয়েল স্ক্র্যাপিং প্রয়োজন হলে এটি কত উপকারী হয় সেটা বলার নেই!

বাদা অনুযায়ী, পরবর্তী আর্টিকেলে আমরা একটি রিয়েল-ওয়ার্ল্ড উদাহরণ দেখব যেখানে আমি আমার পডকাস্ট সাইট থেকে ডেটা স্ক্র্যাপ করব। আমি পুরনো সিন্যাট্রা সাইট থেকে এক্সট্র্যাক্ট করে আমার নতুন মিডলম্যান (Middleman) সাইটে ট্রান্সফার করব যেটি প্রতিটি এপিসোডের জন্য .markdown ফাইল ব্যবহার করে। আমরা তারিখ, এপিসোড নম্বর, ইন্টারভিউই-এর নাম, হেডার, সাবহেডার ইত্যাদি এক্সট্র্যাক্ট করব। সেখানে দেখা হবে!

  1. মাস্টার মেকানাইজ: অ্যাডভান্সড ওয়েব স্ক্র্যাপিং কৌশল – পার্ট ২

  2. আইফোন ব্রাউজার আপডেট করুন: উন্নত নিরাপত্তা ও পারফরম্যান্সের জন্য

  3. ফায়ারফক্সে "একটি ওয়েব পেজ আপনার ব্রাউজারকে ধীর করে দিচ্ছে" ত্রুটি সমাধান করুন

  4. আপনার ব্রাউজার কতটুকু প্রাইভেট হওয়া উচিত? মূল কারণ ও টিপস