আপনি কি রুবির সাথে HTML পার্স করার চেষ্টা করছেন?
এই কাজটি একটু কঠিন হতে পারে যদি আপনার কাছে সঠিক টুল না থাকে .
কিন্তু আজ আপনি ভাগ্যবান!
কারণ রুবির নোকোগিরি নামে এই চমৎকার লাইব্রেরি আছে , যা HTML পার্সিংকে পার্কে হাঁটার সুযোগ করে দেয়।
আসুন কিছু উদাহরণ দেখি।
প্রথমে, নোকোগিরি রত্নটি ইনস্টল করুন৷ সাথে:
gem install nokogiri
আপনার যদি মণি ইনস্টল করতে সমস্যা হয় তবে এটি চেষ্টা করুন:
gem install nokogiri -- --use-system-libraries
কিভাবে শিরোনাম বের করবেন
তারপর নিম্নলিখিত স্ক্রিপ্টটি তৈরি করুন, যাতে একটি মৌলিক HTML স্নিপেট রয়েছে যা nokogiri দ্বারা পার্স করা হবে .
পৃষ্ঠার শিরোনাম পেতে এই কোডটি চালান :
require 'nokogiri' html = "রাখেtest actual content here..." parsed_data = Nokogiri::HTML.parse(html) puts parsed_data.title => "test"
আপনি যদি HTML স্ট্রিং এর পরিবর্তে সরাসরি একটি URL থেকে ডেটা পার্স করতে চান…
আপনি এটি করতে পারেন৷ :
require 'open-uri'
Nokogiri::HTML.parse(open('http://example.com')).title
এটি HTML ডাউনলোড করবে এবং আপনাকে শিরোনাম পাবে৷
৷এখন :
শিরোনাম পাওয়া চমৎকার, কিন্তু আপনি সম্ভবত আরও উন্নত উদাহরণ দেখতে চান।
ঠিক?
চলুন দেখে নেওয়া যাক কিভাবে একটি ওয়েবসাইট থেকে লিঙ্ক বের করা যায়।
অ্যাঙ্কর লিঙ্কগুলি বের করা হচ্ছে
আপনি যদি একটি পৃষ্ঠা থেকে সমস্ত লিঙ্ক চান তবে প্রথমে আপনার HTML প্রয়োজন হবে৷
৷
আপনি একই open-uri ব্যবহার করতে পারেন যেকোনো পাবলিক ওয়েবসাইটের জন্য HTML ডাউনলোড করার কৌশল।
তারপর একটি নথি বস্তু পেতে Nokogiri এর সাথে পার্স করুন৷
৷এরকম :
document = Nokogiri::HTML.parse(open('http://example.com'))
document.class
# Nokogiri::HTML::Document
আপনি দুটি উপায়ে তথ্যের জন্য এই বস্তুটি জিজ্ঞাসা করতে পারেন:
- XPath কোয়েরি ব্যবহার করে
- সিএসএস নির্বাচক ব্যবহার করে
আসুন প্রথমে XPath ব্যবহার করে এটি কিভাবে করতে হয় তা দেখি।
এখানে কোডটি আছে :
tags = document.xpath("//a")
এটা কি করে?
এটি পৃষ্ঠার সমস্ত HTML ট্যাগের মাধ্যমে ফিল্টার করে , এবং আপনি যা অনুরোধ করছেন তা দেয়৷
এই ক্ষেত্রে "a" ট্যাগ।
কোনটি ট্যাগ যা HTML এ লিঙ্ক ধারণ করে।
এখন :
আপনার কাছে Nokogiri::XML::Element এর একটি অ্যারে আছে এই ট্যাগগুলিকে প্রতিনিধিত্ব করে৷
আপনি যদি লিঙ্ক URL এবং পাঠ্য পেতে চান তাহলে আপনি এটি করতে পারেন:
tags.each do |tag|
puts "#{tag[:href]}\t#{tag.text}"
end
রাখে এটি আপনার স্ক্রিনে প্রতি লাইনে একটি করে সমস্ত লিঙ্ক প্রিন্ট করবে।
যদি লিঙ্কের পরিবর্তে আপনি অন্য কিছু তথ্য স্ক্র্যাপ করতে চান, যেমন পৃষ্ঠায় উপলব্ধ ছবির তালিকা, আপনি একই প্রক্রিয়া অনুসরণ করতে পারেন।
আপনি যে ধরনের ট্যাগ চান তা পরিবর্তন করতে হবে।
উদাহরণস্বরূপ :
tags = document.xpath("//img")
images_urls = tags.map { |t| t[:src] }
যেখানে img হল ইমেজের জন্য HTML ট্যাগ, এবং src একটি বৈশিষ্ট্য যেখানে ছবির URL সংরক্ষণ করা হয়৷
সঠিক CSS নির্বাচক এবং বৈশিষ্ট্যগুলি খুঁজে পেতে আপনার ব্রাউজারের বিকাশকারী সরঞ্জামগুলি ব্যবহার করুন।
নোকোগিরির সাথে CSS সিলেক্টর ব্যবহার করা
আপনি xpath প্রতিস্থাপন করে CSS নির্বাচক ব্যবহার করতে পারেন css সহ পদ্ধতি পদ্ধতি।
এখানে একটি উদাহরণ আছে :
headers = document.css("h1")
paragraphs = document.css("p")
দ্রষ্টব্য :
at_cssএর মধ্যে পার্থক্য &cssপ্রথমটি শুধুমাত্র প্রথম মিলে যাওয়া উপাদানগুলিকে ফেরত দেয়, কিন্তু পরবর্তীটি সমস্ত মিলে যাওয়া উপাদানগুলিকে ফেরত দেয়৷
CSS ব্যবহার করে আপনি একই ফলাফল পান, পুরো পয়েন্টটি নোকোগিরিকে বলছে আপনি কোন HTML উপাদানগুলির সাথে কাজ করতে চান৷
বেশিরভাগ বিকাশকারীরা XPath এর চেয়ে CSS এর সাথে বেশি পরিচিত, তাই আপনি CSS ব্যবহার করতে চান।
সারাংশ
আপনি এখানে Nokogiri ডকুমেন্টেশন খুঁজে পেতে পারেন:
http://www.rubydoc.info/github/sparklemotion/nokogiri
আপনি পছন্দ করতে পারেন:
রুবি স্ট্রিং বিন্যাস