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

পাইথনে ওয়েব স্ক্র্যাপিং টুলস: urllib, Requests, BeautifulSoup, lxml, Selenium, MechanicalSoup


ওয়েব স্ক্র্যাপিং কী?

ওয়েবসাইট থেকে ডেটা এক্সট্রাক্ট করে স্ট্রাকচারড ফরম্যাটে রূপান্তর করার প্রক্রিয়া। পাইথনে একাধিক পাওয়ারফুল লাইব্রেরি রয়েছে।

১. 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) বিবেচনা করুন।
  1. পাইথন এবং Scrapy দিয়ে ওয়েব স্ক্রেপিং

  2. পাইথনে lxml ব্যবহার করে ওয়েব স্ক্র্যাপিং বাস্তবায়ন

  3. ২০২৪ সালের ৩১টি সেরা ওয়েব স্ক্র্যাপিং টুল: সহজ, শক্তিশালী ও বিশ্বস্ত

  4. প্রফেশনালদের জন্য টপ ওয়েব ডিজাইন টুলস: এক্সপার্ট পিক্স