যেকোনো ওয়েব স্ক্র্যাপিং অ্যাপ্লিকেশন তৈরির সময়, বিশেষ করে যখন আপনি HTTP রিকোয়েস্ট পাঠাচ্ছেন এবং HTML ডকুমেন্ট পার্স করছেন, তখন এর সাথে সম্পর্কিত কিছু সাধারণ এক্সসেপশন (exception) এবং লগিং (logging) প্রয়োজন হতে পারে। জেসুপ (JSoup) এর মাধ্যমে ডেটা এক্সট্র্যাকশনের সময় এক্সসেপশন হ্যান্ডলিং এবং লগিং ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটি আরো স্থিতিশীল এবং ডিবাগযোগ্য হয়ে ওঠে।
এখানে, আমরা দেখব কিভাবে জেসুপ ব্যবহার করে এক্সসেপশন হ্যান্ডলিং এবং লগিং করা যায়।
Exception Handling in JSoup
জেসুপ (JSoup) দিয়ে ওয়েব স্ক্র্যাপিং করার সময় কয়েকটি সাধারণ এক্সসেপশন ঘটতে পারে, যেমন:
java.io.IOException: যখন সার্ভার থেকে ডেটা রিড করা সম্ভব না হয় (যেমন, নেটওয়ার্ক ইস্যু বা ওয়েবসাইট পাওয়া না যাওয়া)।org.jsoup.HttpStatusException: যখন HTTP রেসপন্স স্ট্যাটাস কোড 400 বা 500 রেঞ্জের মধ্যে থাকে, যেমন404 Not Foundবা500 Internal Server Error।org.jsoup.UnsupportedMimeTypeException: যখন সার্ভার কোন অযথা MIME টাইপ রিটার্ন করে, যা জেসুপ পার্স করতে পারে না।
উদাহরণ: Exception Handling in JSoup
এখানে একটি সাধারণ উদাহরণ দেওয়া হলো, যেখানে আমরা এক্সসেপশন হ্যান্ডলিং এবং লগিং যুক্ত করেছি:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.HttpStatusException;
import org.jsoup.UnsupportedMimeTypeException;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class JsoupExceptionHandling {
private static final Logger logger = Logger.getLogger(JsoupExceptionHandling.class.getName());
public static void main(String[] args) {
String url = "https://www.example.com";
try {
// HTTP GET রিকোয়েস্ট পাঠানো এবং HTML পার্স করা
Document doc = Jsoup.connect(url).get();
// রেসপন্সে পাওয়া HTML ডকুমেন্টের শিরোনাম প্রিন্ট করা
System.out.println("Page Title: " + doc.title());
} catch (HttpStatusException e) {
// HTTP স্ট্যাটাস কোড 4xx বা 5xx হলে এক্সসেপশন হ্যান্ডল করা
logger.log(Level.SEVERE, "HTTP error fetching URL: " + url, e);
} catch (UnsupportedMimeTypeException e) {
// MIME টাইপ সাপোর্ট না করলে এক্সসেপশন হ্যান্ডল করা
logger.log(Level.SEVERE, "Unsupported MIME type: " + url, e);
} catch (IOException e) {
// সাধারণ I/O ত্রুটি (যেমন নেটওয়ার্ক সমস্যা) হ্যান্ডল করা
logger.log(Level.SEVERE, "IOException occurred while fetching URL: " + url, e);
}
}
}
কোড ব্যাখ্যা:
try-catchব্লক: এখানেtry-catchব্লক ব্যবহার করা হয়েছে যাতেIOException,HttpStatusExceptionএবংUnsupportedMimeTypeExceptionএক্সসেপশনগুলো যথাযথভাবে হ্যান্ডল করা যায়।- Logger ব্যবহার:
Loggerক্লাস ব্যবহার করা হয়েছে লগ তৈরি করার জন্য।Level.SEVEREলগ লেভেল ব্যবহার করা হয়েছে যাতে সেভিয়র (গুরুতর) ত্রুটি সহজেই শনাক্ত করা যায়। - Custom Error Messages: প্রতিটি এক্সসেপশনের জন্য একটি কাস্টম ত্রুটি মেসেজ প্রদান করা হয়েছে যা ত্রুটির উৎস এবং টাইপ সম্পর্কে বিস্তারিত তথ্য দেয়।
Logging in JSoup
লগিং (Logging) আপনার অ্যাপ্লিকেশনটির ডিবাগিং এবং পর্যবেক্ষণ সহজ করে তোলে। বিশেষ করে, ওয়েব স্ক্র্যাপিং অ্যাপ্লিকেশনগুলিতে লগিং খুবই গুরুত্বপূর্ণ, কারণ এটি আপনাকে বুঝতে সাহায্য করে কোথায় কোনো সমস্যা ঘটছে বা সার্ভার থেকে প্রাপ্ত রেসপন্স কী ছিল।
উদাহরণ: Logging with Console and File
এখানে একটি উদাহরণ দেওয়া হলো, যেখানে লগিং কনসোলে এবং একটি ফাইলে লেখা হয়েছে।
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.HttpStatusException;
import org.jsoup.UnsupportedMimeTypeException;
import java.io.IOException;
import java.util.logging.*;
public class JsoupLoggingExample {
private static final Logger logger = Logger.getLogger(JsoupLoggingExample.class.getName());
static {
try {
// লগ ফাইল সেটআপ
FileHandler fileHandler = new FileHandler("scraper.log", true);
logger.addHandler(fileHandler);
fileHandler.setFormatter(new SimpleFormatter());
} catch (IOException e) {
logger.log(Level.SEVERE, "Error setting up file handler for logger", e);
}
}
public static void main(String[] args) {
String url = "https://www.example.com";
try {
// HTTP GET রিকোয়েস্ট পাঠানো
Document doc = Jsoup.connect(url).get();
// রেসপন্সে পাওয়া HTML ডকুমেন্টের শিরোনাম প্রিন্ট করা
logger.log(Level.INFO, "Page Title: " + doc.title());
} catch (HttpStatusException e) {
// HTTP ত্রুটি লগ করা
logger.log(Level.SEVERE, "HTTP error fetching URL: " + url, e);
} catch (UnsupportedMimeTypeException e) {
// MIME টাইপ ত্রুটি লগ করা
logger.log(Level.SEVERE, "Unsupported MIME type: " + url, e);
} catch (IOException e) {
// I/O ত্রুটি লগ করা
logger.log(Level.SEVERE, "IOException occurred while fetching URL: " + url, e);
}
}
}
কোড ব্যাখ্যা:
- FileHandler: লগিং ফাইল সেটআপ করা হয়েছে
FileHandlerএর মাধ্যমে যাতে লগ ফাইল তৈরি হয় এবং তাতে লগ লেখা যায়। এটি পরে ডিবাগging বা মনিটরিং করার জন্য উপকারী হতে পারে। - SimpleFormatter: লগ ফরম্যাট করার জন্য
SimpleFormatterব্যবহার করা হয়েছে যা লগ ইনফরমেশনকে সহজ এবং স্পষ্ট করে তোলে। - Log Levels: লগিং স্তরের (log level) মাধ্যমে বিভিন্ন ত্রুটি বা তথ্য ভিন্নভাবে রেকর্ড করা হচ্ছে।
Level.INFOসাধারণ তথ্যের জন্য এবংLevel.SEVEREগুরুতর ত্রুটির জন্য ব্যবহৃত হয়েছে।
সারাংশ
জেসুপ (JSoup) দিয়ে ওয়েব স্ক্র্যাপিং বা HTML ডেটা এক্সট্র্যাকশনের সময় এক্সসেপশন হ্যান্ডলিং এবং লগিং একটি গুরুত্বপূর্ণ বিষয়। try-catch ব্লক ব্যবহার করে বিভিন্ন ধরনের এক্সসেপশন হ্যান্ডল করা যায়, এবং লগিং ব্যবহারের মাধ্যমে ডিবাগিং সহজ হয়। Logger ব্যবহার করে আপনি কনসোলে এবং ফাইলে লগ রাখতে পারেন, যা আপনাকে কার্যক্রমের সঠিক ট্র্যাক রাখতে সাহায্য করবে।
Read more