কোনও ওয়েবসাইট থেকে ডেটা স্ক্র্যাপ করার সর্বোত্তম উপায় কী? [বন্ধ]


107

আমার কোনও ওয়েবসাইট থেকে বিষয়বস্তু বের করতে হবে, তবে অ্যাপ্লিকেশনটি কোনও অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস বা ডেটা প্রোগ্রামিয়ালি অ্যাক্সেসের জন্য অন্য কোনও প্রক্রিয়া সরবরাহ করে না।

আমি আমদানি.ইও নামে একটি তৃতীয় পক্ষের সরঞ্জাম পেয়েছি যা ওয়েব পৃষ্ঠাগুলি স্ক্র্যাপিং এবং ডেটা সেট তৈরির জন্য ক্লিক এবং গুন কার্যকারিতা সরবরাহ করে, কেবলমাত্র আমি নিজের ডেটা স্থানীয়ভাবে রাখতে চাই এবং আমি কোনও সাবস্ক্রিপশন পরিকল্পনায় সাবস্ক্রাইব করতে চাই না ।

ওয়েব পৃষ্ঠাগুলি স্ক্র্যাপ করার জন্য এবং তাদের ডেটাসেটগুলি তৈরি করার জন্য এই সংস্থাটি কোন ধরণের কৌশল ব্যবহার করে? আমি কিছু ওয়েব স্ক্র্যাপিং ফ্রেমওয়ার্ক পেয়েছি pjscrape এবং স্কেরাপি তারা এ জাতীয় বৈশিষ্ট্য সরবরাহ করতে পারে


4
পিএইচপি অবশ্যই প্রশ্নের বাইরে নয়, এটি স্পষ্টতই ভুল, স্পষ্টতই। gist.github.com/krakjoe/b1526fcc828621e840cb
জো ওয়াটকিন্স

@ জোওয়াটকিনস যা দেখতে সত্যিই দুর্দান্ত দেখাচ্ছে, এটি চালানোর জন্য কি কোনও বিশেষ পিএইচপি কনফিগারেশন প্রয়োজন? এবং নীচে কীভাবে সরঞ্জাম / ভাষার সাথে তুলনা করা যায়?
0x1 এড 2

1
এটি পিএইচপি, এবং pthreads একটি থ্রেড নিরাপদ বিল্ড প্রয়োজন, github.com/krakjoe/pthreads/blob/master/README.md পড়ুন , আপনি আমাকে বা অন্য কারও সাহায্য চাইলে চ্যাটে আমাকে খুঁজে পেতে পারেন :)
জো ওয়াটকিন্স

@ 0x1ad2 আপনি যদি স্থানীয়ভাবে ডেটা রাখতে চান তবে ওয়েব এপিআই এর পরিবর্তে আপনার সফ্টওয়্যার ( ডাটাস্ক্র্যাপিং.কম ) চেষ্টা করা উচিত । ওয়েবসাইটগুলি থেকে ডেটা আহরণের জন্য বেশিরভাগ সরঞ্জাম এক্সপথ, সিএসএস নির্বাচনকারী এবং আরইজিএক্সএক্স ব্যবহার করে এবং ডেটা স্ক্র্যাপিং স্টুডিও এই সমস্ত 3 টি বৈশিষ্ট্য সমর্থন করে।
বিকাশ রাথি 10

দুটি উপায় আছে, একটি হ'ল ফ্রি / ওপেন সোর্স লাইব্রেরি ব্যবহার করে নিজের রোল আউট করা যা অনেক প্রচেষ্টা করে takes আপনি আক্ষরিকভাবে স্ক্র্যাপ.ইটি ব্যবহার করে যে কোনও সাইটের জন্য একটি অজ্যাক্স ওয়েব ক্রলার তৈরি করতে পারেন It এটি একটি অর্থ প্রদানের সরঞ্জাম it
আমি পাইথনকে

উত্তর:


271

আপনি অবশ্যই একটি ভাল ওয়েব স্ক্র্যাপিং ফ্রেমওয়ার্ক দিয়ে শুরু করতে চাইবেন। পরে আপনি সিদ্ধান্ত নিতে পারেন যে এগুলি খুব সীমাবদ্ধ এবং আপনি আপনার নিজের লাইব্রেরির স্ট্যাক একসাথে রাখতে পারেন তবে প্রচুর স্ক্র্যাপিংয়ের অভিজ্ঞতা ছাড়াই আপনার নকশাটি পিজস্ক্র্যাপ বা স্কেরাপির চেয়ে আরও খারাপ হবে।

দ্রষ্টব্য: আমি এখানে ক্রলিং এবং স্ক্র্যাপিং শব্দগুলি মূলত বিনিময়যোগ্য ব্যবহার করি। এটি আপনার কোওড়া প্রশ্নের আমার উত্তরের একটি অনুলিপি, এটি বেশ দীর্ঘ।

সরঞ্জামসমূহ

আপনার পছন্দসই ব্রাউজারের উপর নির্ভর করে ফায়ারব্যাগ বা ক্রোম ডেভ সরঞ্জামগুলির সাথে খুব পরিচিত হন। আপনি যে সাইট থেকে ডেটা টানছেন এবং ব্রাউজ করবেন তাতে কোন ইউআরএলে আপনার সন্ধান করা ডেটা রয়েছে এবং কোন ডেটা ফর্ম্যাটগুলি প্রতিক্রিয়াগুলি তৈরি করে তা ম্যাপ করার জন্য এটি একেবারে প্রয়োজনীয় হবে।

আপনার এইচটিটিপি পাশাপাশি এইচটিএমএল সম্পর্কে একটি ভাল কাজের জ্ঞান প্রয়োজন হবে এবং সম্ভবত মাঝারি প্রক্সি সফ্টওয়্যারটিতে একটি শালীন মানুষ খুঁজে পেতে চাইবেন। আপনাকে এইচটিটিপি অনুরোধ এবং প্রতিক্রিয়াগুলি পরীক্ষা করতে এবং কুকিজ এবং সেশন সম্পর্কিত তথ্য এবং কোয়েরি পরামিতিগুলি কীভাবে পাশ করা হচ্ছে তা বুঝতে সক্ষম হতে হবে। ফিডলার ( 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 আমি বর্তমানে পরামর্শদাতা হিসাবে কাজ করি, বেশিরভাগ ক্লোজার / ক্লোজারস্রিপ্টে কোডিং করি (সাধারণভাবে একটি দুর্দান্ত বিশেষজ্ঞ ভাষা এবং এতে লাইব্রেরি রয়েছে যা ক্রলার / স্ক্র্যাপের সমস্যাগুলিকে আনন্দ দেয়)

আমি পাশাপাশি সফল অ্যান্টি-ক্রলিং সফ্টওয়্যার সিস্টেম লিখেছি। আপনি যদি চান না বা আপনার পছন্দ না করেন এমন বটগুলি সনাক্ত করতে এবং নাশকতা করতে চান তবে নিকট-স্ক্র্যাপেবল সাইটগুলি রচনা করা লক্ষণীয়ভাবে সহজ।

আমি অন্য যে কোনও ধরণের সফ্টওয়্যারের চেয়ে ক্রোলার, স্ক্র্যাপার এবং পার্সার লিখতে পছন্দ করি। এটি চ্যালেঞ্জিং, মজাদার এবং আশ্চর্যজনক জিনিসগুলি তৈরি করতে ব্যবহৃত হতে পারে।


4
আমি পিএইচপি একটি খারাপ পছন্দ হচ্ছে সম্পর্কে আপনার সাথে একমত ছিলাম, তবে সঠিক লাইব্রেরি সহ এটি খুব খারাপ নয়। রেজেক্স এবং অ্যারে / স্টিং ম্যানিপুলেশন আনাড়ি তবে প্লাস দিকে এটি দ্রুত এবং সর্বত্র everywhere
পিগার্ডিরিও

3
এমন পরিবেশে যেখানে কয়েকটি পাঠাগার রয়েছে যা এটিকে আনন্দদায়ক করে তোলে এবং এটি অনেক সহজ এবং বেশ সহজ করে তোলে ... আপনি কেন "খুব খারাপ না" এর জন্য কেন স্থির হবেন। আমি সম্মত, এটি পিএইচপি (এবং ফোরট্রান, সি, ভিবি, ইত্যাদিতে) করণীয়যোগ্য তবে যদি আপনার সমস্যাটি সত্যই সহজ না হয় তবে কাজের জন্য সঠিক সরঞ্জামগুলি ব্যবহার করা আরও অনেক ভাল ধারণা হবে। এবং আবারও, যদি আপনার সমাধান করার জন্য অবিশ্বাস্যভাবে সহজ সমস্যা না হয় ... রেজেক্স সর্বত্র যে বিষয় তা কী ব্যাপার? প্রায় প্রতিটি স্ক্র্যাপিং সমস্যার তুলনায় লাইব্রেরি ইনস্টল করা অনেক সহজ। এবং প্রকৃতপক্ষে, রেজেক্স প্রায়শই এই সমস্যার জন্য বেশ ধীর হয়।
জেসি শার্লক

5
আপনি হয়ত সঠিক হতে পারেন, তবে আমি একটি সত্যের জন্য জানি যে আমি পিএইচপি তে খুব সহজে এটি করতে পারি না। আমি পিএইচপি থেকে সরে যাওয়ার আগে আমার কাছে এক দশকের পেশাদার পিএইচপি অভিজ্ঞতা ছিল। আমি পাইথনের স্কেলিং ব্যবস্থা গড়ে তুলতে এক বছরেরও বেশি সময় ব্যয় করেছি এবং পিএইচপি-তে পাওয়া যায় না এমন কয়েকটি দুর্দান্ত লাইব্রেরি না করে বা পাইথনে উপলব্ধ সংক্ষিপ্ত মেটা-প্রোগ্রামিং কৌশলগুলি না করে আমি কল্পনা করতে পারি না । আরও শক্তিশালী মেটা-প্রোগ্রামিংয়ের ক্ষমতা পেতে আমি ক্লজুরে চলে যাওয়ার কারণও এটি।
জেসি শার্লক

4
প্রকল্প নির্দিষ্ট কোডের জন্য ক্লোজারের শক্তি সহ এনলাইভ, সবচেয়ে বড় বিজয়ী। স্কিমা একটি দুর্দান্ত বৈধতা গ্রন্থাগার, যা তথ্য নিষ্কাশন কোডের এত বড় একটি অংশ। আমি মাহাউটের মতো কিছু জাতীয় জেসের মৃত্যুর জন্য ন্যাশর্ন / গেন্ডার মতো জিনিসগুলির জন্য জাভা জগতের সাথে সহজ আন্তঃআযোগ নিয়ে বর্তমানে সত্যিই খুশি। এবং ক্লোজুরের লোকেরা হ'ল এই github.com/shriphani/subotai এর মত লিব লিখেন যাতে আপনার প্রয়োজন হয় না। ... পরবর্তী মন্তব্যে অবিরত ...
জেসি শার্লক

3
আমি এটিও পেয়েছি যে যখন আপনার সত্যিকারের সত্যিকারের ব্রাউজার প্রয়োজন এবং ফ্যান্টমজ / ক্যাস্পারজগুলির সাথে যেতে হবে তখন ক্লোজুরস্ক্রিপ্টের পরিবর্তে পৃষ্ঠায় জেএসএস লেখার জন্য ক্লজুরস্ক্রিপ্ট (প্রায়শই ক্লজ এবং ক্লজ এর সাথে ভাগ করা কোড) ব্যবহার করা খুব দুর্দান্ত । সার্ভারে অত্যন্ত সমবর্তী ক্রলিং কোড সমন্বয়ের পাশাপাশি জেএস পরিবেশের অভ্যন্তরে কলব্যাক নরক থেকে বেরিয়ে আসার জন্য কোরের.সিএনসেক দুর্দান্ত (বিকল্পগুলির সাথে তুলনা করে ফ্যান্টমজের অভ্যন্তরে কোর.সিএনসিএসসিএলজেএস কোডের সাথে ব্রাউজার অটোমেশন সমন্বয় করা)।
জেসি শার্লক

21

হ্যাঁ আপনি নিজে এটি করতে পারেন। পৃষ্ঠার উত্সগুলি ধরে নেওয়া এবং আপনি যেভাবে চান সেভাবে পার্স করার বিষয় এটি।

বিভিন্ন সম্ভাবনা রয়েছে। একটি ভাল কম্বো পাইথন-অনুরোধগুলি ব্যবহার করছে (urllib2 এর শীর্ষে নির্মিত, এটি urllib.requestপাইথন 3 এ রয়েছে) এবং বিউটিফুলসপ এমপি , যার উপাদান নির্বাচন করার পদ্ধতি রয়েছে এবং সিএসএস নির্বাচকদের অনুমতিও দেয় :

import requests
from BeautifulSoup4 import BeautifulSoup as bs
request = requests.get("http://foo.bar")
soup = bs(request.text) 
some_elements = soup.find_all("div", class_="myCssClass")

কিছু এক্সপথ পার্সিং বা জ্যাকুরির মতো পাইকুরি, এলএক্সএমএল বা অন্য কিছু পছন্দ করবে ।

যখন আপনি চান ডেটা কিছু জাভাস্ক্রিপ্ট দ্বারা উত্পাদিত হয় , উপরের কাজ করবে না। আপনার হয় পাইথন-প্রেত বা সেলেনিয়ামের দরকার। আমি ফ্যান্টমজেএসের সাথে মিলিত উত্তরটিকে পছন্দ করি , ইনস্টল করা অনেক হালকা এবং সহজ এবং সহজেই ব্যবহারযোগ্য:

from selenium import webdriver
client = webdriver.PhantomJS()
client.get("http://foo")
soup = bs(client.page_source)

আমি আপনার নিজের সমাধান শুরু করার পরামর্শ দেব। আপনি স্কেরাপির সুবিধাগুলি বুঝতে পারবেন।

PS: স্ক্র্যাপেই একবার দেখুন: https://github.com/scrap/scrapely

পিপিএস: প্রোগ্রামিং জ্ঞান ছাড়াই দর্শনীয়ভাবে তথ্য আহরণ শুরু করতে পোর্তিয়ায় একবার দেখুন: https://github.com/scrapinghub/portia


আনসারটির জন্য ঠিক আছে ধন্যবাদ, কেবল সমস্যাটি হ'ল পাইথন আমার দক্ষতা-সেট-এ নেই। অন্যান্য ভাল প্রোগ্রামিং ভাষা একই কাজ করতে পারে? আমি মূলত পিএইচপি এবং জাভাস্ক্রিপ্ট নিয়ে কাজ করি।
0x1 এড

বিভ্রান্তির জন্য দুঃখিত (আমি আমার প্রশ্নে পাইথন কাঠামোর উল্লেখ করেছি), তবে পাইথন যদি এটি করার সর্বোত্তম উপায় হয় তবে আমি এটি শিখতে পারি।
0x1 এড

পাইথন স্কেরাপিকে খুব সহজ করে তোলে। এটি শিখতেও সহজ। এই মুহুর্তে সেরা পারফরম্যান্সকারী হ'ল স্কেরাপি। তাদের একটি খুব ভাল ডকুমেন্টেশন আছে।
অভিষেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.