এক নজরে — কোন সাইটে কোন পথ
Extension টা তিন ধরনের কাজ করে। আপনার সাইটটা কোনটার মধ্যে পড়ে সেটা আগে ঠিক করে নিলে বাকি সব সোজা।
ক. সাধারণ লিস্ট / টেবিল
একটা পেজে অনেকগুলো একই রকম আইটেম — প্রোডাক্ট গ্রিড, সার্চ রেজাল্ট, HTML টেবিল, নিউজ লিস্ট।
→ Pick elements বা Auto-detectখ. শপ — প্রতিটা প্রোডাক্টের নিজের পেজ
Daraz/Amazon: লিস্টে শুধু নাম-দাম, বাকি সব (SKU, seller, specs) প্রোডাক্ট পেজে।
→ Product detail pages (link mode)গ. Maps / ডিরেক্টরি
আইটেমে ক্লিক করলে নতুন পেজ খোলে না, একই পেজে পাশে প্যানেল আসে — Google Maps, Yelp-এর মতো।
→ ⚡ Auto-setup (এক বাটন)মূল কথা একটাই: যা আপনি ব্রাউজারে দেখছেন সেটাই স্ক্র্যাপ হয়। লগইন করা পেজ, JavaScript দিয়ে লোড হওয়া কনটেন্ট — সব চলে। কোনো সার্ভারে ডেটা যায় না, সব আপনার ব্রাউজারেই।
🤖 robots.txt — ডিফল্ট অন
⚙ ট্যাবে "Respect robots.txt" কার্ডটা পাবেন। কোনো পেজ নিষেধ হলে Setup-এ একটা লাল লাইন আর ⚙ Details বাটন দেখায়। প্রতিটা সাইটের robots.txt ফাইলটা পড়ে দেখা হয় — ওখানে সাইট লিখে রাখে কোন পাথে অটোমেটেড ক্লায়েন্টদের ঢুকতে দেওয়া হবে না।
- অনুমতি থাকলে সবুজ লেখা আসে।
Crawl-delayদেওয়া থাকলে সেটাও মানা হয় — আপনার delay-এর চেয়ে বড় হলে সাইটেরটাই ব্যবহার হয়। - নিষেধ থাকলে রান শুরুই হয় না, আর কোন লাইনটা আটকাচ্ছে দেখিয়ে দেয় (
Disallow: /private/)। - প্রতিটা প্রোডাক্ট পেজ আলাদা করে যাচাই হয় — লিস্ট অনুমোদিত কিন্তু প্রোডাক্ট পাথ নিষেধ হলে ওই row-তে কারণ লেখা থাকে, বাকি কাজ চলে।
টগলটা বন্ধ করা যায় — ক্লায়েন্টের নিজের সাইটে লিখিত অনুমতি থাকতে পারে, robots.txt সেটা প্রকাশ করতে পারে না। তবে মনে রাখবেন: robots.txt কোনো লাইসেন্স নয়। অনুমতি থাকা মানেই ডেটা পুনঃপ্রকাশের অধিকার নয় — সাইটের Terms of Service আলাদাভাবে প্রযোজ্য।
🛰 সাইটের নিজের API ব্যবহার করা
বেশিরভাগ আধুনিক সাইট তার লিস্টটা একটা JSON endpoint থেকে আনে। সেই JSON-এ প্রায়ই পেজে না-দেখানো ফিল্ড থাকে — অক্ষাংশ-দ্রাঘিমাংশ, ইমেইল, খোলার সময়, internal ID। HTML ঘেঁটে তোলার চেয়ে ওখান থেকে নেওয়া বেশি নিখুঁত, বেশি সমৃদ্ধ, অনেক দ্রুত — আর pagination-এর জন্য ক্লিক করতেই হয় না, শুধু একটা নম্বর বদলায়।
- Setup ট্যাবে 🛰 Use the site's API টগল অন করুন।
- Find the API চাপুন — পেজটা একবার রিলোড হবে, যাতে লোডের সময়ের কলগুলোও ধরা পড়ে।
- সাইটে স্বাভাবিকভাবে সার্চ বা স্ক্রল করুন — যেভাবে একজন মানুষ করত।
- Check again চাপুন। যা যা JSON এসেছে তার লিস্ট আসবে, সবচেয়ে সমৃদ্ধটা নিজে থেকেই বাছা থাকবে।
- নিচে নমুনা কলামগুলো দেখে নিন → ▶ Extract from the API।
- রেকর্ড কোথায় আছে সে নিজেই খুঁজে নেয় —
data.dealers,results.hits, বা একদম উপরে। একাধিক সম্ভাবনা থাকলে ড্রপডাউন থেকে বেছে নিতে পারেন। - নেস্টেড key সমান কলাম —
contact.phone,address.city। স্কেলারের অ্যারে জোড়া লেগে যায় (Bosch | Cube)। - পেজিং নিজে ধরে —
page, বাoffset+limit(URL-এ বা POST body-তে) খুঁজে নিয়ে endpoint-টাই আবার কল করে। Pagination কার্ডের From/To এখানেও খাটে। - রিকোয়েস্টটা হুবহু রিপ্লে হয় — হেডার (auth token সহ) আর আপনার নিজের কুকি নিয়ে, তাই লগইন করা সাইটেও চলে।
কীভাবে কাজ করে: Chrome এক্সটেনশনকে response body পড়তে দেয় না (webRequest-এ শুধু হেডার)। তাই পেজের নিজের fetch আর XMLHttpRequest-এ একটা হুক বসানো হয় — সে শুধু দেখে, কিছু বদলায় না, নিজে কোনো রিকোয়েস্ট পাঠায় না। টগল বন্ধ করলে হুকও খুলে যায়। robots.txt এখানেও প্রযোজ্য।
POST দিয়ে সার্চ করা সাইট: অনেক store finder লোকেশন/রেডিয়াস POST body-তে পাঠায়। সেই body এখন সব রকমেই ধরা পড়ে (string, FormData, URLSearchParams, Request অবজেক্টের ভিতরেরটাও), আর যে রেসপন্সটা ইতিমধ্যে ধরা পড়েছে সেটাই প্রথম পেজ হিসেবে ব্যবহার হয় — আবার কল করার দরকারই পড়ে না। কখনো খালি এলে লগে কারণটা লেখা থাকে, আন্দাজ করতে হয় না।
সঠিক API কীভাবে বাছা হয়
Rightmove-এর মতো সাইটে একটা সার্চ পেজেই ৩০০-র বেশি রিকোয়েস্ট যায়, যার বেশিরভাগ বিজ্ঞাপন, consent আর analytics-এর JSON। আসল listing API খুঁজে পেতে এখন তিনটা জিনিস করা হয়:
- বিজ্ঞাপন/ট্র্যাকার ধরাই হয় না (prebid, bid, cookie_sync, vendorlist, consent…), আর জায়গা ভরে গেলে নতুন কল ফেলে না দিয়ে অন্য সাইটের পুরোনোটা সরানো হয় — তাই শেষে আসা listing কলটা হারায় না।
- বাছাই হয় পেজের সাথে মিলিয়ে, রেকর্ডের সংখ্যা দেখে নয়। প্রতিটা JSON-এর রেকর্ড থেকে ঠিকানা, নাম, দাম নিয়ে দেখা হয় সেগুলো পেজে দেখা যাচ্ছে কিনা। সাথে: একই সাইট কিনা, URL-এ পেজের সার্চ সেটিং আছে কিনা, pagination তথ্য আছে কিনা। লিস্টে পাশে কারণ লেখা থাকে: "✓ 25 of 25 records are on this page"।
- Paging API-র নিজের উত্তর থেকে।
index=0, 24, 48…চেনা হয়, ধাপ নেওয়া হয় API-রnext/pageSizeথেকে (রেকর্ড গুনে নয় — প্রতি পাতায় ২৪টা ফলাফল + ১টা featured থাকে), আর "From 1 To 3" মানে ফলাফলের সত্যিকারের প্রথম তিন পাতা।
পুরোপুরি নিজে থেকে
- মাপকাঠি পেজের মূল লিস্ট। পেজের সবচেয়ে বড় আর তথ্যবহুল repeating লিস্টটা (যেমন প্রপার্টি কার্ড) চিনে নিয়ে দেখা হয়, API-র এক-একটা রেকর্ড ঐ লিস্টের এক-একটা কার্ডের সাথে মেলে কিনা। সাইডবারের "Central London"-এর মতো লিংকের লেখা পেজে থাকলেও সেটা কোনো কার্ডের পরিচয় নয়, তাই আর বাছা হয় না।
- Next নিজেই চাপে। অনেক সাইটের (Rightmove সহ) প্রথম পাতা HTML-এর সাথে আসে, রিলোডের পর API-র কোনো কলই থাকে না। তাই Find the API চাপলে, পেজের লিস্ট না পাওয়া গেলে extension নিজেই একবার Next চাপে (না পেলে Load more, না পেলে স্ক্রল), সাইট তার API ডাকে, সেটা ধরে বাছাই হয়। কী চেপেছে সেটা লেখা থাকে। Check again শুধু দেখে, কিছু চাপে না।
তারপরও কিছু না মিললে extension নিজে কিছু বাছে না — বলে দেয় সাইটে পাতা/sort/filter বদলে Check again চাপতে, আর তাতেও না হলে সাইটটা লিস্ট HTML-এই বানায়, তখন 🎯 Pick দিয়ে তুলুন।
সব সাইটে API থাকে না। সার্ভার-রেন্ডার করা পুরোনো ধাঁচের পেজে সবটাই HTML-এ আসে — তখন "Find the API" কিছুই পাবে না, আগের মতো 🎯 Picker দিয়েই তুলুন। WebSocket বা GraphQL subscription-ও এখনো ধরা পড়ে না।
ইনস্টল
- Chrome Web Store-এ Rowvana খুলুন (অথবা rowvana.com-এ Add to Chrome চাপুন)।
- Add to Chrome চাপুন, তারপর কনফার্ম করুন।
- টুলবারের পাজল-আইকনে ক্লিক করে ⚡ Rowvana পিন করে নিন, তাহলে সবসময় সামনে থাকবে।
- popup খুলে Sign in with Google। Free plan-এ কোনো খরচ নেই।
আপডেট নিজে থেকেই আসে — Chrome কয়েক ঘণ্টা পর পর নতুন ভার্সন খোঁজে। আপনাকে কিছু করতে হবে না।
প্রথম scrape — ৫ মিনিটে
একটা সহজ পেজ দিয়ে শুরু করুন, যেমন books.toscrape.com (স্ক্র্যাপিং প্র্যাকটিসের জন্য বানানো সাইট)। নিচে ধাপগুলো লেখা আছে, ভিডিওতে যা দেখলেন সেটাই।
পথ ১: Auto-detect (সবচেয়ে দ্রুত)
- পেজটা খুলে ⚡ আইকনে ক্লিক করুন → popup খুলবে।
- ✨ Auto-detect চাপুন। পেজে যতগুলো repeating structure আছে (প্রোডাক্ট গ্রিড, টেবিল) সব লিস্ট হয়ে আসবে — কয়টা row, কয়টা কলাম, একটা নমুনা সহ।
- যেটা চান সেটাতে ক্লিক করুন। Row container আর Fields নিজে থেকে বসে যাবে।
- Preview চাপুন — শুধু এই পেজটা স্ক্র্যাপ করে Results ট্যাবে দেখাবে। ঠিক আছে কিনা দেখে নিন।
- ঠিক থাকলে ▶ Extract data। শেষ হলে Results ট্যাবে গিয়ে CSV / Excel।
পথ ২: Pick elements (নিজে বেছে নেওয়া)
Auto-detect যা ধরেছে সেটা পছন্দ না হলে, বা নির্দিষ্ট কয়েকটা জিনিসই লাগলে:
- popup-এ 🎯 Pick elements on page চাপুন। popup বন্ধ হয়ে পেজের কোণায় একটা ছোট প্যানেল আসবে।
- যেকোনো একটা কার্ড/আইটেমে ক্লিক করুন (একটা বই, একটা প্রোডাক্ট)। বাকি সব কার্ড সবুজ ড্যাশে মার্ক হয়ে যাবে — মানে row container পাওয়া গেছে। প্যানেল নিজে থেকে "Fields" ধাপে চলে যাবে।
- এবার ওই একটা কার্ডের ভিতরের যে যে জিনিস চান — নাম, দাম, ছবি — একটা একটা করে ক্লিক করুন। প্রতিটা ক্লিক একটা কলাম। সব কার্ডে সেই জিনিসটা কমলা রঙে মার্ক হবে।
- প্যানেলে কলামের নাম বদলাতে পারেন, আর ড্রপডাউনে কী নেবেন সেটাও:
text(লেখা),href(লিংক),src(ছবির URL)। - Save & Close → popup খুলুন → ▶ Extract data।
ভুল কিছু ক্লিক হয়ে গেলে প্যানেলে ওই field-এর পাশে ✕ চাপুন। পুরোটা বাতিল করতে Esc বা Cancel।
পথ ৩: প্রতিটা ঘরের পাশে 🎯 আর ✨
বড় picker প্যানেল না খুলেও চলে। যেখানেই selector বা XPath লিখতে হয় — Row container, প্রতিটা ফিল্ড, Product Page-এর প্রতিটা ফিল্ড, Advanced-এর Detail panel / Click / Close / Specs / "open this" ঘর — তার পাশে দুইটা বাটন আছে:
- 🎯 — পেজে জিনিসটায় ক্লিক করুন, selector ঐ ঘরেই বসে যায়। মাউস রাখলেই দেখায় selector কেমন হবে আর কয়টা row-তে মিলছে।
- ✨ — নিজে খুঁজে দেয়। ফিল্ডের ক্ষেত্রে নাম দেখে: "Price" → দাম, "Image" → ছবি (src), "Link" → লিংক (href), "Title", "Rating", "Address", "Phone", "Date"… চেনা নাম না হলে পেজের class-এর মধ্যে ঐ শব্দ খোঁজে। "Field 7"-এর মতো নাম হলে বলে দেয় 🎯 দিয়ে দেখাতে।
CSS না XPath — দুইটাই সত্যি কাজ করে
ড্রপডাউনে XPath বাছলে এখন selector-টাই XPath-এ রূপান্তর হয় (আগে শুধু লেবেল বদলাত, ভিতরে CSS থেকে যেত)। রূপান্তর হয় class ধরে, div[3]-এর মতো পজিশন গুনে নয়, আর পেজে যাচাই করে দেখা হয় আগের মতোই একই জিনিস মিলছে কিনা। 🎯, ✨ আর বড় picker — সবাই ঘরের type মেনে চলে। যা হুবহু রূপান্তর করা যায় না সেখানে ড্রপডাউন আগের জায়গায় ফেরে আর কারণ লেখে।
পথ ৪: পেজের source-এর JSON থেকে
Rightmove-এর মতো সাইটে view-source খুললে দেখবেন window.PAGE_MODEL = {…} বা __NEXT_DATA__। আসল ডেটা এখানেই থাকে। পেজের class নাম এলোমেলো আর প্রায়ই বদলায়, তাই এখান থেকে পড়া সবচেয়ে টেকসই।
- ফিল্ডের ড্রপডাউনে JSON বাছুন। আগে থেকে CSS থাকলে extension খুঁজে বের করে ঐ লেখা ডেটার কোথায় আছে, আর path বসিয়ে দেয়, যেমন
PAGE_MODEL.propertyData.prices.primaryPrice। - ফাঁকা JSON ফিল্ডে ✨ চাপলে ফিল্ডের নাম দেখে খোঁজে (Price, Bedrooms, Address, Image…)। আর 🎯 দিয়ে পেজের কোনো লেখায় ক্লিক করলে তার path আসে।
[*]মানে সবগুলো:PAGE_MODEL.propertyData.images[*].urlদিলে সব ছবির লিংক আসে, আর 🖼 চালু থাকলে সব ছবি ডাউনলোড হয়।- লিস্ট পেজে 🛰 Find the API চাপলে তালিকায়
📄 __NEXT_DATA__ (in the page)দেখাবে। এটা বাছলে প্রতিটা পেজের JSON থেকে row আসে। Pagination-এ Next চালু রাখুন।
Row container যদি ভুল করে ফুটারের লিংক ধরে (Title/Price খালি, Link-এ শুধু "stamp-duty-calculator"), run থেমে যায়, কিছু export হয় না। কোন ফিল্ডগুলো খালি সেটা বলে দেয়, সাথে ঠিক করার উপায়ও।
Picker প্যানেল — রঙগুলোর মানে
পেজের উপরে যে হাইলাইটগুলো দেখবেন, প্রতিটা রঙ একটা জিনিস বোঝায়:
প্যানেলের বাটনগুলো
- 1. Row / Card · 2. Fields
- কোন মোডে আছেন। প্রথমে row, তারপর fields। চাইলে হাতে বদলাতে পারেন।
- ✨ Auto-detect rows
- পুরো কাজটা নিজে করার চেষ্টা — row আর সম্ভাব্য fields একসাথে।
- Clear
- row container মুছে দেয়; fields থাকে।
- Save & Close
- সব popup-এ পাঠিয়ে প্যানেল বন্ধ। popup আবার খুললে সব বসানো পাবেন।
- – (উপরে ডানে)
- প্যানেল ছোট করে — পেজের কিছু ঢেকে গেলে কাজে লাগে। হেডার ধরে টেনে সরানোও যায়।
Row container না দিয়ে সরাসরি fields ক্লিক করলে extension "column mode"-এ যায়: প্রতিটা field পুরো পেজে যা পায় সব আলাদা কলাম হিসেবে নেয়, তারপর ক্রম ধরে জোড়া লাগায়। কোনো field কম ম্যাচ করলে row মিলে যেতে পারে। তাই পরিষ্কার টেবিল চাইলে আগে row container দিন।
Save দিলে পপআপ নিজে ফিরে আসে: Picker চালু করতে হলে পপআপকে বন্ধ হতেই হয় — পেজে ফোকাস গেলে Chrome টুলবার পপআপ বন্ধ করে দেয়, এটা ব্রাউজারের নিয়ম। আগে আবার আইকনে ক্লিক করতে হতো; এখন extension নিজেই পপআপটা খুলে দেয়, পিক করা ফিল্ড ভরা অবস্থায়। পুরোনো Chrome-এ সম্ভব না হলে টুলবার আইকনে সবুজ ব্যাজে সংখ্যা দেখায় আর পেজে লেখা আসে "Saved 5 field(s) — click the ⚡ toolbar icon to carry on."।
Popup-এর প্রতিটা অংশ
popup-এ তিনটা ট্যাব: Setup (কী স্ক্র্যাপ করবেন), Results (কী পেলেন), Saved (সেটআপ সেভ/লোড)। Setup ট্যাব উপর থেকে নিচে:
- Current tab
- কোন পেজে কাজ হবে। popup সবসময় সামনের ট্যাবটাই ধরে।
- 🎯 Pick elements on page
- Picker চালু করে (ধাপ ৩)।
- ✨ Auto-detect
- পেজের টেবিল/লিস্টগুলো খুঁজে দেখায়, বেছে নিন।
- ⚡ Auto-setup: list + detail panel
- Maps-ধরনের সাইটের জন্য এক-বাটন সেটআপ (ধাপ ৭)।
- Repeating row container
- প্রতিটা রেকর্ডের selector, যেমন
.product-card। পাশে CSS/XPath বেছে নেওয়া যায়। Test চাপলে কয়টা ম্যাচ করছে দেখায়। - Fields
- প্রতিটা কলাম: নাম, কী নেবেন (text/href/src/…), selector। + Add field দিয়ে হাতে যোগ করা যায়। Test চাপলে প্রতিটা field-এর পাশে সবুজ/লাল সংখ্যা আসে — কয়টা row-তে ম্যাচ করেছে।
- Pagination
- একাধিক পেজ থাকলে (ধাপ ৫)।
- 🛒 Product detail pages
- প্রতিটা আইটেমের ভিতরে ঢোকা (ধাপ ৬, ৭)। Allow টগল অন না করলে কিছু খোলে না।
- ▶ Extract data · Preview
- Extract = পুরো কাজ (pagination + detail সহ), background-এ চলে, popup বন্ধ করলেও থামে না। Preview = শুধু এই পেজ, দ্রুত দেখে নেওয়ার জন্য।
- লগ বক্স
- কী হচ্ছে সেটা লাইনে লাইনে: কোন পেজে গেল, কয়টা পেল, কোথায় থামল।
Field-এর "কী নেবেন" অপশনগুলো
| অপশন | কী আসে | কখন |
|---|---|---|
| text | এলিমেন্টের লেখা | নাম, দাম, বর্ণনা — বেশিরভাগ ক্ষেত্রে |
| href | লিংকের পূর্ণ URL | প্রোডাক্ট/প্রোফাইল লিংক (সবসময় absolute URL আসে) |
| src | ছবির URL | থাম্বনেইল, প্রোডাক্ট ইমেজ |
| title / alt | ওই attribute-এর মান | টুলটিপ, ছবির বর্ণনা |
| value | ইনপুটের মান | ফর্ম ফিল্ড |
| innerHTML | ভিতরের HTML | ফরম্যাটিং সহ লাগলে |
| custom | যেকোনো attribute | যেমন data-id, data-price — নাম নিচের ঘরে লিখবেন |
Pagination — একাধিক পেজ
Pagination কার্ডে Enable টিক দিন, তারপর সাইটটা কীভাবে পেজ বদলায় সেই অনুযায়ী মোড বাছুন:
| মোড | কখন | কী দিতে হবে |
|---|---|---|
| Next button / link | পেজের নিচে "Next »" / "পরবর্তী" বাটন বা লিংক আছে | ওই বাটনের selector (যেমন li.next a, a[rel=next]) + Max pages |
| URL pattern | URL-এ পেজ নম্বর থাকে: ?page=2, /page/3/ | প্যাটার্ন, নম্বরের জায়গায় {page}: https://site.com/list?page={page} + Start page + Max pages |
| Infinite scroll | নিচে স্ক্রল করলে নিজে থেকে আরও আইটেম আসে | Max scrolls; "Load more" বাটন থাকলে তার selector |
Next বাটনের selector হাতে লিখবেন না — ✨ Find it চাপুন, অথবা 🎯 Pick "Next" on page দিয়ে বাটনে ক্লিক করুন। দুইটাই এমন selector দেয় যেটা সব পেজে কাজ করে (যেমন a.s-pagination-next, a[aria-label^="Go to next page"])।
DevTools-এর "Copy selector" ব্যবহার করবেন না। ওটা দেয় #search > div > … > li:nth-child(8) > span > a — পেজের লেআউটের একটা ঠিকানা, যা পরের পেজে বদলে যায় (Amazon-এ ৩ নম্বর পেজেই)। একই সমস্যা "Go to next page, page 2"-এর মতো label-এ — ওটা শুধু পেজ ১-এ মেলে। popup এরকম selector দেখলে আগেই সতর্ক করে, আর রানের মাঝে selector না মিললে extension নিজেই আসল Next খুঁজে নেয় ও log-এ জানায়।
Infinite scroll-এ Row container হবে একটা আইটেম, পুরো লিস্ট নয়। পুরো লিস্টের বাক্স ধরলে পেজে মাত্র ১টা জিনিস মেলে, তখন স্ক্রলে নতুন আইটেম এলেও বোঝা যায় না। এটা নিজেই ধরে ঠিক করে নেয় (log-এ লেখা থাকে: "matches only 1 element — it is the box around the list")। যে feed একসাথে এক স্ক্রিনের আইটেমই পেজে রাখে, সেখানে স্ক্রল করতে করতেই পড়া হয়, তাই উপরের আইটেমগুলো হারায় না। ধীর সাইটে "Delay between pages" ৩০০০–৫০০০ ms দিন।
সাইটের নিজের সীমা: To page ১০০০ দিলেও সাইট যতদূর দেখায় তার বেশি পাওয়া যায় না — Airbnb এক সার্চে ১৫ পেজ, Amazon প্রায় ২০। log-এ লেখা থাকে "You asked for up to page 1000, but the site shows no Next link here"। বেশি চাইলে সার্চ ভাগ করুন (দামের রেঞ্জ, এলাকা, ফিল্টার)।
Product page-ও চালু থাকলে: Product Page কার্ডের Max items (0 = all) দেখে নিন। ডিফল্ট ০, মানে সবগুলো।
দুইটা নিরাপত্তা বিল্ট-ইন: একই row দুইবার এলে বাদ পড়ে, আর কোনো পেজে নতুন কিছু না পেলে ক্রল নিজে থেকেই থেমে যায় — তাই Max pages বেশি দিলেও ক্ষতি নেই। Delay between pages ৭০০ms-এর নিচে নামাবেন না; খুব দ্রুত গেলে সাইট ব্লক করতে পারে।
১০ পেজের মধ্যে শুধু ৩টা — পেজ রেঞ্জ
Pagination কার্ডে From page আর To page — ব্যস, এই একটাই কন্ট্রোল। ১ থেকে ৩ মানে প্রথম তিন পেজ; ৪ থেকে ৬ মানে ঠিক ওই তিনটা। (আলাদা "Max pages" ঘরটা তুলে দেওয়া হয়েছে — একই কাজ দুইভাবে থাকাটা বিভ্রান্তিকর ছিল। Infinite scroll মোডে ওর জায়গায় Max scrolls আসে।)
- URL pattern মোডে ওই পেজগুলো সরাসরি খোলা হয় — আগেরগুলোতে যাওয়াই হয় না, তাই দ্রুত।
- Next button মোডে পেজ ৪-এ যাওয়ার অন্য রাস্তা নেই, তাই ১–৩ ক্লিক করে পার হওয়া হয় — কিন্তু স্ক্র্যাপ করা হয় না। লগে দেখবেন "Page 1: skipped", স্ট্যাটাসে "Skipping to 4"।
- প্রতিটা row-এর
_pageকলামে আসল পেজ নম্বরই থাকে (৪, ৫, ৬)। - Infinite scroll-এ পেজ বলে কিছু নেই, তাই ওই মোডে অপশনটা দেখাই যায় না — ওখানে Max scrolls দিয়েই নিয়ন্ত্রণ।
বড় কাজে এটা খুব কাজে দেয়: ক্লায়েন্টকে আগে ২ পেজের নমুনা দিন (১–২), পছন্দ হলে বাকিটা রেঞ্জ বদলে বদলে নিন (৩–১০, ১১–২০)। প্রতিটা রানের ফাইল আলাদা থাকে, শেষে মার্জ করে নেবেন। সেভ করা প্রোফাইলেও রেঞ্জটা থাকে।
Selector টাইপ করতে হবে না
"Next-page selector" ঘরে হাতে CSS লেখার দরকার নেই। Pagination কার্ডে দুইটা বাটন আছে:
- 🎯 Pick “Next” on page — popup বন্ধ হয়ে পেজে একটা হাইলাইটার চালু হয়। মাউস নিলে উপরে দেখাবে কোন selector ব্যবহার হবে; Next বাটনে ক্লিক করলেই ঘরে বসে যায়। ক্লিকটা পেজে যায় না, তাই ভুল করে পরের পেজে চলে যাবেন না। বাতিল করতে Esc।
- ✨ Find it — কিছুই চাপতে হবে না, সে নিজে খুঁজে বের করে:
rel="next",aria-label, "Next / › / »" লেখা, pagination কন্টেইনার — সব দেখে সবচেয়ে সম্ভাব্যটা বাছে, আর নিচে লিখে দেয় কেন ওটা বাছল।
দুইটাই এমন selector বানায় যা পরের পেজেও কাজ করে — a[rel=next], aria-label, বা class — লম্বা DOM path নয়, কারণ Next বাটনের অবস্থান প্রতি পেজে বদলে যায়।
Infinite scroll মোডে ঠিক একই দুইটা বাটন "Load more" বাটনের জন্য আছে। Add to cart / Checkout / Sign in ধরনের কিছু কখনো প্রস্তাব করা হয় না।
শপ: প্রতিটা প্রোডাক্ট পেজে ঢুকে সব ডিটেইল আনা
Daraz-এ লিস্ট পেজে শুধু নাম, দাম, রেটিং থাকে। Brand, SKU, seller, warranty, specification — এগুলো প্রতিটা প্রোডাক্টের নিজের পেজে। এই মোডে extension লিস্ট স্ক্র্যাপ করার পর প্রতিটা প্রোডাক্টের লিংকে গিয়ে বাকি তথ্য এনে একই row-তে জুড়ে দেয়।
- লিস্ট পেজে আগের মতো row + fields পিক করুন। একটা field অবশ্যই প্রোডাক্টের লিংক হতে হবে: প্রোডাক্টের নামে ক্লিক করে ড্রপডাউনে
hrefবেছে দিন। (নাম আর লিংক দুইটাই চাইলে একই জায়গায় দুইবার ক্লিক করে একটা text, একটা href রাখুন।) - popup-এ 🛒 Product detail pages কার্ডে Allow টগল অন করুন। "How the details open" থাকবে Follow a link to a product page।
- Product link column-এ href-ওয়ালা কলামটা বেছে দিন (নামের পাশে "— link" লেখা থাকে)।
- এবার যেকোনো একটা প্রোডাক্টের পেজ খুলুন (যেকোনো একটা, সব প্রোডাক্টের পেজ একই ছাঁচের)। popup খুলে 🎯 Pick fields on this product page চাপুন। Picker আসবে — দাম, seller, brand, rating-এ ক্লিক করুন। Save & Close।
- লিস্ট পেজে ফিরে ▶ Extract list + product pages।
ফলাফলে এক CSV-তে এরকম আসে:
Title, Price, Link, Seller, Was, Brand, _page, _source_url
কীভাবে চলে: প্রোডাক্ট পেজগুলো একটাই লুকানো background ট্যাবে একটার পর একটা লোড হয়; আপনার ট্যাব যেখানে ছিল সেখানেই থাকে; শেষে ট্যাবটা নিজে বন্ধ হয়। একই লিংক দুইবার এলে একবারই খোলে। কোনো পেজ না খুললে ওই row-তে _detail_error কলামে কারণ লেখা থাকে, বাকি কাজ চলে।
🛒 কার্ডে Max items (0 = সব), আর ⚙ → 🛒 Product pages-এ Delay per item (ডিফল্ট ১০০০ms)। ২০০ প্রোডাক্ট × ১ সেকেন্ড = ৩–৫ মিনিট। delay ৫০০-এর নিচে নামাবেন না।
সরানো হয়েছে: "Specifications table নিজে থেকে ধরা" আর "সব collapsed সেকশন/পপ-আপ আগে খোলা" — দুইটা পেজ-জুড়ে কাজ করত আর প্রায়ই অদরকারি কলাম আনত। এখন যে ফিল্ড চান সেটা 🎯 দিয়ে পিক করুন, আর সেটা লুকানো সেকশনে থাকলে পাশের ⤢ চালু করুন — ঠিক সেই সেকশনটাই খোলা হবে।
⤢ — শুধু একটা ফিল্ডের সেকশন খোলা
Airbnb-র মতো পেজে তথ্য আলাদা আলাদা সেকশনে লুকানো থাকে — সেখানে Description-এর নিজের "Show more", Facilities-এর নিজের "Show all 31 amenities", আর House rules একটা বন্ধ <details>। তাই এখন Product Page-এর প্রতিটা ফিল্ডের পাশে ছোট একটা ⤢ বাটন আছে।
⤢ অন করলে ওই ফিল্ডটা পড়ার আগে শুধু ওর নিজের সেকশনটাই খোলা হয়, বাকি পেজে হাত পড়ে না। কন্ট্রোলটা খোঁজা হয় এই ক্রমে:
aria-controlsযদি ফিল্ডের container-এর id দেখায় — সব ভালো accordion এভাবেই বানানো- ফিল্ডের উপরে কোনো বন্ধ
<details>থাকলে তার<summary> - সেকশনের ভিতরে সবচেয়ে কাছের "Show more / Show all / View full…" ধরনের বাটন
ফিল্ডটা যদি এখনো পেজে না-ই থাকে (বন্ধ অ্যাকর্ডিয়নের ভিতরে), selector-টা পেছন থেকে ছোট করে দেখা হয় — #rev-body p না মিললে #rev-body — যাতে container ধরে বাটনটা পাওয়া যায়।
⤢ অন করলে নিচে একটা ছোট ঘর আসে: খালি রাখলে auto। ভুল বাটন চাপলে ওখানে নিজের selector লিখে দিন (যেমন #amenityToggle) — তখন ঠিক সেটাই চাপবে। পপ-আপ খুললে ভিতরের ভ্যালুটা বন্ধ করার আগেই নিয়ে নেওয়া হয়, কারণ ওটাই একমাত্র সুযোগ।
নিরাপত্তার নিয়ম হুবহু একই। নিজের হাতে #addToCart লিখে দিলেও চাপবে না — টেস্টে সেটাও যাচাই করা আছে।
ফিল্ড আবার pick করলে একই নামের ফিল্ডের ⤢ সেটিংটা থেকে যায়, নতুন করে অন করতে হয় না।
লিস্ট কলামেও ⤢ — প্রতিটা row-এর নিজের "Show more"
লিস্ট পেজেও প্রতিটা কার্ডের নিজের "Show more" থাকতে পারে। তাই Setup ট্যাবের FIELDS কার্ডেও প্রতিটা কলামের পাশে ⤢ বাটন আছে। অন করলে পেজটা পড়ার আগে প্রতিটা row-এর নিজের বাটন একবার চাপা হয়।
গতির কথা ভেবে নকশাটা এরকম: এক row চেপে অপেক্ষা করে পরেরটায় গেলে ১০০ row-তে এক মিনিট লেগে যেত। তাই সব row-এর বাটন আগে চাপা হয়, তারপর একবারই অপেক্ষা (ডিফল্ট ৭০০ms)। কোনো row-এর কন্ট্রোল পপ-আপ খুলে ফেললে সেটা বন্ধ করে দেওয়া হয় — পপ-আপের কনটেন্ট কোন row-এর, সেটা বলা যায় না। এক পেজে সর্বোচ্চ ১২০ row।
দ্বিতীয়বার চাপে না। "Show more" খোলার পর "Show less" হয়ে যায় — আবার চাপলে যা খোলা হয়েছিল সেটাই বন্ধ হয়ে যেত। এখন aria-expanded="true", খোলা <details>, বা "Show less / Hide" ধরনের লেখা দেখলে বাদ দেওয়া হয়, লগে লেখা থাকে "already open"।
🎯 আর ✨ — selector আর টাইপ করতে হবে না
⤢ অন করলে selector ঘরের পাশে দুইটা বাটন আসে:
- 🎯 Pick — popup বন্ধ হয়ে পেজে হাইলাইটার চালু হয়। যে বাটনটা সেকশনটা খোলে তাতে ক্লিক করুন, selector নিজে বসে যায়। ক্লিকটা পেজে যায় না, তাই ভুল করে কিছু খুলে যাবে না। লিস্ট ফিল্ডের ক্ষেত্রে এমন selector বানানো হয় যেটা সব row-তে খাটে — id নয়, কারণ id দিয়ে শুধু প্রথম কার্ডটাই খুলত।
- ✨ Find — কিছু চাপতেও হবে না; ফিল্ডের selector থেকেই কন্ট্রোলটা বের করে ঘরে বসিয়ে দেয়, আর নিচে লিখে দেয় কীভাবে পেল — যেমন "Found “Show more” by aria-controls — matches in 2 of 2 rows"।
ঘরটা খালি রাখলে আগের মতোই auto — রান করার সময় খোঁজা হয়। 🎯/✨ শুধু সেটা রান করার আগেই দেখিয়ে দেয়, পরে নয়।
🖼 ছবি ডাউনলোড — URL নয়, আসল ফাইল
শিটে ছবির ঠিকানা থাকা আর ছবিটা হাতে থাকা এক জিনিস নয় — সাইট CDN বদলালেই পুরোনো লিংক মরে যায়। তাই দুই সেকশনেই (FIELDS আর Product Page fields) প্রতিটা ফিল্ডের পাশে 🖼 বাটন আছে। অন করলে ছবিটা আসল ফাইল হিসেবে Downloads/uws-images/<সাইট>-<তারিখ-সময়>/ ফোল্ডারে নেমে আসে, আর শিটে নতুন একটা কলাম যোগ হয় — Photo (file)।
ডিফল্ট: প্রতি row-তে একটাই ছবি। এটা ইচ্ছে করেই — ১০০ row × ৮টা গ্যালারি ছবি মানে ৮০০ ফাইল, সেটা না চাইতেই হয়ে গেলে বিরক্তিকর। পুরো গ্যালারি লাগলে ড্রপডাউন থেকে All images in the gallery বেছে নিন; তখন আপনি যে ছবিটা pick করেছেন তার আশেপাশের বাকি ছবিগুলোও নামে (একাধিক ছবি আছে এমন সবচেয়ে কাছের বক্সটাকে "গ্যালারি" ধরা হয়), আলাদা selector লিখতে হয় না।
পাশে Test বাটন আছে — চাপলে বলে দেয় "3 image(s) per row × 20 row(s) ≈ 60 file(s) per page"। রান করার আগেই জেনে নিতে পারবেন কত ফাইল আসছে।
URL বের করাটাই আসল কাজ, সেটা যত্ন করে করা হয়েছে:
srcsetথাকলে সবচেয়ে বড় রেজোলিউশনেরটা নেওয়া হয়- Lazy-load করা ছবিতে
src-এ থাকে ১×১ স্বচ্ছ placeholder, আসলটাdata-src-এ — সেটাই নেওয়া হয় - CSS
background-imageদিয়ে আঁকা ছবিও ধরা পড়ে - ২৪px-এর আইকন/ব্যাজ বাদ — ছোট ছবি ছবি নয়
- একই URL দুইবার নামে না, আর robots.txt এখানেও খাটে
নাম আর URL পাশাপাশি
প্রতিটা ফাইলের নাম আসে ছবির নিজের URL থেকে — …/villa-pool.jpg নামলে ফাইলটাও villa-pool.jpg। আর সেই URL-টা দুই জায়গায় রাখা থাকে:
- শিটে দুইটা কলাম পাশাপাশি, একই ক্রমে:
Photo (file)আরPhoto (image url) - প্রতিটা রানের ফোল্ডারে একটা
images.csv—file, image_url, row, field, page_url, status। যে ছবি নামেনি (robots.txt নিষেধ, ফাইল-লিমিট পার, সার্ভার error) সেটাও কারণসহ থাকে, চুপচাপ হারায় না।
একাধিক ছবি হলে নামের শেষে 1, 2, 3। "All images in the gallery" বাছলে গ্যালারিতে অবস্থান অনুযায়ী: pool_1.jpg, bedroom_2.jpg, kitchen_3.jpg। আলাদা row-এর দুইটা ছবির নাম একই হলে (অনেক CDN প্রতিটা প্রোডাক্টের জন্য …/large.jpg দেয়) দ্বিতীয়টা হয় large_2.jpg, তৃতীয়টা large_3.jpg — কিছুই overwrite হয় না।
📁 Output directory — নিজের পছন্দের ফোল্ডার
- ⚙ → Images-এ 📁 Choose output folder… চাপুন — একটা Settings পেজ খুলবে।
- 📁 A folder I choose → Choose folder…। সিস্টেমের আসল folder dialog আসবে; যেকোনো ড্রাইভের যেকোনো ফোল্ডার বেছে নিন (যেমন
D:\Client Photos)। - Chrome access চাইলে Allow দিন। ব্যস — এরপর থেকে সব ছবি ওখানে যাবে।
Permission ঝামেলা না চাইলে অন্য অপশনটা: ⬇ Inside the Downloads folder — Downloads-এর ভিতরে একটা ফোল্ডারের নাম দিলেই হলো (ডিফল্ট uws-images)।
দুইটা জিনিস জেনে রাখুন। (১) Chrome ফোল্ডারের শুধু নাম দেখায়, পুরো path না — এটা ব্রাউজারের নিরাপত্তা নিয়ম। (২) Chrome restart হলে মাঝে মাঝে ঐ ফোল্ডারের access আবার চায়; তখন Settings পেজে Re-allow access চাপুন। তার আগ পর্যন্ত রান থামে না — ছবি Downloads-এ যায় আর লগে কারণ লেখা থাকে।
প্রতি রানে নতুন ফোল্ডার — ডেট বা domain নামে
Settings পেজে Name each run’s folder by থেকে বেছে নিন:
| অপশন | ফোল্ডারের নাম |
|---|---|
| Domain + date (ডিফল্ট) | airbnb.com_2026-09-21_17-33-35 |
| Date & time | 2026-09-21_17-33-35 |
| Domain | airbnb.com → পরের রানে airbnb.com-2 → airbnb.com-3 |
নামটা আগে থেকে থাকলে -2, -3 বসে যায়, তাই নতুন রান কখনো পুরোনোর সাথে মেশে না। পেজে একটা লাইভ preview দেখায় ফলাফল কেমন দাঁড়াবে।
FIELDS কার্ডে Max image files per run ঘরটা (ডিফল্ট ৫০০) তখনই দেখা যায় যখন কোনো ফিল্ডে 🖼 অন থাকে।
Maps / ডিরেক্টরি: ⚡ Auto-setup এক বাটনে
Google Maps-এ রেজাল্টে ক্লিক করলে নতুন পেজ খোলে না — একই পেজে পাশে একটা প্যানেল আসে (ঠিকানা, ফোন, ওয়েবসাইট, সময়)। এখানে লিংক ধরার কিছু নেই, তাই extension নিজেই প্রতিটা আইটেমে ক্লিক করে, প্যানেল পড়ে, বন্ধ করে, পরেরটায় যায়।
সহজ পথ (প্রায় সব ক্ষেত্রে এটাই যথেষ্ট)
- Maps-এ সার্চ করুন (যেমন "restaurant london") যাতে বাঁদিকে রেজাল্ট লিস্ট আসে। কোনো রেজাল্ট নিজে খুলে রাখার দরকার নেই।
- popup খুলে ⚡ Auto-setup: list + detail panel চাপুন।
- অপেক্ষা করুন ১০–১৫ সেকেন্ড। extension: লিস্টটা খুঁজে বের করে → প্রথম আইটেমে ক্লিক করে → প্যানেল চিনে নেয় → নাম/ঠিকানা/ফোন/ওয়েবসাইট প্রস্তাব করে → দ্বিতীয় আইটেমে ক্লিক করে যাচাই করে আলাদা ডেটা আসছে কিনা।
- লগে "Ready — press Run" এলে সব ঘর ভরা পাবেন। Fields লিস্টটা একবার দেখে নিন, অদরকারি কলাম ✕ দিয়ে ফেলে দিন।
- ▶ Extract list + product pages। শেষ হলে Results → Excel।
এই বাটনটা চাপা মানেই আইটেমে ক্লিক করার অনুমতি দেওয়া — তাই Allow টগল নিজে থেকে অন হয়ে যায়। টগলটা দেখা যায়; না চাইলে বন্ধ করে দিন, তখন শুধু লিস্ট স্ক্র্যাপ হবে।
সবচেয়ে বড় ভুলটা: কোনো একটা জায়গার পেজে (URL-এ /place/...) দাঁড়িয়ে Auto-setup চাপা। ওখানে রেজাল্টের লিস্টই নেই, তাই extension ২টার মতো ভুয়া "row" পায়। আগে সার্চ রেজাল্টের পেজে যান — বাঁদিকে কার্ডের লিস্ট দেখা যেতে হবে। ৩টার কম row পেলে extension নিজেই থেমে গিয়ে এটা বলে দেয়।
বেশি রেজাল্ট চাইলে
স্ক্রল চলার সময় Maps-এর ট্যাবটা সামনে রাখুন। Chrome ব্যাকগ্রাউন্ড ট্যাবের টাইমার ধীর করে দেয়, তখন Google নতুন রেজাল্ট লোড করা বন্ধ করে দেয় — স্ক্রল "আটকে গেছে" মনে হয়। popup বন্ধ করলে কোনো সমস্যা নেই (কাজ ব্যাকগ্রাউন্ডে চলে), শুধু ট্যাব বদলাবেন না।
Maps-এর লিস্ট virtualised — স্ক্রল না করা পর্যন্ত মাত্র কয়েকটা কার্ড পেজে থাকে। Auto-setup এটা বুঝতে পারলে Infinite scroll নিজে থেকেই অন করে দেয় (Max scrolls ২৫), লগে লিখেও দেয়। আরও চাইলে সংখ্যাটা ৫০–৮০ করে দিন। extension রেজাল্ট লিস্টের নিজের স্ক্রলবার স্ক্রল করে, পুরো পেজ না — তাই কাজ হয়।
হাজার হাজার ডেটা লাগলে: এক সার্চে Google নিজেই সর্বোচ্চ ~১০০–১২০টা রেজাল্ট দেয় — এটা extension-এর সীমা নয়। তাই সার্চটা ভাগ করুন: "restaurant in Camden", "restaurant in Soho", "restaurant in Shoreditch"… প্রতিটা আলাদা রান, শেষে ফাইলগুলো এক করে নিন। একবার সেটআপ করে Saved profile বানিয়ে রাখলে প্রতিটা সার্চে শুধু ▶ চাপলেই হবে। (স্ক্র্যাপ করার আগে সাইটের Terms of Service দেখে নেবেন।)
ম্যানুয়াল পথ (Auto-setup ঠিকমতো না ধরলে)
- 🎯 Pick elements on page দিয়ে একটা রেজাল্ট কার্ডে ক্লিক করে row ঠিক করুন, নাম-রেটিংয়ে ক্লিক করে fields নিন, Save।
- 🛒 কার্ডে Allow অন → "How the details open" = Click the item, panel opens on the same page।
- 🖱 Click first item & pick fields চাপুন। extension প্রথম আইটেমে ক্লিক করে প্যানেল খুলে ওখানে Picker চালু করবে (প্যানেল বেগুনি ড্যাশে)।
- প্যানেলে ✨ Auto-detect fields চাপুন, অথবা হাতে ঠিকানা/ফোন/ওয়েবসাইটে ক্লিক করুন — দুইটা একসাথেও চলে। Save & Close।
- Run।
যেটা জেনে রাখা ভালো
- ক্লিকের পর প্যানেল না বদলালে ওই row-তে
_detail_errorআসে ("The panel did not change after clicking…") — আগের প্যানেলের ডেটা কখনো ভুল করে কপি হয় না। - প্যানেল "Loading…" থেকে আসল কনটেন্টে না আসা পর্যন্ত extension অপেক্ষা করে — মাঝপথের খালি প্যানেল পড়ে না।
- প্যানেলে Close বাটন থাকলে ⚙ → 🛒 Product pages → "Close button"-এ তার selector দিতে পারেন; না দিলেও চলে, পরের আইটেমে ক্লিক করলেই প্যানেল বদলায়।
Results ও Export
Excel-এ এক ঘরে ৩২,৭৬৭ অক্ষরের বেশি রাখা যায় না — এর চেয়ে লম্বা লেখা শুধু .xlsx-এ কেটে দেওয়া হয় আর export-এর বার্তায় লেখা থাকে; CSV আর JSON-এ পুরোটা থাকে। খুব লম্বা সংখ্যা (যেমন ID) Excel-এ লেখা হিসেবে যায় যাতে কোনো অঙ্ক না হারায়।
Results ট্যাবে প্রথম ২০০ row টেবিলে দেখা যায় (export-এ সব থাকে)। উপরে মোট row আর কয় পেজ থেকে এসেছে।
- CSV
- UTF-8 BOM সহ — Excel-এ খুললে বাংলা ঠিকমতো দেখায়। ফাইলের নাম:
সাইটেরনাম-তারিখ-সময়.csv। - JSON
- পুরো ডেটা, প্রোগ্রামে ব্যবহারের জন্য।
- Excel
- আসল
.xlsx— bold হেডার, ফ্রিজ করা প্রথম সারি, auto-filter চালু। সংখ্যা সংখ্যা হিসেবেই আসে (কিন্তু "007"-এর মতো শূন্য-শুরু লেখা টেক্সট থাকে)। - Copy
- ক্লিপবোর্ডে tab-separated — Google Sheets-এ গিয়ে সরাসরি Ctrl+V।
- Clear
- ফলাফল মুছে দেয় (সেটআপ থাকে)।
কলামের ক্রম: আপনার fields-এর ক্রম → detail fields → auto specs → শেষে _page (কোন পেজ থেকে) আর _source_url। কলামের নামে ডুপ্লিকেট হলে spec কলামের নামে "(spec)" জুড়ে যায়, আপনার পিক করা কলাম কখনো মুছে যায় না।
💾 Scraper সেভ করে রাখা
একবার সেটআপ করে ফেললে সেটা আর হারাতে দেবেন না। Setup ট্যাবের ▶ বাটনের ঠিক নিচে 💾 Save this scraper — এক ক্লিক, নাম টাইপ করতেও হবে না (পেজের টাইটেল থেকে নিজে থেকেই প্রস্তাব হয়, যেমন "restaurant london - Google Maps")।
যা যা সেভ হয়: row selector, প্রতিটা কলাম, pagination-এর ধরন আর সংখ্যা, product page / panel-এর সব field, আর Allow টগলের অবস্থা — অর্থাৎ পুরো স্ক্র্যাপারটা, আধা-ভরা ফর্ম নয়।
- একই সাইটে একই লিস্টে আবার সেভ করলে বাটনে লেখা আসে 💾 Update "…" — পুরোনোটাই আপডেট হয়, ডুপ্লিকেট জমে না। আলাদা কপি চাইলে পাশের Save as new।
- Saved ট্যাবে প্রতিটার নিচে লেখা থাকে সেটা আসলে কী করে —
8 columns · panel (9) · scroll। ✎ দিয়ে নাম বদলান, Load চাপলে সব ঘর ভরে Setup ট্যাবে ফিরে আসে — শুধু ▶ চাপা বাকি।
Maps-এ হাজার হাজার ডেটার জন্য এটাই আসল কাজের জিনিস: একবার সেভ করে রাখুন, তারপর প্রতিটা নতুন সার্চে (এলাকা/ক্যাটাগরি বদলে) শুধু Load → ▶। প্রতিবার নতুন করে সেটআপ করতে হবে না।
সেভ করা স্ক্র্যাপার অন্য ধরনের পেজে চালালে কাজ না-ও করতে পারে (সার্চ রেজাল্টের জন্য বানানো প্রোফাইল একটা জায়গার পেজে)। সেরকম হলে রান নিজেই থেমে গিয়ে বলে দেয় — তখন ⚡ Auto-setup দিয়ে নতুন করে বানিয়ে 💾 Update চেপে দিন।
নিচে কিছু Starter templates আছে: quotes.toscrape আর books.toscrape (প্র্যাকটিসের জন্য), যেকোনো HTML টেবিল, পেজের সব লিংক, সব ছবি। Use চাপলে সেটআপ বসে যায়।
⚙ Settings — Proxy, API key আর Reset
উপরে ট্যাবের সারির শেষে শুধু ⚙ আইকন (জায়গা বাঁচাতে; মাউস রাখলে নাম দেখায়)। যা যা একবার সেট করে রাখার জিনিস, সব এখানে: robots.txt, Page load timeout, Proxy, API keys, ছবির ফোল্ডার, account, আর একদম শেষে Delete account। Reset এখন উপরের ↺ বাটনে।
কোনো বাটন বা সুইচ কী করে বুঝতে না পারলে তার উপর মাউস রাখুন — প্রতিটা কন্ট্রোলে ছোট ব্যাখ্যা ওঠে।
⏱ Page load timeout
প্রতিটা পেজ পুরোপুরি লোড হওয়া পর্যন্ত অপেক্ষা করা হয়। কিন্তু কোনো পেজ আটকে থাকলে পুরো রান আটকে থাকবে না: এখানে দেওয়া সময়ের (ডিফল্ট ৩০ সেকেন্ড) মধ্যে লোড না হলে ঐ পেজ বাদ দিয়ে পরের পেজে চলে যায়। log-এ লেখা থাকে কোনটা বাদ গেল, রানের শেষে একটা সারাংশ আসে।
- URL-এ পেজ নম্বর থাকলে — সরাসরি পরের নম্বর।
- Next বাটন থাকলে — পেজের যতটুকু এসেছে তা থেকে Next খুঁজে এগোয়। পেজের কিছুই না এলে সামনে যাওয়ার উপায় থাকে না, তখন বলে থামে।
- Product page — ঐ row-তে কারণ লেখা থাকে, পরের product চলে।
- API mode — আটকে থাকা call বাদ দিয়ে পরের পেজ।
ধীর সাইটে সময় বাড়ান (৬০–৯০ সেকেন্ড); খুব কম দিলে ঠিকঠাক পেজও বাদ যাবে।
🛡 Proxy — ব্লক এড়ানো
সাইট স্ক্র্যাপার আটকায় IP দেখে। বেশি পেজ টানলে হঠাৎ "Access denied" বা CAPTCHA আসে। দুইটা পথ আছে, আর দুইটা দুই কাজের:
১) নিজের proxy list
এটাই সাধারণ crawl-এর জন্য — কারণ পেজ পড়া হয় ব্রাউজারের ট্যাব থেকে, তাই ট্যাবটাকেই proxy দিয়ে যেতে হবে। প্রতি লাইনে একটা, যেভাবে provider দিয়েছে সেভাবেই পেস্ট করুন:
203.0.113.5:8000
203.0.113.6:8000:username:password
username:password@203.0.113.7:8000
socks5://203.0.113.8:1080
- IP কখন বদলাবে: প্রতি রানে একবার · প্রতি পেজে · প্রতি N পেজে · শুধু ব্লক খেলে।
- ব্লক নিজে থেকেই ধরা পড়ে। পেজে ডেটার বদলে দেয়াল এলে ("Access denied", "unusual traffic", CAPTCHA frame) extension বুঝতে পারে, IP বদলে আবার চেষ্টা করে (দুইবার), তারপরও না হলে বলে দেয়। "ব্লক খেলে থেমে যাও" সেট করা থাকলে থামে — ততক্ষণের row গুলো থাকে।
- Password-ওয়ালা proxy এমনিতেই চলে — Chrome-এর sign-in বক্স আসে না, extension নিজেই উত্তর দেয়।
- Test the first proxy চাপলে একটা request গিয়ে দেখায় ওপাশ থেকে কোন IP দেখা যাচ্ছে — লিস্ট ঠিক আছে কিনা রান শুরু করার আগেই জানা যায়।
Chrome-এ proxy সেটিং পুরো ব্রাউজারের — তাই রান চলাকালে আপনার অন্য ট্যাবগুলোও ওই proxy দিয়ে যাবে। রান শুরু হলে বসে, শেষ হলে (এমনকি ফেল করলেও) নিজে থেকেই মুছে যায়। জোর করে মুছতে Reset browser proxy।
২) Proxy API service (API key দিয়ে)
ScraperAPI, ScrapingBee, ZenRows, ScrapingAnt — অথবা নিজের URL pattern ({key} আর {url} বসিয়ে দেওয়া হয়)। এরা আমাদের হয়ে ফেচ করে, কিন্তু পেজটা ট্যাবে এঁকে দিতে পারে না — তাই সাধারণ point-and-click crawl-এ চলে না। যেখানে extension নিজে ফেচ করে সেখানে চলে: API mode, image download, আর চাইলে robots.txt। কোনটায় চলবে তা টিক দিয়ে ঠিক করুন।
🔑 API keys
নাম + header + key। extension যখন নিজে request পাঠায় (API mode, image download) তখন key-টা header হিসেবে যায় — যেমন Authorization বা X-API-Key। ক্লায়েন্টের নিজের API থেকে ডেটা নিতে হলে কাজে লাগে।
Key গুলো এই ব্রাউজার প্রোফাইলে সাধারণভাবে সেভ থাকে (সেভ করা পাসওয়ার্ডের মতো)। এই কম্পিউটারে যার হাত আছে সে পড়তে পারবে — ক্লায়েন্টের key হলে মাথায় রাখবেন।
↺ Reset — নতুন profile
Reset উপরের লাইনের ↺ বাটনে। নতুন ক্লায়েন্টের কাজ শুরুর সময় পরিষ্কার শুরু দরকার হয়। চেকবক্স দিয়ে বেছে নিন কী কী যাবে: current setup · results · saved scrapers · image settings · proxies ও API keys · log · sign-in। Reset the ticked items চাপলে আগে কনফার্ম চায় আর ঠিক কী কী মুছবে লিখে দেখায়।
সব একসাথে মুছতে Reset everything — আপনার setup, results, scraper, settings, proxy ও key মুছে sign out হয় (এই ব্রাউজারে অন্য account-এর ডেটায় হাত দেয় না)। যেকোনো Reset-এর পর Setup ট্যাবের উপরে ফিরে যায় আর লেখা আসে "Reset done."।
👤 Rowvana account আর plan
ঘুরে দেখতে sign in লাগে না। সব ট্যাব, Auto-setup, picker, selector, preview, hover tip — সব এমনিই চলে। কিন্তু ▶ Run, Export/Copy, Save, 🛰 Find the API, ছবির preview/download আর proxy Test চাপলে একটা প্যানেল আসে: "Sign in to run this scraper. The Free plan costs nothing." Sign in with Google দিলে যেটা চাপা হয়েছিল সেটা নিজে থেকেই চলে। Not now দিলে প্যানেল বন্ধ হয়, setup যেমন ছিল তেমনই থাকে।
উপরের লাইন (সব ট্যাবে): sign in না করা থাকলে Sign in আর ↺। Sign in করা থাকলে ছবি, নাম, email, plan-এর ব্যাজ, ⏻ (sign out) আর ↺ (reset)। ব্যাজের রং বলে plan-এর মেয়াদ কোথায় আছে: সবুজ = নতুন, নীল = মাঝামাঝি, হলুদ = শেষের দিকে, লাল = প্রায় শেষ, ধূসর = Free। ব্যাজে মাউস রাখলে দেখায় কবে থেকে চালু আর কবে renew হবে (বা শেষ হবে)।
প্রতিটা account-এর ডেটা আলাদা। Setup, Results, saved scraper, Settings, proxy আর API key — সব account ধরে রাখা হয়। Sign out করলে পপআপ খালি দেখায়, যাতে একই Chrome-এ পরের জন কিছু না দেখে। কিছু মোছে না: একই account আবার sign in করলে সব ফিরে আসে, অন্য account শুধু নিজেরটা দেখে। Sign in-এর আগে বানানো setup account-এ চলে যায় (account-এর নিজের unsaved setup না থাকলে)।
Sign in ৬০ দিন থাকে, আর নিয়মিত ব্যবহার করলে মেয়াদ নিজে থেকেই বাড়ে। Free plan-এ: এক রানে ৫ পেজ, প্রতি export-এ ৫০০ row, ২টা saved scraper। নতুন account-এ trial-এর অফার থাকলে Setup-এর উপরে একটা সবুজ ব্যানার আর উপরের লাইনে Try free চিপ আসে (কার্ড লাগে না)। × দিলে ব্যানার ৭ দিন লুকানো থাকে, চিপটা থাকে। প্ল্যানের সীমায় রান আটকালে আর trial দিয়ে সেটা চললে Start free trial চাপুন — trial শুরু হয়ে রান নিজে থেকেই চলবে। দাম সার্ভার থেকে আসে; অফার চললে পুরো দাম কাটা থাকে আর পাশে ছাড়ের দাম।
| কী | যে plan লাগবে |
|---|---|
| ৫০ পেজ / ৫,০০০ row / ১০ scraper, Product page | Starter |
| সীমাহীন পেজ ও row, ৫০ scraper, Click mode, সাইটের API, embedded JSON | Pro |
| Image download, proxy, সীমাহীন scraper | Max |
- যে কন্ট্রোল আপনার plan-এ নেই, তার পাশে ছোট ব্যাজে লেখা থাকে কোন plan লাগবে। চালাতে গেলে Setup-এ বার্তা আর Upgrade বাটন আসে — রান শুরুই হয় না, কিছু খোলা বা ক্লিক হয় না।
- Export-এ সীমার বেশি row থাকলে প্রথম N row export হয় আর তা লেখা থাকে; Results-এ সব থাকে, তাই upgrade করলে আবার চালাতে হয় না।
- Upgrade → Starter / Pro / Max, Monthly বা Yearly → নতুন ট্যাবে checkout। পেমেন্টের পর কার্ড নিজেই "You're on …" দেখায়। বিল, কার্ড বা বাতিল — Manage billing।
- এক account, এক কম্পিউটার। অন্য কোথাও sign in করলে এখানে রান থামে আর লেখা আসে "Your Rowvana account is now in use on another device" — Sign in here চাপলে আবার এখানে চলে আসে।
- নেট না থাকলে শেষ যাচাইয়ের পর ২৪ ঘণ্টা পর্যন্ত আপনার plan চলে, তারপর Free — নেট ফিরলে আবার আগের plan।
- Account মুছতে: ⚙-এর একদম শেষের লাল কার্ড। বক্সে
Delete my Rowvana accountটাইপ করলে তবেই Delete বাটন চালু হয়। আগে Manage billing-এ plan বাতিল করে নিন। এই ব্রাউজারে ওই account-এর scraper, results আর settings-ও মুছে যায়। Reset শুধু sign out করে, account মোছে না।
সাধারণ সমস্যা ও সমাধান
Popup-এ সব বাটন ধূসর, লেখা "This page cannot be scraped"
chrome://, Web Store, নতুন ট্যাব) কোনো extension চালাতে দেয় না। একটা সাধারণ ওয়েবসাইট খুলুন।Extract চাপলে 0 rows আসে
একটা কলাম ফাঁকা, বাকিগুলো ঠিক
src, লিংকের জন্য href লাগে, text না। অথবা কিছু কার্ডে ওই জিনিসটা নেই (যেমন সব প্রোডাক্টে ডিসকাউন্ট থাকে না) — সেটা স্বাভাবিক।Pagination চালু, কিন্তু শুধু প্রথম পেজ আসে
Infinite scroll চালু, তবু পুরো লিস্ট স্ক্রল হচ্ছে না
পুরোনো সেটআপে ▶ চাপলাম, ২টা row এল
a[aria-label="Pillar Hall"]) — তখন শুধু ওই একটা row-ই ডেটা দিত, বাকিগুলো ফাঁকা। এখন selector বানানোর সময় যাচাই করা হয় যে ওটা অন্য row-গুলোতেও কাজ করে কিনা।Maps-এ মাত্র ২টা row এল, তারপর থেমে গেল
/place/...) ছিলেন, সার্চ রেজাল্টের পেজে নয়; তখন extension রেজাল্ট-প্যানেলের ভিতরের কাঠামোটাকেই "লিস্ট" ভেবে বসত (একটা row-এর টাইটেল হয়ে যেত "Results")। এখন ৩টার কম row পেলে সে নিজেই থেমে গিয়ে বলে দেয়। দুই — Infinite scroll বন্ধ ছিল, তাই পেজে যে কয়টা কার্ড লোড ছিল কেবল সেগুলোই এসেছে; এখন Auto-setup দরকার হলে নিজেই ওটা অন করে দেয়। আগের সেভ করা প্রোফাইল থাকলে আরেকবার ⚡ Auto-setup চালিয়ে নিন।Maps-এ সব row-তে একই ডেটা
_detail_error আসে, আর ক্লিক দেওয়া হয় কার্ডের আসল লিংকে। তবু হলে সাইটের লিংকসহ support@rowvana.com-এ লিখুন।Phone কলামে ঠিকানা আসছে
data-item-id, aria-label দিয়ে আলাদা করা হয়। পুরোনো সেভ করা প্রোফাইল হলে আবার Auto-setup চালিয়ে নিন।Specifications-এ অদ্ভুত কলাম ("LIVE", "Sep 19, 12")
Excel-এ বাংলা ভাঙা দেখাচ্ছে
Popup বন্ধ করলে কাজ থেমে যাবে?
Picker প্যানেল পেজের কনটেন্ট ঢেকে দিচ্ছে
তবু সমাধান হচ্ছে না?
ভালো অভ্যাস
- আগে Preview, পরে Extract। এক পেজে ঠিক আসছে দেখে তারপর ৫০ পেজে ছাড়ুন।
- Delay কমাবেন না। পেজে ৭০০ms, প্রোডাক্টে ১০০০ms — এর নিচে গেলে সাইট আপনার IP ব্লক করতে পারে।
- বড় কাজ ভাগ করে। ৫০০+ প্রোডাক্ট হলে Max items ১০০ করে কয়েক দফায় চালান, প্রতিবার export করে রাখুন।
- সেটআপ সেভ করুন — কাজ শেষে Saved ট্যাবে প্রোফাইল হিসেবে। সাইট বদলালে শুধু ভাঙা field-টা ঠিক করলেই চলবে।
- সাইটের নিয়ম মানুন। Terms of Service আর robots.txt দেখে নিন; ব্যক্তিগত ডেটা (ফোন, ইমেইল) কোন কাজে লাগাচ্ছেন সেটা ভেবে দেখুন।
- লগইন লাগলে আগে নিজে লগইন করুন — extension আপনার ব্রাউজারের সেশনেই চলে, তাই আলাদা কিছু করতে হয় না।