কিভাবে একটি ওয়েবসাইট থেকে তথ্য টানার জন্য একটি বেসিক ওয়েব ক্রলার তৈরি করবেন

কিভাবে একটি ওয়েবসাইট থেকে তথ্য টানার জন্য একটি বেসিক ওয়েব ক্রলার তৈরি করবেন

যে প্রোগ্রামগুলি ওয়েবসাইট, বা ওয়েব ক্রলার থেকে তথ্য পড়ে, তাদের সব ধরণের দরকারী অ্যাপ্লিকেশন রয়েছে। আপনি স্টক তথ্য, ক্রীড়া স্কোর, একটি টুইটার অ্যাকাউন্ট থেকে পাঠ্য, বা শপিং ওয়েবসাইট থেকে দাম টানতে পারেন।





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





স্ক্র্যাপি ইনস্টল করা

স্ক্র্যাপি একটি পাইথন লাইব্রেরি যা ওয়েব স্ক্র্যাপ এবং ওয়েব ক্রলার তৈরির জন্য তৈরি করা হয়েছিল। এটি দ্রুত, সহজ এবং অনেক প্রচেষ্টা ছাড়াই একাধিক ওয়েব পেজের মাধ্যমে নেভিগেট করতে পারে।





পিপ ইনস্টল পাইথন (পিআইপি) লাইব্রেরির মাধ্যমে স্ক্র্যাপি পাওয়া যায়, এখানে একটি রিফ্রেশার রয়েছে উইন্ডোজ, ম্যাক এবং লিনাক্সে কীভাবে পিআইপি ইনস্টল করবেন

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



একটি ডিরেক্টরি তৈরি করুন এবং একটি ভার্চুয়াল পরিবেশ শুরু করুন।

কিভাবে উইন্ডোতে ম্যাক চালানো যায়
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

আপনি এখন PIP কমান্ড ব্যবহার করে সেই ডিরেক্টরিতে স্ক্র্যাপি ইনস্টল করতে পারেন।





pip install scrapy

স্ক্র্যাপি সঠিকভাবে ইনস্টল করা আছে তা নিশ্চিত করার জন্য একটি দ্রুত পরীক্ষা

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

কিভাবে একটি ওয়েব ক্রলার তৈরি করবেন

এখন যেহেতু পরিবেশ প্রস্তুত আপনি ওয়েব ক্রলার তৈরি শুরু করতে পারেন। ব্যাটারিতে উইকিপিডিয়া পৃষ্ঠা থেকে কিছু তথ্য স্ক্র্যাপ করা যাক: https://en.wikipedia.org/wiki/Battery_(electricity)





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

একটি মাকড়সা শ্রেণীর কিছু তথ্য প্রয়োজন:

  • প্রতি নাম মাকড়সা শনাক্ত করার জন্য
  • প্রতি start_urls যেসব ভেরিয়েবল থেকে ইউআরএলগুলির তালিকা ক্রল করা হয় (উইকিপিডিয়া ইউআরএল এই টিউটোরিয়ালের উদাহরণ হবে)
  • প্রতি বিশ্লেষণ () তথ্য বের করার জন্য ওয়েবপেজ প্রক্রিয়া করার জন্য ব্যবহৃত পদ্ধতি
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

সবকিছু সঠিকভাবে চলছে কিনা তা নিশ্চিত করার জন্য একটি দ্রুত পরীক্ষা।

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

লগিং বন্ধ করা হচ্ছে

এই শ্রেণীর সাথে স্ক্রাপি চালানো লগ তথ্য প্রিন্ট করে যা আপনাকে এখনই সাহায্য করবে না। এই অতিরিক্ত লগ তথ্য অপসারণের মাধ্যমে এটি সহজ করা যাক। ব্যবহার করা সতর্কতা ফাইলের শুরুতে কোড যোগ করে বিবৃতি।

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

এখন যখন আপনি আবার স্ক্রিপ্ট চালাবেন, তখন লগের তথ্য প্রিন্ট হবে না।

ক্রোম ইন্সপেক্টর ব্যবহার করে

একটি ওয়েব পেজের সবকিছু HTML উপাদানে সংরক্ষিত থাকে। উপাদানগুলি ডকুমেন্ট অবজেক্ট মডেল (DOM) এ সাজানো হয়েছে। আপনার ওয়েব ক্রলার থেকে সর্বাধিক সুবিধা পেতে DOM বোঝা গুরুত্বপূর্ণ। একটি ওয়েব ক্রলার তথ্য খোঁজার জন্য একটি পৃষ্ঠার সমস্ত HTML উপাদানের মাধ্যমে অনুসন্ধান করে, তাই সেগুলি কীভাবে সাজানো হয়েছে তা জানা গুরুত্বপূর্ণ।

গুগল ক্রোমে এমন সরঞ্জাম রয়েছে যা আপনাকে এইচটিএমএল উপাদানগুলি দ্রুত খুঁজে পেতে সহায়তা করে। আপনি পরিদর্শক ব্যবহার করে ওয়েব পৃষ্ঠায় যে কোনও উপাদান দেখতে পারেন তার জন্য আপনি HTML সনাক্ত করতে পারেন।

  • ক্রোমের একটি পৃষ্ঠায় নেভিগেট করুন
  • আপনি যে উপাদানটি দেখতে চান তার উপর মাউস রাখুন
  • ডান ক্লিক করুন এবং নির্বাচন করুন পরিদর্শন মেনু থেকে

এই পদক্ষেপগুলি দিয়ে ডেভেলপার কনসোল খুলবে উপাদান ট্যাব নির্বাচিত। কনসোলের নীচে, আপনি উপাদানগুলির একটি গাছ দেখতে পাবেন। এই গাছটি আপনি কিভাবে আপনার স্ক্রিপ্টের জন্য তথ্য পাবেন।

শিরোনাম বের করা

আসুন আমাদের জন্য কিছু কাজ করার জন্য স্ক্রিপ্ট পাই; ওয়েব পেজের টাইটেল টেক্সট পেতে একটি সহজ ক্রল।

কিছু কোড যোগ করে স্ক্রিপ্ট শুরু করুন বিশ্লেষণ () পদ্ধতি যা শিরোনাম বের করে।

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

দ্য প্রতিক্রিয়া যুক্তি নামক একটি পদ্ধতি সমর্থন করে CSS () যা আপনার দেওয়া অবস্থান ব্যবহার করে পৃষ্ঠা থেকে উপাদান নির্বাচন করে।

এই উদাহরণে, উপাদানটি হল h1. প্রথম শিরোনাম । যোগ করা হচ্ছে

::text

স্ক্রিপ্টে আপনাকে উপাদানটির পাঠ্য সামগ্রী দেয়। অবশেষে, নির্যাস() পদ্ধতি নির্বাচিত উপাদান প্রদান করে।

স্ক্র্যাপিতে এই স্ক্রিপ্টটি চালানো শিরোনামটি পাঠ্য আকারে মুদ্রণ করে।

[u'Battery (electricity)']

বর্ণনা খোঁজা হচ্ছে

এখন যেহেতু আমরা শিরোনাম পাঠ্যটি স্ক্র্যাপ করেছি স্ক্রিপ্টের সাথে আরও কিছু করি। ক্রলারটি শিরোনামের পরে প্রথম অনুচ্ছেদ খুঁজে বের করতে যাচ্ছে এবং এই তথ্যটি বের করবে।

ক্রোম ডেভেলপার কনসোলের এলিমেন্ট ট্রি এখানে:

রাস্পবেরি পাই লাল আলো বুট করছে না
div#mw-content-text>div>p

ডান তীর (>) উপাদানগুলির মধ্যে পিতামাতা-সন্তানের সম্পর্ক নির্দেশ করে।

এই অবস্থান সব ফিরে আসবে পৃ উপাদানগুলি মিলেছে, যার মধ্যে সম্পূর্ণ বর্ণনা রয়েছে। প্রথম পাওয়ার জন্য পৃ উপাদান আপনি এই কোড লিখতে পারেন:

response.css('div#mw-content-text>div>p')[0]

ঠিক শিরোনামের মতো, আপনি সিএসএস এক্সট্র্যাক্টর যুক্ত করুন

::text

উপাদানটির পাঠ্য সামগ্রী পেতে।

response.css('div#mw-content-text>div>p')[0].css('::text')

চূড়ান্ত অভিব্যক্তি ব্যবহার করে নির্যাস() তালিকা ফেরত দিতে। আপনি পাইথন ব্যবহার করতে পারেন যোগদান () সমস্ত ক্রলিং সম্পূর্ণ হলে তালিকায় যোগ দেওয়ার জন্য ফাংশন।

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

ফলাফলটি পাঠ্যের প্রথম অনুচ্ছেদ!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

JSON ডেটা সংগ্রহ করা

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

যখন আপনি JSON হিসাবে ডেটা সংগ্রহ করতে চান, আপনি ব্যবহার করতে পারেন ফলন স্ক্র্যাপিতে নির্মিত বিবৃতি।

এখানে একটি ফলন বিবৃতি ব্যবহার করে স্ক্রিপ্টের একটি নতুন সংস্করণ। পাঠ্য বিন্যাসে প্রথম পি উপাদান পাওয়ার পরিবর্তে, এটি সমস্ত পি উপাদানগুলিকে দখল করবে এবং এটি JSON বিন্যাসে সংগঠিত করবে।

আইফোনে মেল ড্রপ কি?
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

আপনি এখন একটি আউটপুট JSON ফাইল নির্দিষ্ট করে মাকড়সা চালাতে পারেন:

scrapy runspider spider3.py -o joe.json

স্ক্রিপ্ট এখন সমস্ত পি উপাদানগুলি মুদ্রণ করবে।

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

একাধিক উপাদান স্ক্র্যাপ করা

এখন পর্যন্ত ওয়েব ক্রলার পৃষ্ঠা থেকে শিরোনাম এবং এক ধরনের উপাদানকে সরিয়ে দিয়েছে। স্ক্র্যাপি একটি স্ক্রিপ্টে বিভিন্ন ধরনের উপাদান থেকে তথ্য বের করতে পারে।

চলুন এক সপ্তাহান্তে শীর্ষ IMDb বক্স অফিস হিটগুলি বের করি। এই তথ্য থেকে টানা http://www.imdb.com/chart/boxoffice , প্রতিটি মেট্রিকের জন্য সারি সহ একটি টেবিলে।

দ্য বিশ্লেষণ () পদ্ধতিটি সারি থেকে একাধিক ক্ষেত্র বের করতে পারে। ক্রোম ডেভেলপার টুল ব্যবহার করে আপনি টেবিলের ভিতরে থাকা উপাদানগুলি খুঁজে পেতে পারেন।

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

দ্য ছবি নির্বাচক এটি নির্দিষ্ট করে img এর বংশধর td.posterColumn । সঠিক বৈশিষ্ট্যটি বের করতে, অভিব্যক্তিটি ব্যবহার করুন | _+_ |।

মাকড়সা চালানোর ফলে JSON ফিরে আসে:

::attr(src)

আরো ওয়েব স্ক্র্যাপার এবং বট

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

আপনি যদি ক্রলার বা বট তৈরির আরও উপায় খুঁজছেন তবে আপনি চেষ্টা করতে পারেন পাইথন ব্যবহার করে টুইটার এবং ইনস্টাগ্রাম বট তৈরি করুন । পাইথন ওয়েব ডেভেলপমেন্টে কিছু আশ্চর্যজনক জিনিস তৈরি করতে পারে, তাই এই ভাষা অন্বেষণ করার সময় ওয়েব ক্রলারদের অতিক্রম করা মূল্যবান।

শেয়ার করুন শেয়ার করুন টুইট ইমেইল 15 উইন্ডোজ কমান্ড প্রম্পট (CMD) কমান্ড যা আপনাকে অবশ্যই জানতে হবে

কমান্ড প্রম্পট এখনও একটি শক্তিশালী উইন্ডোজ টুল। এখানে সবচেয়ে দরকারী সিএমডি কমান্ডগুলি প্রতিটি উইন্ডোজ ব্যবহারকারীর জানা দরকার।

পরবর্তী পড়ুন
সম্পর্কিত বিষয়
  • প্রোগ্রামিং
  • ওয়েবমাস্টার টুলস
  • প্রোগ্রামিং
  • পাইথন
  • কোডিং টিউটোরিয়াল
  • ওয়েব ক্রলার
লেখক সম্পর্কে অ্যান্থনি গ্রান্ট(40 নিবন্ধ প্রকাশিত)

অ্যান্থনি গ্রান্ট একজন ফ্রিল্যান্স লেখক যা প্রোগ্রামিং এবং সফটওয়্যারকে কভার করে। প্রোগ্রামিং, এক্সেল, সফটওয়্যার এবং টেকনোলজিতে তিনি একজন কম্পিউটার সায়েন্স প্রধান।

অ্যান্থনি গ্রান্ট থেকে আরো

আমাদের নিউজলেটার সদস্যতা

প্রযুক্তি টিপস, রিভিউ, ফ্রি ইবুক এবং এক্সক্লুসিভ ডিলের জন্য আমাদের নিউজলেটারে যোগ দিন!

সাবস্ক্রাইব করতে এখানে ক্লিক করুন