ওয়েব স্ক্র্যাপিং কী?
ওয়েবসাইট থেকে ডেটা এক্সট্রাক্ট করে স্ট্রাকচারড ফরম্যাটে রূপান্তর করার প্রক্রিয়া। পাইথনে একাধিক পাওয়ারফুল লাইব্রেরি রয়েছে।
১. urllib (স্ট্যান্ডার্ড লাইব্রেরি)
বেসিক HTTP রিকোয়েস্টের জন্য। কোনো ইনস্টলেশন লাগে না।
from urllib.request import urlopen
html = urlopen("https://www.tutorialspoint.com/")
print(html.read()[:500]) # প্রথম ৫০০ বাইট
সীমাবদ্ধতা: নন-ব্লকিং নয়, কুকি/সেশন হ্যান্ডলিং জটিল, জাভাস্ক্রিপ্ট রেন্ডার করে না।
২. Requests (হাই-লেভেল HTTP লাইব্রেরি)
pip install requests
import requests
resp = requests.get('https://www.tutorialspoint.com/')
print(resp.status_code) # 200
print(resp.encoding) # UTF-8
print(resp.headers['Content-Type'])
print(resp.url)
print(resp.history) # রিডাইরেক্ট হিস্টোরি
print(resp.text[:200]) # HTML কন্টেন্ট
বিশেষতা: সিম্পল API, সেশন/কুকি সাপোর্ট, অটো ডিকোডিং, টাইমআউট, স্ট্রিমিং।
৩. BeautifulSoup (HTML/XML পার্সার)
pip install beautifulsoup4
from bs4 import BeautifulSoup
import requests
resp = requests.get("https://www.tutorialspoint.com/")
soup = BeautifulSoup(resp.text, 'html.parser')
# সব লিংক এক্সট্রাক্ট
for link in soup.find_all('a'):
href = link.get('href')
if href:
print(href)
# CSS সিলেক্টর
titles = soup.select('h1, h2, h3')
for t in titles:
print(t.get_text(strip=True))
পার্সার অপশন: 'html.parser' (বিল্ট-ইন), 'lxml' (দ্রুত), 'html5lib' (সবচেয়ে সহনশীল)।
৪. lxml (হাই-পারফরম্যান্স XML/HTML পার্সার)
pip install lxml
from lxml import etree, html
# HTML পার্স
tree = html.fromstring("Hello
")
print(tree.xpath('//p/text()')) # ['Hello']
# XML বানানো
root = etree.Element('html')
etree.SubElement(root, 'head')
etree.SubElement(root, 'title')
etree.SubElement(root, 'body')
print(etree.tostring(root, pretty_print=True).decode())
বিশেষতা: খুব দ্রুত, XPath/XSLT সাপোর্ট, বড় ডকুমেন্টের জন্য আদর্শ।
৫. Selenium (ব্রাউজার অটোমেশন / জাভাস্ক্রিপ্ট রেন্ডারিং)
pip install selenium
ওয়েবড্রাইভার লাগে (ChromeDriver, GeckoDriver ইত্যাদি)।
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service('/path/to/chromedriver')
driver = webdriver.Chrome(service=service)
driver.get('https://www.tutorialspoint.com/')
print(driver.title)
driver.quit()
ব্যবহার: ডাইনামিক কন্টেন্ট (AJAX, React, Vue), স্ক্রলিং, ক্লিকিং, ফরম ফিলআপ, স্ক্রিনশট।
৬. MechanicalSoup (স্টেটফুল ব্রাউজার সিমুলেশন)
pip install MechanicalSoup
import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()
browser.open("https://httpbin.org/forms/post")
browser.select_form('form')
browser["custname"] = "John Doe"
browser["custtel"] = "123456"
browser["custemail"] = "john@example.com"
response = browser.submit_selected()
print(response.text)
বিশেষতা: Requests + BeautifulSoup এর ল্যাএর, কুকি/রিডাইরেক্ট/ফরম হ্যান্ডলিং অটোমেটিক। জাভাস্ক্রিপ্ট রান করে না।
টুল তুলনা টেবিল
| টুল | জাভাস্ক্রিপ্ট | স্পিড | লার্নিং কার্ভ | সেরা ব্যবহারের ক্ষেত্রে |
|---|---|---|---|---|
| urllib | না | মাঝারি | কম | সিম্পল GET, কোনো ডিপেন্ডেন্সি না চাইলে |
| Requests | না | দ্রুত | নিম্ন | API কল, স্ট্যাটিক HTML, সেশন ম্যানেজমেন্ট |
| BeautifulSoup | না | মাঝারি | নিম্ন | HTML পার্সিং, ডেটা এক্সট্রাকশন |
| lxml | না | খুব দ্রুত | মাঝারি | বড় XML/HTML, XPath কোয়েরি |
| Selenium | হ্যাঁ | ধীর | উচ্চ | SPA, ডাইনামিক কন্টেন্ট, ব্রাউজার টেস্টিং |
| MechanicalSoup | না | দ্রুত | নিম্ন | ফরম সাবমিশন, লগইন, স্টেটফুল ক্রলিং |
সেরা অনুশীলন
- robots.txt চেক করুন।
- রেট লিমিট মেনে চলুন (time.sleep, retry logic)।
- User-Agent সেট করুন।
- ত্রুটি হ্যান্ডলিং (try/except, timeout) করুন।
- প্রোডাকশনে async (aiohttp, httpx) বিবেচনা করুন।