আপনি অবশ্যই একটি ভাল ওয়েব স্ক্র্যাপিং ফ্রেমওয়ার্ক দিয়ে শুরু করতে চাইবেন। পরে আপনি সিদ্ধান্ত নিতে পারেন যে এগুলি খুব সীমাবদ্ধ এবং আপনি আপনার নিজের লাইব্রেরির স্ট্যাক একসাথে রাখতে পারেন তবে প্রচুর স্ক্র্যাপিংয়ের অভিজ্ঞতা ছাড়াই আপনার নকশাটি পিজস্ক্র্যাপ বা স্কেরাপির চেয়ে আরও খারাপ হবে।
দ্রষ্টব্য: আমি এখানে ক্রলিং এবং স্ক্র্যাপিং শব্দগুলি মূলত বিনিময়যোগ্য ব্যবহার করি। এটি আপনার কোওড়া প্রশ্নের আমার উত্তরের একটি অনুলিপি, এটি বেশ দীর্ঘ।
সরঞ্জামসমূহ
আপনার পছন্দসই ব্রাউজারের উপর নির্ভর করে ফায়ারব্যাগ বা ক্রোম ডেভ সরঞ্জামগুলির সাথে খুব পরিচিত হন। আপনি যে সাইট থেকে ডেটা টানছেন এবং ব্রাউজ করবেন তাতে কোন ইউআরএলে আপনার সন্ধান করা ডেটা রয়েছে এবং কোন ডেটা ফর্ম্যাটগুলি প্রতিক্রিয়াগুলি তৈরি করে তা ম্যাপ করার জন্য এটি একেবারে প্রয়োজনীয় হবে।
আপনার এইচটিটিপি পাশাপাশি এইচটিএমএল সম্পর্কে একটি ভাল কাজের জ্ঞান প্রয়োজন হবে এবং সম্ভবত মাঝারি প্রক্সি সফ্টওয়্যারটিতে একটি শালীন মানুষ খুঁজে পেতে চাইবেন। আপনাকে এইচটিটিপি অনুরোধ এবং প্রতিক্রিয়াগুলি পরীক্ষা করতে এবং কুকিজ এবং সেশন সম্পর্কিত তথ্য এবং কোয়েরি পরামিতিগুলি কীভাবে পাশ করা হচ্ছে তা বুঝতে সক্ষম হতে হবে। ফিডলার ( http://www.telerik.com/fiddler ) এবং চার্লস প্রক্সি ( http://www.charlesproxy.com/ ) জনপ্রিয় সরঞ্জাম। আমি mitmproxy ( http://mitmproxy.org/ ) ব্যবহার করি কারণ আমি মাউস লোকের চেয়ে কীবোর্ডের লোক more
এমন এক ধরণের কনসোল / শেল / আরপিএল টাইপ পরিবেশ যেখানে আপনি তাত্ক্ষণিক প্রতিক্রিয়া সহ কোডের বিভিন্ন টুকরা চেষ্টা করতে পারেন তা অমূল্য হবে। এর মতো বিপরীত প্রকৌশল কাজগুলি অনেকগুলি পরীক্ষার এবং ত্রুটিযুক্ত হয় তাই আপনি এমন একটি ওয়ার্কফ্লো চাইবেন যা এটি সহজ করে তোলে।
ভাষা
পিএইচপি মূলত বাইরে, এটি এই কাজের জন্য উপযুক্ত নয় এবং লাইব্রেরি / কাঠামোর সমর্থন এই ক্ষেত্রে খুব কম। পাইথন (স্কেরাপি একটি দুর্দান্ত সূচনা পয়েন্ট) এবং ক্লোজার / ক্লোজারস স্ক্রিপ্ট (অবিশ্বাস্যভাবে শক্তিশালী এবং উত্পাদনশীল তবে একটি বড় শিক্ষার বক্ররেখা) এই সমস্যাটির জন্য দুর্দান্ত ভাষা। যেহেতু আপনি কোনও নতুন ভাষা শিখবেন না এবং আপনি ইতিমধ্যে জাভাস্ক্রিপ্ট জানেন আমি অবশ্যই জেএসের সাথে লেগে থাকার পরামর্শ দেব। আমি pjscrape ব্যবহার করি নি তবে তাদের ডক্সটি দ্রুত পঠন থেকে এটি বেশ ভাল দেখাচ্ছে। এটি ভালভাবে উপযোগী এবং আমি নীচে বর্ণিত সমস্যার একটি দুর্দান্ত সমাধান কার্যকর করে।
নিয়মিত প্রকাশের উপর একটি নোট: এইচটিএমএল পার্স করার জন্য নিয়মিত এক্সপ্রেশনগুলি ব্যবহার করবেন না। প্রচুর নবজাতক এটি করেন কারণ তারা ইতিমধ্যে রেজেক্সের সাথে পরিচিত। এটি একটি বিশাল ভুল, এইচটিএমএল নেভিগেট করতে এক্সপাথ বা সিএসএস নির্বাচক ব্যবহার করুন এবং কেবল এইচটিএমএল নোডের অভ্যন্তরে প্রকৃত পাঠ্য থেকে ডেটা বের করতে নিয়মিত এক্সপ্রেশন ব্যবহার করুন। এটি ইতিমধ্যে আপনার কাছে সুস্পষ্ট হয়ে উঠেছে, আপনি চেষ্টা করে দেখলে তা দ্রুত স্পষ্ট হয়ে ওঠে তবে প্রচুর মানুষ কোনও কারণে এই রাস্তায় নামতে প্রচুর সময় নষ্ট করে। এক্সপাথ বা সিএসএস নির্বাচকদের ভয় পাবেন না, তারা রেজেক্সেসের চেয়ে শেখার উপায় সহজ এবং এগুলি এই সঠিক সমস্যাটি সমাধান করার জন্য তৈরি করা হয়েছিল।
জাভাস্ক্রিপ্ট-ভারী সাইট
পুরানো দিনগুলিতে আপনাকে কেবল একটি http অনুরোধ করতে হয়েছিল এবং এইচটিএমএল পুনর্বিবেচনা পার্স করতে হয়েছিল। এখন আপনাকে অবশ্যই অবশ্যই এমন সাইটগুলি মোকাবেলা করতে হবে যা লক্ষ্য সাইটের জাভাস্ক্রিপ্ট অংশ দ্বারা করা স্ট্যান্ডার্ড এইচটিএমএল এইচটিটিপি অনুরোধ / প্রতিক্রিয়া এবং অ্যাসিঙ্ক্রোনাস এইচটিটিপি কলগুলির মিশ্রণ। এটিই আপনার প্রক্সি সফ্টওয়্যার এবং ফায়ারব্যাগ / ডেভলগুলি নেটওয়ার্ক ট্যাবটি খুব কাজে আসে। এগুলির প্রতিক্রিয়াগুলি এইচটিএমএল হতে পারে বা এগুলি জসন হতে পারে, বিরল ক্ষেত্রে তারা এক্সএমএল বা অন্য কিছু হতে পারে।
এই সমস্যার দুটি উপায় আছে:
নিম্ন স্তরের পদ্ধতির:
সাইট জাভাস্ক্রিপ্ট কল করছে এবং কীভাবে সেই প্রতিক্রিয়াগুলি দেখতে পাওয়া যায় এবং কীভাবে সেই একই অনুরোধগুলি নিজেই তৈরি করে তা আজাক্স ইউআরএলগুলি কী কী url গুলিতে অনুগ্রহ করে তা বের করতে পারেন। সুতরাং আপনি http://example.com/foobar থেকে এইচটিএমএল টানতে পারেন এবং এক টুকরো ডেটা বের করতে পারেন এবং তারপরে http://example.com/api/ باز?foo= b থেকে জেসন প্রতিক্রিয়া টানতে হবে ... অন্যান্য টুকরা তথ্য পেতে। সঠিক কুকিজ বা সেশন প্যারামিটারগুলি পাস করার বিষয়ে আপনাকে সচেতন হতে হবে। এটি খুব বিরল, তবে মাঝেমধ্যে এজ্যাক্স কলের জন্য কিছু প্রয়োজনীয় প্যারামিটারগুলি সাইটের জাভাস্ক্রিপ্টে করা কিছু ক্রেজি গণনার ফলাফল হবে, বিপরীত প্রকৌশল এটি বিরক্তিকর হতে পারে।
এম্বেড ব্রাউজার পদ্ধতির:
এইচটিএমএলে কোন ডেটা রয়েছে এবং এজ্যাক্স কল থেকে কোন ডেটা আসে তা আপনার কেন কাজ করার প্রয়োজন? সমস্ত সেশন এবং কুকি ডেটা পরিচালনা করছেন? আপনি যখন কোনও সাইট ব্রাউজ করবেন তখন আপনার দরকার নেই, ব্রাউজার এবং সাইট জাভাস্ক্রিপ্ট এটি করে। এই হল ব্যপার.
আপনি যদি কেবল পৃষ্ঠাটিকে ফ্যান্টমজসের মতো একটি হেডলেস ব্রাউজার ইঞ্জিনে লোড করেন তবে এটি পৃষ্ঠাটি লোড করবে, জাভাস্ক্রিপ্টটি চালাবে এবং আপনাকে জানাতে হবে যে সমস্ত অজ্যাক্স কল শেষ হয়ে গেছে। উপযুক্ত ক্লিকগুলি বা উপযুক্ত ডেটা লোড করার জন্য সাইট জাভাস্ক্রিপ্ট ট্রিগার করার জন্য প্রয়োজনীয় যা প্রয়োজন তা আপনার নিজের জাভাস্ক্রিপ্ট ইনজেক্ট করতে পারেন।
আপনার কাছে এখন দুটি অপশন রয়েছে, সমাপ্ত এইচটিএমএলকে স্পিট করে এটিকে পার্স করুন বা এমন পৃষ্ঠাতে কিছু জাভাস্ক্রিপ্ট ইনজেক্ট করুন যা আপনার বিশ্লেষণ এবং ডেটা ফর্ম্যাটিং করে এবং ডেটা স্পিট করে (সম্ভবত জসন ফর্ম্যাটে)। আপনি নিখরচায় এই দুটি বিকল্প মিশ্রণ করতে পারেন।
কোন পদ্ধতির সেরা?
এটি নির্ভর করে, আপনার নিশ্চিতভাবে নিম্ন স্তরের পদ্ধতির সাথে আপনার পরিচিত এবং আরামদায়ক হতে হবে। এম্বেড করা ব্রাউজারের পদ্ধতির জন্য যে কোনও কিছুর জন্য কাজ করে, এটি প্রয়োগ করা অনেক সহজ হবে এবং স্ক্র্যাপিংয়ের কিছু জটিল সমস্যাগুলি অদৃশ্য হয়ে যাবে। এটি বেশ জটিল একটি জটিল টুকরো যা আপনাকে বুঝতে হবে। এটি কেবল এইচটিটিপি অনুরোধ এবং প্রতিক্রিয়া নয়, এটির অনুরোধগুলি, এম্বেড করা ব্রাউজার রেন্ডারিং, সাইট জাভাস্ক্রিপ্ট, ইনজেক্টেড জাভাস্ক্রিপ্ট, আপনার নিজের কোড এবং এম্বেড করা ব্রাউজার প্রক্রিয়াটির সাথে 2-মুখী মিথস্ক্রিয়া।
এম্বেড করা ব্রাউজারকে রেন্ডারিংয়ের ওভারহেড কারণে অনেক মাত্রায় ধীর হয় কিন্তু যে প্রায় অবশ্যই ব্যাপার না, যদি না আপনি বিভিন্ন ডোমেইনের অনেক চাঁচুনি করবে। আপনার অনুরোধগুলিকে সীমাবদ্ধ করার জন্য আপনার প্রয়োজনীয়তা একক ডোমেনের ক্ষেত্রে রেন্ডারিং সময়টিকে সম্পূর্ণ নগণ্য করে তুলবে।
হার সীমাবদ্ধ / বট আচরণ
আপনার এ সম্পর্কে খুব সচেতন হওয়া দরকার। যুক্তিসঙ্গত হারে আপনার টার্গেট ডোমেনগুলিতে আপনাকে অনুরোধ করতে হবে। ওয়েবসাইট ক্রল করার সময় আপনাকে একটি ভাল আচরণ করা বট লিখতে হবে এবং এর অর্থ হ'ল রোবটস.টেক্সটকে সম্মান করা এবং অনুরোধ সহ সার্ভারকে হাতুড়ি না দেওয়া। এখানে ভুল বা অবহেলা অত্যন্ত অনৈতিক, কারণ এটি পরিষেবা আক্রমণকে অস্বীকার হিসাবে বিবেচনা করা যেতে পারে। গ্রহণযোগ্য হার আপনি কাকে জিজ্ঞাসা করে তার উপর নির্ভর করে, 1req / s সর্বাধিক যেটি গুগল ক্রলারে চলে তবে আপনি গুগল নন এবং আপনি সম্ভবত গুগলের মতো স্বাগত নন। এটি যুক্তিসঙ্গত হিসাবে ধীর রাখুন। আমি প্রতিটি পৃষ্ঠার অনুরোধের মধ্যে 2-5 সেকেন্ডের পরামর্শ দেব।
এমন একটি ব্যবহারকারী এজেন্ট স্ট্রিং দিয়ে আপনার অনুরোধগুলি সনাক্ত করুন যা আপনার বটকে সনাক্ত করে এবং এটির উদ্দেশ্য ব্যাখ্যা করে আপনার বটের জন্য একটি ওয়েবপৃষ্ঠা রয়েছে। এই ইউআরএল এজেন্ট স্ট্রিং মধ্যে যায়।
সাইটটি আপনাকে ব্লক করতে চাইলে আপনার অবরুদ্ধ করা সহজ হবে। তাদের শেষের একজন স্মার্ট ইঞ্জিনিয়ার সহজেই বটগুলি সনাক্ত করতে পারে এবং কয়েক মিনিটের কাজ শেষ হতে পারে আপনার সপ্তাহে কয়েক সপ্তাহের কাজ আপনার স্ক্র্যাপিং কোডটি পরিবর্তন করে বা কেবল এটি অসম্ভব করে তোলে। যদি সম্পর্কটি বিরোধী হয় তবে লক্ষ্য স্থলে থাকা একজন স্মার্ট ইঞ্জিনিয়ার কোনও ক্রলারের লেখার জন্য একজন প্রতিভা ইঞ্জিনিয়ারকে পুরোপুরি স্টিমি করতে পারেন। স্ক্র্যাপিং কোড সহজাতভাবে ভঙ্গুর এবং এটি সহজেই কাজে লাগানো হয়। এই প্রতিক্রিয়াটিকে উত্সাহিত করবে এমন কিছু প্রায় যাইহোক অবশ্যই অনৈতিক, সুতরাং একটি ভাল আচরণ করা বট লিখুন এবং এই সম্পর্কে চিন্তা করবেন না।
পরীক্ষামূলক
ইউনিট / ইন্টিগ্রেশন পরীক্ষার ব্যক্তি নন? খুব খারাপ. আপনাকে এখন এক হতে হবে। সাইটগুলি ঘন ঘন পরিবর্তিত হয় এবং আপনি আপনার কোড ঘন ঘন পরিবর্তন করবেন। এটি চ্যালেঞ্জের একটি বড় অংশ।
একটি আধুনিক ওয়েবসাইট স্ক্র্যাপ করার সাথে প্রচুর চলন্ত অংশ জড়িত রয়েছে, ভাল পরীক্ষার অনুশীলনগুলি অনেক সাহায্য করবে। এই ধরণের কোড লেখার সময় আপনি যে সমস্ত বাগের মুখোমুখি হবেন তা হ'ল ধীরে ধীরে নষ্ট হয়ে যাওয়া ডেটা ফিরবে। প্রতিক্রিয়াগুলির জন্য পরীক্ষা করার জন্য ভাল পরীক্ষা ছাড়াই আপনি জানতে পারবেন যে আপনি কিছুক্ষণ বিবেচনা না করে আপনার ডেটাবেজে অকেজো কলুষিত ডেটা সংরক্ষণ করছেন। এই প্রকল্পটি আপনাকে ডেটা বৈধকরণ (ব্যবহারের জন্য কিছু ভাল গ্রন্থাগার খুঁজে বের করুন) এবং পরীক্ষার সাথে খুব পরিচিত করে তুলবে। অন্যান্য অনেকগুলি সমস্যা নেই যা সংবিধানের জন্য বিস্তৃত পরীক্ষা প্রয়োজন এবং পরীক্ষা করা খুব কঠিন to
আপনার পরীক্ষার দ্বিতীয় অংশে ক্যাচিং এবং পরিবর্তন সনাক্তকরণ জড়িত। আপনার কোডটি লেখার সময় আপনি অকারণে একই পৃষ্ঠার জন্য বার বার সার্ভারকে হাতুড়ি করতে চাইবেন না। আপনার ইউনিট পরীক্ষা চালানোর সময় আপনি জানতে চান যে আপনার পরীক্ষাগুলি ব্যর্থ হচ্ছে কিনা কারণ আপনি আপনার কোডটি ভেঙে দিয়েছেন বা ওয়েবসাইটটি নতুন করে ডিজাইন করা হয়েছে। জড়িত url এর ক্যাশেড অনুলিপিটির বিরুদ্ধে আপনার ইউনিট পরীক্ষা চালান। একটি ক্যাচিং প্রক্সি এখানে খুব দরকারী তবে কনফিগার করতে এবং সঠিকভাবে ব্যবহার করার জন্য কৌশলযুক্ত।
সাইটটি পরিবর্তন হয়েছে কিনা তাও আপনি জানতে চান। যদি তারা সাইটটি নতুন করে ডিজাইন করে এবং আপনার ক্রলারটি ভেঙে যায় তবে আপনার ইউনিট পরীক্ষাগুলি এখনও পাস হবে কারণ তারা ক্যাশেড অনুলিপিটির বিরুদ্ধে চলছে! আপনার অন্য একটি, ছোট ইন্টিগ্রেশন পরীক্ষার প্রয়োজন হবে যা লাইভ সাইটের বিরুদ্ধে অবিচ্ছিন্নভাবে চালানো হয় বা আপনার ক্রলিং কোডে ভাল লগিং এবং ত্রুটি সনাক্তকরণ যা সঠিক সমস্যাগুলিতে লগ করে, সমস্যাটি সম্পর্কে আপনাকে সতর্ক করে এবং ক্রলিং বন্ধ করে। এখন আপনি নিজের ক্যাশে আপডেট করতে পারেন, আপনার ইউনিট পরীক্ষা চালাতে পারেন এবং আপনাকে কী পরিবর্তন করতে হবে তা দেখতে পারেন।
আইনি সমস্যা
আপনি মূ .় কাজগুলি করলে এখানকার আইনটি কিছুটা বিপজ্জনক হতে পারে। যদি আইন জড়িত হয় আপনি নিয়মিতভাবে উইজেট এবং কার্লকে "হ্যাকিং সরঞ্জাম" হিসাবে উল্লেখ করেন এমন লোকদের সাথে আপনি আচরণ করছেন। আপনি এটি চান না।
পরিস্থিতির নৈতিক বাস্তবতা হ'ল ব্রাউজার সফটওয়্যারটি ইউআরএল অনুরোধ করার জন্য এবং কিছু ডেটা দেখার জন্য এবং আপনার নিজের সফ্টওয়্যারটি ইউআরএল অনুরোধ করার জন্য এবং কিছু ডেটা দেখার জন্য কোনও পার্থক্য নেই। গুগল বিশ্বের বৃহত্তম স্ক্র্যাপিং সংস্থা এবং তারা এটির জন্য পছন্দ হয়। ব্যবহারকারী এজেন্টে আপনার বটসের নাম সনাক্তকরণ এবং আপনার ওয়েব ক্রলারের লক্ষ্য এবং উদ্দেশ্য সম্পর্কে উন্মুক্ত থাকা আইনটি গুগল কী তা বুঝতে পেরে এখানে সহায়তা করবে। আপনি যদি জঘন্য কিছু করছেন, যেমন নকল ব্যবহারকারীর অ্যাকাউন্ট তৈরি করা বা সাইটের এমন অঞ্চলে অ্যাক্সেস করা যা আপনার উচিত নয় (হয় রোবটসটেক্স দ্বারা "ব্লকড" বা কোনও প্রকার অনুমোদনের কারণে) তবে সচেতন হন যে আপনি অনৈতিক কিছু করছেন এবং প্রযুক্তির বিষয়ে আইনের অজ্ঞতা অসাধারণভাবে বিপজ্জনক হবে এখানে। এটি একটি হাস্যকর পরিস্থিতি তবে এটি বাস্তব।
আস্তে আস্তে নাগরিক হিসাবে আপ এবং উপরে একটি নতুন সার্চ ইঞ্জিন তৈরি করা এবং ভুল করা বা আপনার সফ্টওয়্যারটিতে একটি বাগ থাকতে পারে এবং হ্যাকার হিসাবে দেখা যেতে পারে এটি আক্ষরিকভাবে সম্ভব। আপনি বর্তমান রাজনৈতিক বাস্তবতা বিবেচনা করতে চান এমন কিছু নয়।
আমি যিনি যাইহোক লেখার এই দৈত্য প্রাচীরটি লিখতে চাই?
আমি আমার জীবনে প্রচুর ওয়েব ক্রলিং সম্পর্কিত কোড লিখেছি। আমি পরামর্শদাতা, কর্মচারী এবং স্টার্টআপ প্রতিষ্ঠাতা হিসাবে এক দশকেরও বেশি সময় ধরে ওয়েব সম্পর্কিত সফটওয়্যার বিকাশ করছি। প্রথম দিনগুলি পার্ল ক্রোলার / স্ক্র্যাপার এবং পিএইচপি ওয়েবসাইটগুলি লিখছিল। যখন আমরা জেসি জেমস গ্যারেট এটিজ্যাক্স নামকরণের আগে এক্সএমএলএইচটিপিআরকেস্ট ধারণার আগে অজ্যাক্স করার জন্য ওয়েব পৃষ্ঠাগুলিতে সিএসভি ডেটা লোড করে লুকানো ইফ্রেমস এম্বেড করছিলাম X JQuery এর আগে, json এর আগে। আমি আমার 30-এর দশকের মাঝামাঝি, এটি সম্ভবত এই ব্যবসায়ের জন্য প্রাচীন হিসাবে বিবেচিত।
আমি দু'বার বড় আকারের ক্রলিং / স্ক্র্যাপিং সিস্টেম লিখেছি, একবার কোনও মিডিয়া সংস্থায় (পার্লে) একটি বড় দলের জন্য এবং সম্প্রতি একটি অনুসন্ধান দলের জন্য সিটিও হিসাবে একটি ছোট দলের জন্য (পাইথন / জাভাস্ক্রিপ্ট) small আমি বর্তমানে পরামর্শদাতা হিসাবে কাজ করি, বেশিরভাগ ক্লোজার / ক্লোজারস্রিপ্টে কোডিং করি (সাধারণভাবে একটি দুর্দান্ত বিশেষজ্ঞ ভাষা এবং এতে লাইব্রেরি রয়েছে যা ক্রলার / স্ক্র্যাপের সমস্যাগুলিকে আনন্দ দেয়)
আমি পাশাপাশি সফল অ্যান্টি-ক্রলিং সফ্টওয়্যার সিস্টেম লিখেছি। আপনি যদি চান না বা আপনার পছন্দ না করেন এমন বটগুলি সনাক্ত করতে এবং নাশকতা করতে চান তবে নিকট-স্ক্র্যাপেবল সাইটগুলি রচনা করা লক্ষণীয়ভাবে সহজ।
আমি অন্য যে কোনও ধরণের সফ্টওয়্যারের চেয়ে ক্রোলার, স্ক্র্যাপার এবং পার্সার লিখতে পছন্দ করি। এটি চ্যালেঞ্জিং, মজাদার এবং আশ্চর্যজনক জিনিসগুলি তৈরি করতে ব্যবহৃত হতে পারে।