উত্তর:
আমি পিএইচপি দিয়ে বান্ডিল হয়ে আসার পরে আমি স্থানীয় নেটিভ এক্সএমএল এক্সটেনশনগুলির একটি ব্যবহার করতে পছন্দ করি , সাধারণত সমস্ত তৃতীয় পক্ষের লিবসের চেয়ে দ্রুত হয় এবং মার্কআপের উপরে আমার প্রয়োজনীয় সমস্ত নিয়ন্ত্রণ আমাকে দেয়।
ডিওএম এক্সটেনশন আপনাকে পিএইচপি 5 দিয়ে ডোম এপিআইয়ের মাধ্যমে এক্সএমএল ডকুমেন্টগুলিতে পরিচালনা করার অনুমতি দেয় এটি ডাব্লু 3 সি এর ডকুমেন্ট অবজেক্ট মডেল কোর লেভেল 3 এর একটি বাস্তবায়ন, একটি প্ল্যাটফর্ম- এবং ভাষা-নিরপেক্ষ ইন্টারফেস যা প্রোগ্রাম এবং স্ক্রিপ্টগুলিকে গতিময় অ্যাক্সেস এবং আপডেট করতে দেয় নথিগুলির বিষয়বস্তু, কাঠামো এবং স্টাইল।
ডিওএম রিয়েল ওয়ার্ল্ড (ভাঙা) এইচটিএমএল বিশ্লেষণ ও সংশোধন করতে সক্ষম এবং এটি এক্সপথ অনুসন্ধান করতে পারে । এটি libxML এর উপর ভিত্তি করে ।
ডিওএমের সাথে উত্পাদনশীল হতে কিছুটা সময় লাগে তবে আইএমওর জন্য এটি সময় ভাল। যেহেতু ডিওএম একটি ভাষা-অজ্ঞাত ইন্টারফেস, আপনি অনেকগুলি ভাষায় বাস্তবায়ন পাবেন, সুতরাং আপনার যদি আপনার প্রোগ্রামিংয়ের ভাষা পরিবর্তন করার দরকার হয়, তবে সেই ভাষার DOM এপিআই কীভাবে ব্যবহার করবেন তা আপনি ইতিমধ্যে জানতে পারবেন know
একটি মৌলিক ব্যবহারের উদাহরণ একটি উপাদানটির href বৈশিষ্ট্য আঁকড়ে পাওয়া যায় এবং পিএইচপি-র ডোমডোকামেন্টে একটি সাধারণ ধারণাগত ওভারভিউ পাওয়া যায়
কীভাবে ডিওএম এক্সটেনশানটি ব্যবহার করবেন স্ট্যাকওভারফ্লোতে বিস্তৃতভাবে আচ্ছাদিত করা হয়েছে , সুতরাং আপনি যদি এটি ব্যবহার করা বেছে নেন তবে আপনি নিশ্চিত হয়ে উঠতে পারেন যে আপনি চালিত বেশিরভাগ সমস্যাগুলি স্ট্যাক ওভারফ্লো অনুসন্ধান করে / ব্রাউজ করার মাধ্যমে সমাধান করা যেতে পারে।
এক্সএমএলরেডার এক্সটেনশানটি একটি এক্সএমএল টান পার্সার। পাঠক দস্তাবেজের স্ট্রিমে এগিয়ে যাওয়া এবং পথে প্রতিটি নোডে থামার কার্সর হিসাবে কাজ করে।
XMLReader, DOM এর মতো, libxML ভিত্তিক। এইচটিএমএল পার্সার মডিউলটি কীভাবে ট্রিগার করবেন আমি সে সম্পর্কে অবগত নই, সুতরাং ভাঙা এইচটিএমএল পার্স করার জন্য এক্সএমএলআরডার ব্যবহার করা সম্ভব হয় যেখানে ডওম ব্যবহারের চেয়ে কম শক্ত হতে পারে যেখানে আপনি স্পষ্টভাবে এটি লিবিএক্সএমএল এর এইচটিএমএল পার্সার মডিউলটি ব্যবহার করতে বলতে পারেন।
পিএইচপি ব্যবহার করে এইচ 1 ট্যাগ থেকে সমস্ত মান পাওয়ার ক্ষেত্রে একটি প্রাথমিক ব্যবহারের উদাহরণ পাওয়া যায়
এই এক্সটেনশনটি আপনাকে এক্সএমএল পার্সার তৈরি করতে দেয় এবং তারপরে বিভিন্ন এক্সএমএল ইভেন্টের জন্য হ্যান্ডলারগুলি সংজ্ঞায়িত করতে দেয়। প্রতিটি এক্সএমএল পার্সারেও সামঞ্জস্য করতে পারেন এমন কয়েকটি প্যারামিটার রয়েছে।
এক্সএমএল পার্সার গ্রন্থাগারটিও লিবক্সএমএমএল ভিত্তিক এবং একটি SAX শৈলীর এক্সএমএল পুশ পার্সার প্রয়োগ করে । এটি ডিওএম বা সিম্পলএক্সএমএল এর চেয়ে মেমরি পরিচালনার জন্য আরও ভাল পছন্দ হতে পারে তবে এক্সএমএলরেডার দ্বারা প্রয়োগ করা পুল পার্সারের তুলনায় এটি কাজ করা আরও কঠিন হবে।
সিম্পল এক্সএমএল এক্সটেনশানটি এক্সএমএলকে এমন কোনও বস্তুতে রূপান্তর করতে খুব সাধারণ এবং সহজেই ব্যবহারযোগ্য টুলসেট সরবরাহ করে যা সাধারণ সম্পত্তি নির্বাচনকারী এবং অ্যারে পুনরুক্তি দিয়ে প্রক্রিয়া করা যায়।
আপনি যখন এইচটিএমএলটি বৈধ এক্সএইচটিএমএল জানেন তখন সিম্পলএক্সএমএল একটি বিকল্প। আপনার যদি ভাঙা এইচটিএমএল পার্স করতে হয় তবে সিম্পল এক্সএমএলও বিবেচনা করবেন না কারণ এটি শ্বাসরোধ করবে।
একটি মৌলিক ব্যবহারের উদাহরণ খুঁজে পাওয়া যেতে পারে XML ফাইলের টি ককটেলের নোড এবং নোড মান একটি সহজ প্রোগ্রাম আরো একীন করে নাও পিএইচপি ম্যানুয়াল অতিরিক্ত উদাহরণ প্রচুর ।
আপনি যদি কোনও তৃতীয় পক্ষের লাইব ব্যবহার করতে পছন্দ করেন তবে আমি এমন একটি লাইব ব্যবহার করার পরামর্শ দিচ্ছি যা স্ট্রিং পার্সিংয়ের পরিবর্তে নীচে DOM / libxML ব্যবহার করে ।
ফ্লুয়েন্টডোম পিএইচপি-তে ডমডকুমেন্টের জন্য একটি jQuery -র মতো সাবলীল এক্সএমএল ইন্টারফেস সরবরাহ করে। নির্বাচকগুলি এক্সপথ বা সিএসএসে লিখিত হয় (এক্সপ্যাথ কনভার্টারে একটি সিএসএস ব্যবহার করে)। বর্তমান সংস্করণগুলি ডিওএম প্রয়োগকারী স্ট্যান্ডার্ড ইন্টারফেসগুলি বাড়ায় এবং ডিওএম লিভিং স্ট্যান্ডার্ড থেকে বৈশিষ্ট্য যুক্ত করে add ফ্লুয়েন্টডোম জেএসএন, সিএসভি, জসনএমএল, র্যাবিট ফিশ এবং অন্যদের মতো ফর্ম্যাটগুলি লোড করতে পারে। সুরকারের মাধ্যমে ইনস্টল করা যায়।
ওয়া 72 72 এইচটিএমএলপেজডোম হ'ল এইচটিএমএল ডকুমেন্টগুলি সহজেই ব্যবহারের জন্য পিএইচপি গ্রন্থাগার, এটি ডম গাছের সন্ধানের জন্য সিমফনি 2 উপাদান থেকে ডমক্রোলার প্রয়োজন এবং এটি এইচটিএমএল নথিগুলির ডিওএম গাছের কৌশলগুলি যুক্ত করে এটি প্রসারিত করে।
পিএইচপিকিউয়ারি হ'ল সার্ভার-সাইড, চেইনেবল, সিএসএস 3 নির্বাচনকারী চালিত ডকুমেন্ট অবজেক্ট মডেল (ডিওএম) এপিআই পিএইচপি 5 তে লিখিত jQuery জাভাস্ক্রিপ্ট লাইব্রেরির উপর ভিত্তি করে অতিরিক্ত কমান্ড লাইন ইন্টারফেস (সিএলআই) সরবরাহ করে।
আরও দেখুন: https://github.com/electrolinux/phpquery
জেন্ড_ডম ডিওএম ডকুমেন্টস এবং কাঠামোর সাথে কাজ করার জন্য সরঞ্জাম সরবরাহ করে। বর্তমানে, আমরা জেন্ড_ডম_কিউরি অফার করি যা এক্সপথ এবং সিএসএস নির্বাচক উভয়কেই ডিওএম নথি অনুসন্ধানের জন্য একীভূত ইন্টারফেস সরবরাহ করে।
কোয়েরিপথ হ'ল এক্সএমএল এবং এইচটিএমএল পরিচালনার জন্য একটি পিএইচপি গ্রন্থাগার। এটি কেবল স্থানীয় ফাইলগুলির সাথেই নয়, ওয়েব পরিষেবা এবং ডাটাবেস সংস্থানগুলির সাথেও কাজ করার জন্য ডিজাইন করা হয়েছে। এটি jQuery ইন্টারফেসের অনেকগুলি প্রয়োগ করে (সিএসএস-শৈল নির্বাচনকারী সহ), তবে সার্ভার-সাইড ব্যবহারের জন্য এটি ভারীভাবে সুর করা হয়। সুরকারের মাধ্যমে ইনস্টল করা যায়।
fDOMDocament পিএইচপি সতর্কতা বা বিজ্ঞপ্তিগুলির পরিবর্তে ত্রুটিগুলির সকল ক্ষেত্রে ব্যতিক্রমগুলি ব্যবহার করতে স্ট্যান্ডার্ড ডিওএম প্রসারিত করে। তারা সুবিধার জন্য এবং ডিওএমের ব্যবহার সহজ করার জন্য বিভিন্ন কাস্টম পদ্ধতি এবং শর্টকাট যুক্ত করে।
সাবার / এক্সএমএল একটি লাইব্রেরি যা XMLReader এবং XMLWriter ক্লাসগুলি মোড়ক এবং প্রসারিত করে একটি সাধারণ "এক্সএমএল টু অবজেক্ট / অ্যারে" ম্যাপিং সিস্টেম এবং ডিজাইনের প্যাটার্ন তৈরি করতে। এক্সএমএল লেখা এবং পড়া একক পাস এবং অতএব দ্রুত হতে পারে এবং বড় এক্সএমএল ফাইলগুলিতে কম মেমরির প্রয়োজন হতে পারে।
সংক্ষিপ্ত এবং সাবলীল এপিআই সহ এক্সএমএলকে ম্যানিপুলেট করার জন্য ফ্লুইডএক্সএমএল একটি পিএইচপি গ্রন্থাগার। এটি মজাদার এবং কার্যকর হওয়ার জন্য এক্সপথ এবং সাবলীল প্রোগ্রামিং প্যাটার্নকে উপকৃত করে।
DOM / libxML তৈরির সুবিধাটি হ'ল আপনি বাক্সের বাইরে ভাল পারফরম্যান্স পান কারণ আপনি নেটিভ এক্সটেনশনের উপর ভিত্তি করে। তবে, সমস্ত তৃতীয় পক্ষের লিবস এই পথে নেমে যায় না। তাদের কিছু নীচে তালিকাভুক্ত
- পিএইচপি 5 + তে লেখা একটি এইচটিএমএল ডিওএম পার্সার আপনাকে খুব সহজেই এইচটিএমএলকে ম্যানিপুলেট করতে দেয়!
- পিএইচপি 5+ প্রয়োজন।
- অবৈধ এইচটিএমএল সমর্থন করে।
- এইচটিএমএল পৃষ্ঠায় jQuery এর মতো নির্বাচকদের সাথে ট্যাগগুলি সন্ধান করুন।
- একক লাইনে এইচটিএমএল থেকে সামগ্রীগুলি বের করুন।
আমি সাধারণত এই পার্সারটি সুপারিশ করি না। কোডবেস ভয়ঙ্কর এবং পার্সারটি নিজেই বরং ধীর এবং স্মৃতির ক্ষুধার্ত। সমস্ত jQuery নির্বাচনকারী (যেমন শিশু বাছাইকারী ) সম্ভব নয়) LibxML ভিত্তিক লাইব্রেরির যে কোনও একটি এটিকে সহজেই ছাপিয়ে যায়।
পিএইচপিএইচটিএমএল পার্সার হ'ল একটি সহজ, নমনীয়, এইচটিএমএল পার্সার যা আপনাকে যে কোনও সিএসএস সিলেক্টর, যেমন jQuery ব্যবহার করে ট্যাগ নির্বাচন করতে দেয়। লক্ষ্যটি হ'ল সরঞ্জামগুলির বিকাশে সহায়তা করা যার জন্য এইচটিএমএল স্ক্র্যাপ করার জন্য দ্রুত, সহজ উপায় প্রয়োজন, তা বৈধ হোক বা না হোক! এই প্রকল্পটি সুনরা / পিএইচপি-সিম্পল-এইচটিএমএল-ডোম-পার্সার দ্বারা সমর্থিত তবে সমর্থনটি বন্ধ হয়ে গেছে বলে মনে হচ্ছে তাই এই প্রকল্পটি আমার পূর্ববর্তী কাজের সাথে অভিযোজিত।
আবার, আমি এই পার্সারটি সুপারিশ করব না। এটি উচ্চ সিপিইউ ব্যবহারের চেয়ে ধীর। তৈরি করা DOM অবজেক্টের মেমরি সাফ করার জন্য কোনও কার্যকারিতা নেই। এই সমস্যাগুলি বিশেষত নেস্টেড লুপগুলি দিয়ে স্কেল করে। ডকুমেন্টেশন নিজেই সঠিক এবং ভুল বানানযুক্ত, 14 এপ্রিল 16 থেকে কোনও সমাধানের প্রতিক্রিয়া নেই।
- একটি সর্বজনীন টোকেনাইজার এবং এইচটিএমএল / এক্সএমএল / আরএসএস ডম পার্সার
- উপাদান এবং তাদের গুণাবলী হেরফের করার ক্ষমতা
- অবৈধ এইচটিএমএল এবং ইউটিএফ 8 সমর্থন করে
- উপাদানগুলিতে উন্নত CSS3- জাতীয় কোয়েরি করতে পারে (যেমন jQuery - নেমস্পেসগুলি সমর্থিত)
- একটি এইচটিএমএল বিউটিফায়ার (যেমন এইচটিএমএল পরিপাটি)
- সিএসএস এবং জাভাস্ক্রিপ্ট Minify করুন
- বৈশিষ্ট্য বাছাই করুন, চরিত্রের কেস পরিবর্তন করুন, সঠিক ইনডেন্টেশন ইত্যাদি,
- প্রসার্য
- বর্তমান অক্ষর / টোকেনের উপর ভিত্তি করে কলব্যাকগুলি ব্যবহার করে দস্তাবেজগুলি পার্সিং
- অপারেশনগুলি ওভাররাইডিংয়ের জন্য ছোট ফাংশনে পৃথক করা হয়
- দ্রুত এবং সহজ
এটি কখনও ব্যবহার করা হয়নি। এটি কোনও ভাল কিনা তা বলতে পারব না।
আপনি উপরেরটি এইচটিএমএল 5 পার্স করার জন্য ব্যবহার করতে পারেন, তবে মার্কআপের এইচটিএমএল 5 মঞ্জুরি দেওয়ার কারণে প্রশ্নগুলি হতে পারে। HTML5 এর জন্য আপনি যেমন একটি ডেডিকেটেড পার্সার ব্যবহার করে বিবেচনা করতে চান consider
বড় ডেস্কটপ ওয়েব ব্রাউজারগুলির সাথে সর্বাধিক সামঞ্জস্যের জন্য WHATWG এইচটিএমএল 5 নির্দিষ্টকরণের উপর ভিত্তি করে এইচটিএমএল পার্সারের একটি পাইথন এবং পিএইচপি বাস্তবায়ন।
এইচটিএমএল 5 চূড়ান্ত হওয়ার পরে আমরা আরও উত্সর্গীকৃত পার্সার দেখতে পাব। এইচটিএমএল 5 পার্সিংয়ের জন্য ডাব্লু 3 এর হাও-টু শিরোনামের একটি ব্লগপোস্টও রয়েছে যা পরীক্ষা করে দেখার মতো।
আপনি যদি পিএইচপি প্রোগ্রামিংয়ের মতো মনে করেন না, আপনি ওয়েব পরিষেবাও ব্যবহার করতে পারেন। সাধারণভাবে, আমি এগুলির জন্য খুব সামান্য উপযোগিতা পেয়েছি, তবে এটি কেবল আমার এবং আমার ব্যবহারের ক্ষেত্রে।
স্ক্র্যাপারউইকের বাহ্যিক ইন্টারফেস আপনাকে ওয়েবে বা আপনার নিজের অ্যাপ্লিকেশনগুলিতে ব্যবহারের জন্য যে ফর্মটি ব্যবহার করতে চান সেভাবে ডেটা উত্তোলনের অনুমতি দেয়। আপনি যে কোনও স্ক্র্যাপারের অবস্থা সম্পর্কে তথ্যও বের করতে পারেন।
সর্বশেষ এবং সর্বনিম্ন প্রস্তাবিত , আপনি নিয়মিত অভিব্যক্তি সহ এইচটিএমএল থেকে ডেটা আহরণ করতে পারেন । সাধারণভাবে এইচটিএমএলে নিয়মিত এক্সপ্রেশন ব্যবহার করা নিরুৎসাহিত করা হয়।
মার্কআপের সাথে মেলে যাবার জন্য স্নিপেটগুলি ওয়েবে আপনি পাবেন of বেশিরভাগ ক্ষেত্রে তারা কেবলমাত্র HTML এর একটি বিশেষ অংশের জন্য কাজ করে। ছোট্ট মার্কআপ পরিবর্তনগুলি, যেমন কোথাও সাদা জায়গা যুক্ত করা বা যুক্ত করা বা কোনও ট্যাগগুলিতে বৈশিষ্ট্য পরিবর্তন করা, RegEx ঠিকমতো লেখা না হলে ব্যর্থ হতে পারে। এইচটিএমএলে RegEx ব্যবহার করার আগে আপনি কী করছেন তা আপনার জানা উচিত।
এইচটিএমএল পার্সাররা ইতিমধ্যে এইচটিএমএলের সিন্ট্যাক্টিকাল নিয়মগুলি জানেন। আপনার লেখার প্রতিটি নতুন রেজিএক্সের জন্য নিয়মিত ভাব প্রকাশ করতে হবে। কিছু ক্ষেত্রে RegEx ঠিক আছে তবে এটি আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে।
আপনি আরও নির্ভরযোগ্য পার্সার লিখতে পারেন , তবে নিয়মিত প্রকাশের সাথে একটি সম্পূর্ণ এবং নির্ভরযোগ্য কাস্টম পার্সার লিখলে সময় নষ্ট হয় যখন উল্লিখিত লাইব্রেরিগুলি ইতিমধ্যে উপস্থিত রয়েছে এবং এ সম্পর্কে আরও ভাল কাজ করে।
আরো দেখুন নির্ধারণ html দ্য Cthulhu ওয়ে
আপনি যদি কিছু অর্থ ব্যয় করতে চান তবে একবার দেখুন
আমি পিএইচপি স্থপতি বা লেখকদের সাথে অনুমোদিত নই।
ব্যবহার করে দেখুন সরল এইচটিএমএল করে DOM পার্সার
// Create DOM from URL or file
$html = file_get_html('http://www.example.com/');
// Find all images
foreach($html->find('img') as $element)
echo $element->src . '<br>';
// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';
// Create DOM from string
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');
$html->find('div', 1)->class = 'bar';
$html->find('div[id=hello]', 0)->innertext = 'foo';
echo $html;
// Dump contents (without tags) from HTML
echo file_get_html('http://www.google.com/')->plaintext;
// Create DOM from URL
$html = file_get_html('http://slashdot.org/');
// Find all article blocks
foreach($html->find('div.article') as $article) {
$item['title'] = $article->find('div.title', 0)->plaintext;
$item['intro'] = $article->find('div.intro', 0)->plaintext;
$item['details'] = $article->find('div.details', 0)->plaintext;
$articles[] = $item;
}
print_r($articles);
কেবল ডোমডোকামেন্ট-> লোডএইচটিএমএল () ব্যবহার করুন এবং এটি দিয়ে সম্পন্ন করুন। libxml এর এইচটিএমএল পার্সিং অ্যালগরিদমটি বেশ ভাল এবং দ্রুত এবং জনপ্রিয় বিশ্বাসের বিপরীতে, ত্রুটিযুক্ত এইচটিএমএলকে দমিয়ে রাখে না।
আপনার কেন করা উচিত নয় এবং কখন আপনার নিয়মিত ভাব প্রকাশ করা উচিত ?
প্রথমে, একটি সাধারণ মিসনোমার: রিজেক্সপগুলি " পার্সিং " এইচটিএমএল জন্য নয় । Regexes তথ্যের " নিষ্কাশন " করতে পারেন । এক্সট্র্যাক্টিং তাদের জন্য তৈরি করা হয়। যথাযথ এসজিএমএল টুলকিট বা বেসলাইন এক্সএমএল পার্সারের উপর রেগেক্স এইচটিএমএল এক্সট্রাকশনের প্রধান অপূর্ণতা হ'ল তাদের সিনট্যাক্টিক প্রচেষ্টা এবং বিভিন্ন নির্ভরযোগ্যতা।
বিবেচনা করুন যে কিছুটা নির্ভরযোগ্য এইচটিএমএল এক্সট্রাকশন রিজেক্স তৈরি করুন:
<a\s+class="?playbutton\d?[^>]+id="(\d+)".+? <a\s+class="[\w\s]*title
[\w\s]*"[^>]+href="(http://[^">]+)"[^>]*>([^<>]+)</a>.+?
একটি সহজ phpQuery বা কোয়েরিপাথ সমতুল্য চেয়ে কম পঠনযোগ্য:
$div->find(".stationcool a")->attr("title");
সুনির্দিষ্ট ব্যবহারের কেস রয়েছে যেখানে তারা সহায়তা করতে পারে।
<!--
, যা কখনও কখনও নিষ্কাশনের জন্য আরও দরকারী অ্যাঙ্কর। বিশেষত সিউডো-এইচটিএমএল বিভিন্নতা <$var>
বা এসজিএমএল অবশিষ্টাংশগুলি রেজিজেপসের সাহায্যে নিয়ন্ত্রণে রাখা সহজ।এটি কখনও কখনও নিয়মিত এক্সপ্রেশন ব্যবহার করে এইচটিএমএলের একটি স্নিপেট প্রাক-এক্সট্রাক্ট /<!--CONTENT-->(.+?)<!--END-->/
করার এবং সহজ এইচটিএমএল পার্সার ফ্রন্টএন্ডস ব্যবহার করে অবশিষ্ট প্রক্রিয়াজাতকরণের পরামর্শ দেওয়া হয়।
দ্রষ্টব্য: আমার কাছে আসলে এই অ্যাপ্লিকেশনটি রয়েছে , যেখানে আমি এক্সএমএল পার্সিং এবং বিকল্প হিসাবে নিয়মিত প্রকাশ করি। মাত্র গত সপ্তাহে পাইকোয়্যারি পার্সিং ভেঙেছিল এবং রিজেক্স এখনও কাজ করেছে। হ্যাঁ অদ্ভুত, এবং আমি নিজেই এটি ব্যাখ্যা করতে পারি না। তবে তাই হয়েছে।
সুতরাং দয়া করে রিয়েল-ওয়ার্ল্ড বিবেচনাগুলি নীচে ভোট দেবেন না, কারণ এটি রেজেক্স = অশুভ মেমের সাথে মেলে না। তবে আসুন আমরা এটিকে খুব বেশি ভোট দেই না। এটি এই বিষয়টির জন্য কেবল একটি সিডেনোট।
DOMComment
মন্তব্যগুলি পড়তে পারেন, সুতরাং এজন্য রেগেক্স ব্যবহার করার কোনও কারণ নেই।
DOM
ব্যবহার করে এবং লিবিএক্সএমএল এর একটি পৃথক এইচটিএমএল পার্সার মডিউল রয়েছে যা এইচটিএমএল লোড করার সময় ব্যবহৃত হবে loadHTML()
যাতে এটি "রিয়েল-ওয়ার্ল্ড" (পড়ার ভাঙ্গা) এইচটিএমএলকে অনেক বেশি লোড করতে পারে।
সাবলীল jQuery এপিআই প্রতিলিপি phpQuery এবং কোয়েরিপথ অত্যন্ত অনুরূপ। এই কারণেই পিএইচপি-তে এইচটিএমএলকে সঠিকভাবে পার্স করার জন্য তারা দুটি সহজ পদ্ধতির ।
কোয়েরিপথের উদাহরণ
মূলত আপনি প্রথমে এইচটিএমএল স্ট্রিং থেকে অনুসন্ধানযোগ্য ডিওএম ট্রি তৈরি করেছেন:
$qp = qp("<html><body><h1>title</h1>..."); // or give filename or URL
ফলস্বরূপ অবজেক্টটিতে HTML ডকুমেন্টের একটি সম্পূর্ণ গাছের প্রতিনিধিত্ব রয়েছে। এটি ডিওএম পদ্ধতি ব্যবহার করে ট্র্যাভার করা যেতে পারে। তবে সাধারণ পদ্ধতিটি হল সিএসএস নির্বাচকদের jQuery এর মতো ব্যবহার করা:
$qp->find("div.classname")->children()->...;
foreach ($qp->find("p img") as $img) {
print qp($img)->attr("src");
}
বেশিরভাগ ক্ষেত্রে আপনি এর জন্য সহজ #id
এবং .class
বা DIV
ট্যাগ নির্বাচক ব্যবহার করতে চান ->find()
। তবে আপনি এক্সপথ স্টেটমেন্টগুলিও ব্যবহার করতে পারেন যা কখনও কখনও দ্রুত হয়। এছাড়াও সাধারণ জিকুয়ের পদ্ধতিগুলির মতো ->children()
এবং ->text()
বিশেষত ->attr()
ডান এইচটিএমএল স্নিপেটগুলি উত্তোলন সহজতর করে। (এবং ইতিমধ্যে তাদের এসজিএমএল সত্তাগুলি ডিকোড হয়েছে))
$qp->xpath("//div/p[1]"); // get first paragraph in a div
কোয়েরিপথ স্ট্রিমে নতুন ট্যাগ ইনজেকশন ( ->append
), এবং পরে আউটপুট এবং একটি আপডেট নথি ( ->writeHTML
) প্রিটিটিফাইও করতে দেয় । এটি কেবল ত্রুটিযুক্ত এইচটিএমএল নয়, বিভিন্ন এক্সএমএল উপভাষা (নামস্পেসগুলি সহ), এমনকি এইচটিএমএল মাইক্রোফর্ম্যাটস (এক্সএফএন, ভিকার্ড) থেকে ডেটাও বের করতে পারে।
$qp->find("a[target=_blank]")->toggleClass("usability-blunder");
।
phpQuery বা কোয়েরিপথ?
সাধারণত কোয়েরিপথ নথির হেরফেরের জন্য আরও উপযুক্ত suited পিএইচপিকিউয়ারি jQuery আরও সাদৃশ্যযুক্ত করতে কিছু সিউডো এজ্যাক্স পদ্ধতি (কেবলমাত্র HTTP অনুরোধগুলি) প্রয়োগ করে। বলা হয়ে থাকে যে পিএইচপিকিউয়ারি প্রায়শই ক্যোয়ারিপথের তুলনায় দ্রুত হয় (সামগ্রিক বৈশিষ্ট্যের কম কারণেই)।
পার্থক্য সম্পর্কে আরও তথ্যের জন্য ট্যাগবিটি.অর্গ.ওয়ে থেকে ওয়েবব্যাক মেশিনে এই তুলনাটি দেখুন । (মূল উত্স নিখোঁজ হয়েছে, সুতরাং এখানে একটি ইন্টারনেট সংরক্ষণাগার লিঙ্ক রয়েছে's হ্যাঁ, আপনি এখনও নিখোঁজ পৃষ্ঠা, লোকগুলি সনাক্ত করতে পারেন))
এবং এখানে একটি বিস্তৃত কোয়েরিপথ পরিচিতি ।
সুবিধাদি
->find("a img, a object, div a")
সাধারণ এইচটিএমএল ডিওএম একটি দুর্দান্ত ওপেন সোর্স পার্সার:
এটি ডিওএম উপাদানগুলিকে একটি অবজেক্ট-ভিত্তিক উপায়ে আচরণ করে এবং নতুন পুনরাবৃত্তির সাথে অ-সঙ্গতিপূর্ণ কোডের প্রচুর কভারেজ রয়েছে। এছাড়াও আপনি জাভাস্ক্রিপ্টে দেখতে চাইছেন এমন দুর্দান্ত কিছু ফাংশন রয়েছে, যেমন "ফাইন্ড" ফাংশন, যা এই ট্যাগ নামের উপাদানগুলির সমস্ত দৃষ্টান্ত ফিরিয়ে দেবে।
আমি এটি বেশ কয়েকটি সরঞ্জামে ব্যবহার করেছি, এটি বিভিন্ন ধরণের ওয়েব পৃষ্ঠায় পরীক্ষা করে দেখেছি এবং আমার মনে হয় এটি দুর্দান্ত কাজ করে works
একটি সাধারণ পদ্ধতির যা আমি এখানে উল্লেখ করি নি তা হল পরিশ্রমের মাধ্যমে এইচটিএমএল চালানো , যা গ্যারান্টিযুক্ত-বৈধ এক্সএইচটিএমএলকে ছাড়িয়ে যেতে পারে। তারপরে আপনি এটিতে যে কোনও পুরানো এক্সএমএল লাইব্রেরি ব্যবহার করতে পারেন।
তবে আপনার নির্দিষ্ট সমস্যার জন্য আপনার এই প্রকল্পটি একবার দেখে নেওয়া উচিত: http://fivefilters.org/content-only/ - এটি পঠনযোগ্যতা অ্যালগরিদমের একটি পরিবর্তিত সংস্করণ , যা কেবল পাঠ্য বিষয়বস্তু উত্তোলনের জন্য ডিজাইন করা হয়েছে (শিরোনাম নয়) এবং পাদচরণ) একটি পৃষ্ঠা থেকে।
1a এবং 2 এর জন্য: আমি নতুন সিম্ফনি কমপিউন ক্লাসের ডিওএমক্রোলার ( ডমক্রোলার ) এর পক্ষে ভোট দেব । এই শ্রেণিটি সিএসএস নির্বাচনকারীদের মতো অনুরূপ প্রশ্নের সন্ধান করে। রিয়েল-ওয়ার্ল্ড উদাহরণগুলির জন্য এই উপস্থাপনাটি দেখুন: নিউজ অফ দ্য সিমফনি 2-ওয়ার্ল্ড ।
উপাদানটি একক কাজ করার জন্য ডিজাইন করা হয়েছে এবং সিমফনি ছাড়াই ব্যবহার করা যেতে পারে।
একমাত্র ত্রুটি এটি কেবল পিএইচপি 5.3 বা আরও নতুনর সাথে কাজ করবে।
একে সাধারণত স্ক্রিন স্ক্র্যাপিং হিসাবে উল্লেখ করা হয় । আমি এর জন্য যে লাইব্রেরিটি ব্যবহার করেছি তা হ'ল সিম্পল এইচটিএমএল ডোম পার্সার ।
আমরা আমাদের প্রয়োজনের জন্য আগে বেশ কয়েকটি ক্রলার তৈরি করেছি। দিনের শেষে, এটি সাধারণত সাধারণ নিয়মিত প্রকাশ হয় যা জিনিসটিকে সেরা করে। উপরের তালিকাভুক্ত লাইব্রেরিগুলি তৈরি হওয়ার কারণ হিসাবে ভাল, আপনি কী কী সন্ধান করছেন তা যদি আপনি জানেন তবে নিয়মিত প্রকাশগুলি একটি নিরাপদ উপায়, কারণ আপনি যদি অযোগ্য বৈধ এইচটিএমএল / এক্সএইচটিএমএল কাঠামো পরিচালনা করতে পারেন তবে লোড হলে পার্সার বেশিরভাগ মাধ্যমে।
আমি পিএইচপি সিম্পল এইচটিএমএল ডিওএম পার্সার প্রস্তাব দিই ।
এটিতে দুর্দান্ত বৈশিষ্ট্য রয়েছে যেমন:
foreach($html->find('img') as $element)
echo $element->src . '<br>';
এটি ডাব্লু 3 সি এক্সপথ প্রযুক্তির একটি ভাল টাস্কের বিবরণ বলে মনে হচ্ছে । "নীচে থাকা ট্যাগগুলিতে সমস্ত href
বৈশিষ্ট্য ফিরিয়ে দিন" এর মতো প্রশ্নগুলি প্রকাশ করা সহজ । পিএইচপি বাফ না হয়ে, এক্সপ্যাথ কোন ফর্মের জন্য উপলব্ধ হতে পারে তা আমি আপনাকে বলতে পারি না। যদি আপনি এইচটিএমএল ফাইলটি প্রক্রিয়া করতে কোনও বাহ্যিক প্রোগ্রামকে কল করতে পারেন তবে আপনার এক্সপ্যাথের একটি কমান্ড লাইন সংস্করণ ব্যবহার করতে সক্ষম হওয়া উচিত। দ্রুত পরিচয়ের জন্য http://en.wikedia.org/wiki/XPath দেখুন ।img
<foo><bar><baz> elements
সিম্পলএইচটিএমএলডমের তৃতীয় পক্ষের বিকল্প যা স্ট্রিং পার্সিংয়ের পরিবর্তে ডিওএম ব্যবহার করে: পিএইচপিউকিউয়ারি , জেন্ড_ডম , কোয়েরিপ্যাথ এবং ফ্লুয়েন্টডম ।
হ্যাঁ আপনি এই উদ্দেশ্যে সরল_ html_dom ব্যবহার করতে পারেন। তবে আমি সরল_এইচটিএমএল_ডম নিয়ে বেশ কাজ করেছি, বিশেষত ওয়েব স্ক্র্যাপিংয়ের জন্য এবং এটি খুব দুর্বল বলে মনে করেছি। এটি বেসিক কাজটি করে তবে আমি এটি কোনওভাবেই সুপারিশ করব না।
আমি কখনই উদ্দেশ্যটির জন্য কার্ল ব্যবহার করি নি তবে আমি যা শিখেছি তা হল কার্লটি আরও দক্ষতার সাথে কাজটি করতে পারে এবং আরও শক্ত।
দয়া করে এই লিঙ্কটি দেখুন: কার্লের সাথে স্ক্র্যাপিং-ওয়েবসাইটগুলি
ক্যোরিপথটি ভাল, তবে "ট্র্যাকিং স্টেট" কারণ সম্পর্কে সতর্ক থাকুন যদি আপনি এর অর্থ কী বুঝতে না পেরে থাকেন তবে এর অর্থ হতে পারে আপনি কী ঘটেছে এবং কোডটি কেন কাজ করে না তা অনুসন্ধান করার জন্য প্রচুর ডিবাগিং সময় নষ্ট করে।
এর অর্থ হ'ল রেজাল্ট সেটে প্রতিটি কলই বস্তুটিতে ফলাফল সেটটিকে পরিবর্তন করে, এটি জিকুরির মতো শৃঙ্খলাবদ্ধ নয় যেখানে প্রতিটি লিঙ্ক একটি নতুন সেট, আপনার একক সেট রয়েছে যা আপনার ক্যোয়ারির ফলাফল এবং প্রতিটি ফাংশন কল সংশোধন করে একক সেট।
jquery- মত আচরণ পেতে, আপনি ফিল্টার করতে / অপারেশন মত পরিবর্তন করার আগে আপনাকে শাখা করা দরকার, এর অর্থ এটি jquery এ ঘটে যা অনেক বেশি ঘনিষ্ঠভাবে মিরর করবে।
$results = qp("div p");
$forename = $results->find("input[name='forename']");
$results
এখন input[name='forename']
মূল ক্যোয়ারী নয় এই ফলাফলটি "div p"
আমাকে প্রচুর পরিমাণে ছড়িয়ে দিয়েছে , যা আমি পেয়েছি তা হল কোয়েরিপথগুলি ফিল্টারগুলি এবং সন্ধান করে এবং আপনার ফলাফলগুলিকে পরিবর্তন করে এবং সেটিকে বস্তুতে সংরক্ষণ করে everything পরিবর্তে আপনার এটি করা দরকার
$forename = $results->branch()->find("input[name='forname']")
তারপরে $results
পরিবর্তন করা হবে না এবং আপনি পুনরায় সেট করা ফলাফলটি পুনরায় ব্যবহার করতে পারেন, সম্ভবত আরও অনেক কিছু জ্ঞান সম্পন্ন কেউ এটিকে কিছুটা সাফ করতে পারেন, তবে এটি আমি যা পেয়েছি তার থেকে এটি মূলত এর মতো।
উন্নত এইচটিএমএল ডোম D হ'ল একটি সাধারণ এইচটিএমএল ডিওএম প্রতিস্থাপন যা একই ইন্টারফেসটি সরবরাহ করে, তবে এটি ডোম-ভিত্তিক যার অর্থ সম্পর্কিত মেমরির কোনও সমস্যা ঘটে না।
এতে jQuery এক্সটেনশান সহ পুরো সিএসএস সমর্থন রয়েছে ।
এইচটিএমএল 5 এর জন্য, এইচটিএমএল 5 টি এখন বছরের পর বছর ধরে ছেড়ে দেওয়া হয়েছে। সাম্প্রতিক আপডেট এবং রক্ষণাবেক্ষণের রেকর্ডগুলির সাথে আমি কেবলমাত্র এইচটিএমএল 5 লাইব্রেরিটি খুঁজে পাচ্ছি এটি এইচটিএমএল 5 -পিএইচপি যা এক সপ্তাহ আগে একটু আগেই বিটা 1.0 এ আনা হয়েছিল।
আমি একটি সাধারণ উদ্দেশ্যে এক্সএমএল পার্সার লিখেছি যা সহজেই জিবি ফাইলগুলি পরিচালনা করতে পারে। এটি এক্সএমএলরেডার ভিত্তিক এবং এটি ব্যবহার করা খুব সহজ:
$source = new XmlExtractor("path/to/tag", "/path/to/file.xml");
foreach ($source as $tag) {
echo $tag->field1;
echo $tag->field2->subfield1;
}
এখানে গিথুব রেপো: এক্সএমএল এক্সট্রাক্টর
আমি পিএইচপিপাওয়ারটুলস / ডিওএম-কোয়েরি নামে একটি লাইব্রেরি তৈরি করেছি যা আপনাকে jQuery এর মতো HTML5 এবং এক্সএমএল নথিগুলিকে ক্রল করতে দেয়।
ফণা অধীনে, এটি ব্যবহার করে Symfony / DomCrawler সিএসএস নির্বাচক রূপান্তর জন্য জন্য XPath নির্বাচকরা। এটি সর্বদা একই ডমডোকামেন্ট ব্যবহার করে, এমনকি কোনও বস্তুর অন্যটিতে যাওয়ার সময়ও শালীন কার্যকারিতা নিশ্চিত করে।
namespace PowerTools;
// Get file content
$htmlcode = file_get_contents('https://github.com');
// Define your DOMCrawler based on file string
$H = new DOM_Query($htmlcode);
// Define your DOMCrawler based on an existing DOM_Query instance
$H = new DOM_Query($H->select('body'));
// Passing a string (CSS selector)
$s = $H->select('div.foo');
// Passing an element object (DOM Element)
$s = $H->select($documentBody);
// Passing a DOM Query object
$s = $H->select( $H->select('p + p'));
// Select the body tag
$body = $H->select('body');
// Combine different classes as one selector to get all site blocks
$siteblocks = $body->select('.site-header, .masthead, .site-body, .site-footer');
// Nest your methods just like you would with jQuery
$siteblocks->select('button')->add('span')->addClass('icon icon-printer');
// Use a lambda function to set the text of all site blocks
$siteblocks->text(function( $i, $val) {
return $i . " - " . $val->attr('class');
});
// Append the following HTML to all site blocks
$siteblocks->append('<div class="site-center"></div>');
// Use a descendant selector to select the site's footer
$sitefooter = $body->select('.site-footer > .site-center');
// Set some attributes for the site's footer
$sitefooter->attr(array('id' => 'aweeesome', 'data-val' => 'see'));
// Use a lambda function to set the attributes of all site blocks
$siteblocks->attr('data-val', function( $i, $val) {
return $i . " - " . $val->attr('class') . " - photo by Kelly Clark";
});
// Select the parent of the site's footer
$sitefooterparent = $sitefooter->parent();
// Remove the class of all i-tags within the site's footer's parent
$sitefooterparent->select('i')->removeAttr('class');
// Wrap the site's footer within two nex selectors
$sitefooter->wrap('<section><div class="footer-wrapper"></div></section>');
[...]
লাইব্রেরিতে পিএসআর -0 সামঞ্জস্যপূর্ণ লাইব্রেরির জন্য নিজস্ব শূন্য-কনফিগারেশন অটোলোডার অন্তর্ভুক্ত রয়েছে। অন্তর্ভুক্ত উদাহরণটি কোনও অতিরিক্ত কনফিগারেশন ছাড়াই বাক্সের বাইরে কাজ করা উচিত। বিকল্পভাবে, আপনি এটি সুরকারের সাথে ব্যবহার করতে পারেন।
আপনি কোনও "ভাঙ্গা" এইচটিএমএল ক্লিনআপ করতে এবং এইচটিএমএলকে এক্সএইচটিএমএল রূপান্তর করতে HTML টিডি-র মতো কিছু ব্যবহার করতে চেষ্টা করতে পারেন , যা আপনি এক্সএমএল পার্সার দিয়ে পার্স করতে পারেন।
আরেকটি বিকল্প আপনি চেষ্টা করতে পারেন হ'ল ক্যোয়ারিপথ । এটি jQuery দ্বারা অনুপ্রাণিত হয়েছে, তবে পিএইচপি-র সার্ভারে এবং দ্রুপালে ব্যবহৃত হয়েছে ।
XML_HTMLSax
বরং স্থিতিশীল - এমনকি যদি এটি আর রক্ষণাবেক্ষণ না করা হয়। আর একটি বিকল্প হ'ল এইচটিএমএল পরিপাটি হয়ে আপনাকে এইচটিএমএল পাইপ দেওয়া এবং তারপরে স্ট্যান্ডার্ড এক্সএমএল সরঞ্জামগুলির সাহায্যে পার্স করা।
দ্য Symfony ফ্রেমওয়ার্ক থোকায় থোকায় যা এইচটিএমএল বিশ্লেষণ করতে পারেন, এবং আপনি নির্বাচন করতে CSS স্টাইল ব্যবহার করতে পারেন DOMs পরিবর্তে ব্যবহার করার জন্য XPath ।
এইচটিএমএল / এক্সএমএল ডিওএম প্রক্রিয়া করার বিভিন্ন উপায় রয়েছে যার মধ্যে বেশিরভাগই ইতিমধ্যে উল্লিখিত হয়েছে। অতএব, আমি সেগুলি নিজের তালিকাভুক্ত করার চেষ্টা করব না।
আমি কেবল যুক্ত করতে চাই যে আমি ব্যক্তিগতভাবে ডিওএম এক্সটেনশন ব্যবহার করতে পছন্দ করি এবং কেন:
এবং আমি সিএসএস নির্বাচকদের ব্যবহারের ক্ষমতাটি মিস করার পরে DOMDocument
, এই বৈশিষ্ট্যটি যুক্ত করার জন্য একটি আরও সহজ এবং সুবিধাজনক উপায় রয়েছে: সাবক্ল্যাসিং DOMDocument
এবং জেএস-এর মতো querySelectorAll
এবং যুক্ত করাquerySelector
আপনার সাবক্লাসে পদ্ধতি যুক্ত করা।
নির্বাচকদের বিশ্লেষণের জন্য, আমি সিমফনি ফ্রেমওয়ার্ক থেকে খুব সংক্ষিপ্ত সিএসএসলেক্টর উপাদান ব্যবহার করার পরামর্শ দিচ্ছি । এই উপাদানটি কেবল সিএসএস নির্বাচককে এক্সপথ সিলেক্টরগুলিতে অনুবাদ করে, তারপরে এটিতে খাওয়ানো যেতে পারেDOMXpath
সংশ্লিষ্ট নোডলিস্ট পুনরুদ্ধার করতে একটিতে ।
এরপরে আপনি এটিকে (এখনও খুব নিম্ন স্তরের) সাবক্লাসটি আরও উচ্চ স্তরের শ্রেণির জন্য ভিত্তি হিসাবে ব্যবহার করতে পারেন, উদাহরণস্বরূপ intended খুব নির্দিষ্ট ধরণের এক্সএমএল বিশ্লেষণ করুন বা আরও jQuery- জাতীয় আচরণ যুক্ত করুন।
নীচের কোডটি সরাসরি আমার ডোম-কোয়েরি লাইব্রেরি থেকে বেরিয়ে আসে এবং আমি বর্ণিত কৌশলটি ব্যবহার করি।
এইচটিএমএল বিশ্লেষণের জন্য:
namespace PowerTools;
use \Symfony\Component\CssSelector\CssSelector as CssSelector;
class DOM_Document extends \DOMDocument {
public function __construct($data = false, $doctype = 'html', $encoding = 'UTF-8', $version = '1.0') {
parent::__construct($version, $encoding);
if ($doctype && $doctype === 'html') {
@$this->loadHTML($data);
} else {
@$this->loadXML($data);
}
}
public function querySelectorAll($selector, $contextnode = null) {
if (isset($this->doctype->name) && $this->doctype->name == 'html') {
CssSelector::enableHtmlExtension();
} else {
CssSelector::disableHtmlExtension();
}
$xpath = new \DOMXpath($this);
return $xpath->query(CssSelector::toXPath($selector, 'descendant::'), $contextnode);
}
[...]
public function loadHTMLFile($filename, $options = 0) {
$this->loadHTML(file_get_contents($filename), $options);
}
public function loadHTML($source, $options = 0) {
if ($source && $source != '') {
$data = trim($source);
$html5 = new HTML5(array('targetDocument' => $this, 'disableHtmlNsInDom' => true));
$data_start = mb_substr($data, 0, 10);
if (strpos($data_start, '<!DOCTYPE ') === 0 || strpos($data_start, '<html>') === 0) {
$html5->loadHTML($data);
} else {
@$this->loadHTML('<!DOCTYPE html><html><head><meta charset="' . $encoding . '" /></head><body></body></html>');
$t = $html5->loadHTMLFragment($data);
$docbody = $this->getElementsByTagName('body')->item(0);
while ($t->hasChildNodes()) {
$docbody->appendChild($t->firstChild);
}
}
}
}
[...]
}
আরও দেখুন CSS সিলেক্টর সঙ্গে XML দস্তাবেজগুলিতে পার্সিং Symfony জন্য CssSelector উপাদান তৈরি করতে তার সিদ্ধান্তের এবং কীভাবে ব্যবহার করতে হয় Symfony এর স্রষ্টা Fabien Potencier দ্বারা।
ফ্লুয়ডএক্সএমএল এর সাহায্যে আপনি এক্সপ্যাথ এবং সিএসএস নির্বাচক ব্যবহার করে এক্সএমএলকে ক্যোরি এবং পুনরাবৃত্তি করতে পারেন ।
$doc = fluidxml('<html>...</html>');
$title = $doc->query('//head/title')[0]->nodeValue;
$doc->query('//body/p', 'div.active', '#bgId')
->each(function($i, $node) {
// $node is a DOMNode.
$tag = $node->nodeName;
$text = $node->nodeValue;
$class = $node->getAttribute('class');
});
এক্সএমএল থেকে তিনটি লাইনে জেএসএন এবং অ্যারে:
$xml = simplexml_load_string($xml_string);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
তা দা!
নিয়মিত প্রকাশের মাধ্যমে এইচটিএমএলকে পার্স না করার বিভিন্ন কারণ রয়েছে। তবে, যদি এইচটিএমএল কী উত্পন্ন হবে তার পুরো নিয়ন্ত্রণ যদি আপনার থাকে তবে আপনি সাধারণ নিয়মিত অভিব্যক্তিটি দিয়ে করতে পারেন।
এর উপরে এমন একটি ফাংশন যা নিয়মিত প্রকাশের মাধ্যমে এইচটিএমএলকে পার্স করে। মনে রাখবেন যে এই ফাংশনটি অত্যন্ত সংবেদনশীল এবং দাবি করেছে যে এইচটিএমএল কিছু নির্দিষ্ট নিয়ম মানবে তবে এটি অনেক পরিস্থিতিতে খুব ভালভাবে কাজ করে। আপনি যদি একটি সাধারণ পার্সার চান এবং লাইব্রেরি ইনস্টল করতে না চান তবে এটি শট দিন:
function array_combine_($keys, $values) {
$result = array();
foreach ($keys as $i => $k) {
$result[$k][] = $values[$i];
}
array_walk($result, create_function('&$v', '$v = (count($v) == 1)? array_pop($v): $v;'));
return $result;
}
function extract_data($str) {
return (is_array($str))
? array_map('extract_data', $str)
: ((!preg_match_all('#<([A-Za-z0-9_]*)[^>]*>(.*?)</\1>#s', $str, $matches))
? $str
: array_map(('extract_data'), array_combine_($matches[1], $matches[2])));
}
print_r(extract_data(file_get_contents("http://www.google.com/")));
আমি এইচটিএমএল 5 ডম ডকুমেন্ট নামে একটি গ্রন্থাগার তৈরি করেছি যা https://github.com/ivopetkov/html5-dom-docament-php এ অবাধে উপলব্ধ
এটি কোয়েরি নির্বাচকদেরও সমর্থন করে যে আমি মনে করি আপনার ক্ষেত্রে চূড়ান্ত সহায়ক হবে। এখানে কিছু উদাহরণ কোড দেওয়া হল:
$dom = new IvoPetkov\HTML5DOMDocument();
$dom->loadHTML('<!DOCTYPE html><html><body><h1>Hello</h1><div class="content">This is some text</div></body></html>');
echo $dom->querySelector('h1')->innerHTML;
আপনি যদি jQuery সিলেক্টরের সাথে পরিচিত হন তবে আপনি পিএইচপি-র জন্য স্কারলেটকুইয়ারি ব্যবহার করতে পারেন
<pre><?php
include "ScarletsQuery.php";
// Load the HTML content and parse it
$html = file_get_contents('https://www.lipsum.com');
$dom = Scarlets\Library\MarkupLanguage::parseText($html);
// Select meta tag on the HTML header
$description = $dom->selector('head meta[name="description"]')[0];
// Get 'content' attribute value from meta tag
print_r($description->attr('content'));
$description = $dom->selector('#Content p');
// Get element array
print_r($description->view);
এই লাইব্রেরিটি অফলাইন এইচটিএমএল প্রসেস করতে সাধারণত 1 সেকেন্ডেরও কম সময় নেয়।
এটি ট্যাগ বৈশিষ্ট্যগুলিতে অবৈধ এইচটিএমএল বা অনুপস্থিত উদ্ধৃতি গ্রহণ করে।
পার্স এক্সএমএল জন্য সর্বোত্তম পদ্ধতি:
$xml='http://www.example.com/rss.xml';
$rss = simplexml_load_string($xml);
$i = 0;
foreach ($rss->channel->item as $feedItem) {
$i++;
echo $title=$feedItem->title;
echo '<br>';
echo $link=$feedItem->link;
echo '<br>';
if($feedItem->description !='') {
$des=$feedItem->description;
} else {
$des='';
}
echo $des;
echo '<br>';
if($i>5) break;
}