پی ایچ پی کی مدد سے ویب پیج کے مخصوص حصے حاصل کریں

Parsing کمپیوٹر پروگرامنگ کا ایک اہم موضوع ہے جس کے تحت ڈیٹا پراسیسنگ کے مختلف کام سر انجام دیے جاتے ہیں۔ اس تحریر میں پہلے یہ دیکھا جائے گا کہ پارسنگ دراصل کیا ہوتی ہے۔ پھر اس کا مقصد ذکر کیا جائے گا کہ آخر پارسنگ کیوں کی جاتی ہے۔ اس کے بعد مختصرً ا یہ بتایا جائے گا کہ پروگرامنگ لینگویجز میں پارسنگ کیسے جاتی ہے۔ اور پھر آخر میں PHP کوڈ کی مثالوں کے ذریعے پارسنگ کا عمل واضح کیا جائے گا۔

  1. پارسنگ کیا ہوتی ہے؟
  2. پارسنگ کیوں کی جاتی ہے؟
  3. پارسنگ کیسے کی جاتی ہے؟
  4. اس ٹٹوریل میں ہم پارسنگ کیسے کریں گے؟
  5. PHP استعمال کرتے ہوئے پارسنگ کی مثالیں


صفحہ کے آخر میں پارسنگ کی مثالوں پر مشتمل مکمل کوڈ ZIP فائل کی شکل میں مہیا کیا گیا ہے۔

1- پارسنگ کیا ہوتی ہے؟

آپ جانتے ہوں گے کہ Parsing کامطلب کسی چیز کے حصے بخرے کر کے ان حصوں کا تجزیہ کرنا ہوتا ہے۔ ٹیکسٹ فائلز یا ویب پیجز پارس کرنے کا مطلب بھی یہی ہے کہ پروگرامنگ کے ذریعے ان کے اہم حصے حاصل کر کے انہیں کسی خاص مقصد کے لیے استعمال کیا جائے۔ یہ تحریر خاص طور پر ویب پیجز کی پارسنگ کے متعلق لکھی گئی ہے۔ مختصر طور پر ذکر کیا جائے تو پارسنگ کی مدد سے کسی بھی HTML ٹیگ کے ایٹری بیوٹس کی ویلیوز بھی حاصل کی جا سکتی ہیں، اور اس ٹیگ کی اندرونی عبارت بھی۔

ایچ ٹی ایم ایل ٹیگ کی وضاحت

اگر تفصیلاً دیکھا جائے تو ایک ویب کا کوئی بھی حصہ حاصل کیا جا سکتا ہے، مثلاً:

  1. ٹائٹل۔ جو براؤزر کی ٹیب پر نظر آتا ہے۔
  2. میٹا ٹیگز۔ جن کی مدد سے ویب پیج کے متعلق مختلف معلومات حاصل کی جا سکتی ہیں۔ مثلاً‌ charset ایٹری بیوٹ کی مدد سے یہ معلوم کیا جا سکتا ہے کہ اس ویب پیج کے لیے کونسا کریکٹر سیٹ استعمال کیا گیا ہے، یعنی کونسی زبانوں کے حروف اس ویب پیج میں دکھائے جا سکتے ہیں۔ description ایٹری بیوٹ کی مدد سے سرچ انجنز کے لیے ویب پیج کے متعلق وضاحتی عبارت، جبکہ keywords ایٹربیوٹ کی مدد سے خاص الفاظ حاصل کیے جا سکتے ہیں۔ اگر یہ ویب پیج کسی ایپلی کیشن کا حصہ ہے تو پھر application-name ایٹری بیوٹ کی مدد سے اس کا نام حاصل کیا جا سکتا ہے۔ اور اگر یہ ویب پیج کسی سافٹ ویئر کی مدد سے بنایا گیا ہے تو پھر generator ایٹری بیوٹ کی مدد سے اس سافٹ ویئر کا نام حاصل کیا جا سکتا ہے، وغیرہ۔
  3. اسٹائل شیٹ فائلوں کے نام۔ جو اس ویب پیج میں استعمال کی گئی ہیں، اور یہ کہ کونسی اسٹائل شیٹ اسکرین کے لیے اور کونسی پرنٹ کے لیے استعمال کی گئی ہے۔
  4. جاواسکرپٹ فائلوں کے نام۔
  5. ویب پیج کا مکمل مواد بغیر کوڈ کے حاصل کیا جا سکتا ہے۔
  6. ویب پیج کے کسی بھی ٹیگ کے اندر موجود مواد۔ مثلاً عنوانات (h)، لنکس (a) اور پیرا گراف (p) ٹیگز وغیرہ کی عبارتیں۔
  7. تمام ویب پیجز کے ایڈریسز، یعنی a ٹیگز کے لنکس۔
  8. تمام تصاویر (img ٹیگز) کی فائلوں کے ایڈریسز۔
  9. اگر آپ کو کسی ٹیگ کا id یا اس کی class کا نام معلوم ہے تو اس کی مدد سے اس ٹیگ کے اندر موجود مواد حاصل کیا جا سکتا ہے۔
  10. اندرونی ٹیگز مثلاً tableٹیگ کی سطروں کے اندر موجود خانوں کی ویلیوز۔اسی طرح کسی بھی لیول پر موجود اندرونی ٹیگ کی ویلیو حاصل کی جا سکتی ہے۔
  11. ویب پیج میں سے کوئی خاص لفظ یا عبارت بھی تلاش کی جا سکتی ہے۔
  12. فارم ایلی منٹس یعنی input، checkbox اور select وغیرہ کی معلومات۔ مثلاً ان پٹ فیلڈ کی ویلیو معلوم کی جا سکتی ہے، اور یہ دیکھا جا سکتا ہے کہ کونسا چیک باکس اس وقت منتخب ہے، اور سلیکٹ مینیو کی کونسی ویلیو اس وقت سلیکشن میں ہے وغیرہ۔
  13. اسی طرح نہ صرف ویب پیج میں سے ٹیگز ختم کیے جا سکتے ہیں بلکہ ٹیگز کے اندر موجود عبارتیں بھی تبدیل کی جا سکتی ہیں۔


UP

2- پارسنگ کیوں کی جاتی ہے؟

پارسنگ کا مقصد پروگرامنگ کے ذریعے وہ ڈیٹا حاصل کرنا ہے جو کسی ٹیکسٹ فائل میں موجود ہے اور اسے ہم نئے سرے سے ٹائپ نہیں کرنا چاہتے۔ یہ فائل سادہ ٹیکسٹ، یا پھر Markup کوڈ پر مشتمل ہو سکتی ہے۔ عام طور پر پارسنگ جن مقاصد کے لیے کی جاتی ہے ان میں سے دو نمایاں مقصد یہ ہیں:

(1) پرانے ویب پیجز کا مواد CMS پر منتقل کرنا

90 کی دہائی کے آخر میں جبWeb دنیا میں مقبول ہوا تو بڑی کمپنیوں اور حکومتی اداروں کے ہاتھ ایک ایسا میڈیم آگیا جس کی مدد سے وہ نہ صرف اداروں کے ملازمین بلکہ عام لوگوں تک با آسانی معلومات پہنچا سکتے تھے۔ خاص طور پر ترقی یافتہ ممالک کے حکومتی اداروں نے ویب سائیٹس قائم کر کے دھڑا دھڑ ویب پیجز بنانا شروع کر دیے۔ چند ہی سالوں میں لاکھوں کے حساب سے ویب پیجز انٹرنیٹ پر دستیاب تھے جن میں سے ایک بڑی تعداد حکومتی اداروں کی ویب سائیٹس پر موجود تھی۔ اب ان اداروں کے لیے مسئلہ یہ پیدا ہوگیا کہ ان ویب پیجز کو منظم اور اپ ڈیٹ کیسے رکھا جائے۔ اس لیے کہ یہ ویب پیجز کسی سسٹم کے تحت نہیں بلکہ کمپیوٹر کی انفرادی فائلز کی شکل میں موجود تھے۔ کسی بھی ادارے کے لیے بغیر کسی معیاری سسٹم کے بڑی تعداد میں موجود ویب پیجز کا ریکارڈ اور ٹریک رکھنا دقت طلب کام تھا۔ابتداء میں ویب سائیٹ بنانے کا طریقہ یہ تھا کہ ایک ویب پیج کا ڈیزائن تیار کر لیا جاتا اور پھر اسے بطور ٹیمپلیٹ پوری ویب سائیٹ کے لیے استعمال کیا جاتا۔ یعنی ویب پیج فائل کی نئے نام کے ساتھ نقل بنا کر اس میں نیا مواد شامل کر دیا جاتا، اور اس کے بعد اس ویب پیج فائل کا لنک دوسرے ویب پیجز میں شامل کر دیا جاتا۔ نیز ویب سائیٹ کے سیکشنز بنانے کے لیے مختلف نوعیت کے ویب پیجز کو مختلف فولڈرز میں رکھا جاتا۔ اس لیے کہ اس وقت تک ویب سائیٹ بنانے کے لیے CMS اور ڈیٹابیس کی مدد سے بنائے گئے ویب پیجز کے لیے Clean URLs کے تصور متعارف نہیں ہوئے تھے۔ لیکن جب CMS وغیرہ بننا شروع ہوئے اور ویب سائیٹس کو منظم رکھنے کے لیے ڈیٹابیسز کا استعمال کیا جانے لگا تو اس وقت یہ مسئلہ درپیش ہوا کہ پرانے ویب پیجز جو فائلوں کی شکل میں موجود ہیں، ان کا مواد CMS پر کیسے منتقل کیا جائے۔ چنانچہ یہاں ویب پیجز کو Parse کرنے کی ضرورت پیش آئی۔ اس عمل میں پروگرامرز پہلے مطلوبہ ویب سائیٹ میں استعمال کیے گئے ویب پیجز کا ڈھانچہ سمجھتے ہیں۔ یعنی یہ سمجھتے ہیں کہ کونسے ٹیگز عنوانات کے لیے، کونسے ٹیگز پیراگرافس کے لیے، کونسے ٹیگز مینیوز کے لیے اور کونسے ٹیگز ٹیمپلیٹ وغیرہ کے لیے استعمال کیے گئے ہیں۔ پھر اس کے مطابق ایک چھوٹا سا پروگرام لکھتے ہیں جو ان ویب پیجز کو پارس کر کے ان کا مواد CMS کے لیے استعمال کی گئی ڈیٹابیس کی فیلڈز میں منتقل کر دیتا ہے۔

(2) سرچ انجن ویب پیجز پارس کرتے ہیں

دنیا میں بے شمار چھوٹے بڑے سرچ انجنز موجود ہیں جن میں سے بڑے سرچ انجنز گوگل، یاہو اور بنگ ہیں۔ بڑے سرچ انجنز کا مقصد ہر قسم کی ویب سائیٹس کی معلومات اکٹھی کرنا ہوتا ہے، جبکہ چھوٹے سرچ انجنز کسی خاص علاقے، زبان یا موضوع کے اعتبار سے ویب سائیٹس تلاش کر کے ان کے متعلق معلومات اکٹھی کرتے ہیں۔

سرچ انجنز تین مراحل میں کام کرتے ہیں۔ پہلا مرحلہ Crawling کا ہوتا ہے جس کے تحت سرچ انجن ویب سائیٹس کے ویب پیجز پڑھ کر ان کے متعلق اہم معلومات اکٹھی کرتا ہے۔ دوسرا مرحلہ Indexing کا ہوتا ہے جس کے تحت سرچ انجن یہ اہم معلومات ایک خاص الگورتھم استعمال کرتے ہوئے اپنی ڈیٹابیس میں محفوظ کرتا ہے۔ تیسرا مرحلہ Retrieval کا ہوتا ہے جس کے تحت سرچ انجن لوگوں کے تلاش کرنے پر ان ویب پیجز کے متعلق معلومات مہیا کرتا ہے۔

چنانچہ Crawling کے عمل میں سرچ انجنز ویب پیجز پارس کر کے ان کے متعلق خاص معلومات اکٹھی کرتے ہیں۔ مثلاً ویب پیج کا ایڈریس، ٹائٹل جو براؤزر کی ٹیب پر نظر آتا ہے، عبارت کا ایک مختصر حصہ، عنوانات کی عبارتیں، ویب پیج میں استعمال کیے گئے اہم الفاظ، اندرونی و بیرونی لنکس، اور تصاویر کے ایڈریسز وغیرہ۔ بڑے سرچ انجنز Crawling کا یہ عمل مسلسل جاری رکھتے ہیں، اس لیے کہ نئی ویب سائیٹس ہر وقت بنتی رہتی ہیں، نیز پرانی ویب سائیٹس میں بھی نئے ویب پیجز شامل ہوتے رہتے ہیں، اس کے علاوہ پرانے ویب پیجز میں بھی تبدیلیاں ہوتی رہتی ہیں۔ چنانچہ سرچ انجنز نئی ویب سائیٹس بھی Crawl کرتے ہیں اور ایک مخصوص وقفے کے ساتھ پرانی ویب سائیٹس بھی۔


UP

3- پارسنگ کیسے کی جاتی ہے؟

پارسنگ کے لیے RegEx ٹیکنالوجی استعمال کی جاتی ہے۔ Regular Expressionsکی سہولت کمپیوٹر کی دیگر معروف لینگوئجز کی طرح PHP میں بھی موجود ہے۔ ریگولر ایکسپریشنز ٹیکنالوجی وہ تمام ٹولز اور سہولیات مہیا کرتی ہے جنہیں استعمال کرتے ہوئے ایک پروگرامر پیچیدہ سے پیچیدہ ڈیٹا میں سے اپنی مرضی کی چیزیں حاصل کر سکتا ہے۔ ریگولر ایکسپریشنز بہت کار آمد ٹیکنالوجی ہے اور خاص طور پر ڈیٹا پراسیسنگ کی نوعیت کا کام کرنے والے پروگرامز کے لیے اس کا سیکھنا لازمی ہے۔

ویسے اگر PHP میں فائل ہینڈلنگ اور اسٹرنگ فنکشنز پر مہارت حاصل کر لی جائے تو ان کی مدد سے بھی ایک خاص حد تک پارسنگ کی جا سکتی ہے۔ مثلاً اگر آپ کو ایسی چیزیں درکار ہیں جو فائل کی مختلف لائنوں میں موجود ہیں تو اس کا طریقہ یہ ہے کہ لوپ کی مدد سے فائل کی ہر لائن پڑھتے جائیں اور پھر اس لائن میں سے مطلوبہ چیز تلاش کر کے اررے میں محفوظ کرتے جائیں۔ ہلکی پھلکی پارسنگ کے لیے یہ کار آمد طریقہ ہے۔


UP

4- اس ٹٹوریل میں ہم پارسنگ کیسے کریں گے؟

یہ ٹٹوریل ہر قسم کے پروگرامرز کے لیے ہے، اس میں وہ پروگرامرز بھی شامل ہیں جو پروگرامر تو کہلوانا چاہتے ہیں لیکن مشکل ٹیکنالوجیز استعمال کرنے سے کتراتے ہیں۔ چنانچہ اس ٹٹوریل میں براہ راست RegEx استعمال نہیں کی جائے گی۔ بلکہ ہم درج ذیل دیے گئے لنک سے PHP کا ایک پیکیج ڈاؤن لوڈ کر کے اس کی ایک فائل اپنے پراجیکٹ میں استعمال کریں گے۔ یہ فائل دراصل HTML DOM Parser ہے جس میں ماہر ڈیویلپرز نے ویب پیجز کی پارسنگ کے لیے فنکشنز مہیا کیے ہیں۔ ان فنکشنز کے اندر ریگولر ایکسپریشنز استعمال کیے گئے ہیں،لیکن ہمیں اس تحریر میں ان ریگولر ایکسپریشنز سے کوئی غرض نہیں ہے۔ ہم نے صرف یہ کرنا ہے کہ مطلوبہ فنکشن کو پیرامیٹر مہیا کرنا ہے، یہ فنکشن اس پیرامیٹر کی بنیاد پر پراسیسنگ کر کے نتیجہ ہمارے حوالے کر دے گا۔

درج ذیل لنک سے simplehtmldom کی زپ فائل ڈاؤن لوڈ کریں اورپھر یہ زپ فائل کھول کر اس کا فولڈر اپنے PHP پراجیکٹ میں شامل کریں:

اب اس فولڈر میں سے simple_html_dom.php فائل اپنے PHP اسکرپٹ میں شامل کریں۔ درج ذیل مثال میں آپ دیکھ سکتے ہیں کہ یہ فائل شامل کرنے کے بعد اس فائل میں موجود ()file_get_html فنکشن کال کیا گیا ہے۔ اس فنکشن کو انٹرنیٹ ایڈریس بھی مہیا کیا جا سکتا ہے اور لوکل فائل ایڈریس بھی۔ جبکہ اسٹرنگ کی شکل میں HTML ڈیٹا مہیا کرنا ہو تو اس کے لیے ()str_get_html فنکشن استعمال کیا جاتا ہے۔ یہ دونوں فنکشنز نتیجے کے طور پر مکمل HTML ڈیٹا ایک آبجیکٹ کی صورت میں مہیا کردیتے ہیں۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html_from_url file_get_html('http://www.microsoft.com');
$html_from_file file_get_html('somefolder/webpage.htm');
$html_from_string str_get_html('<html><head><title>page title</title></head><body>some text</body></html>');
?>


UP

5- PHP استعمال کرتے ہوئے پارسنگ کی مثالیں

اس ٹٹوریل کی زیادہ تر مثالوں میں ()file_get_html فنکشن استعمال کیا جائے گا تاکہ انٹرنیٹ پر موجود مطلوبہ ویب پیج سے مواد حاصل کیا جا سکے۔ جبکہ چند ایک مثالوں میں ()str_get_html فنکشن استعمال کیا جائے گا جس کے لیے ہم خود سے نمونے کا HTML ڈیٹا فراہم کریں گے۔ یہ دونوں فنکشنز نتیجے میں جو آبجیکٹ مہیا کرتے ہیں، اس آبجیکٹ کا ()find فنکشن استعمال کرتے ہوئے اس میں سے مطلوبہ ٹیگز تلاش کیے جاتے ہیں۔ ()find فنکشن یہ ٹیگز ایک Array میں آبجیکٹس کی صورت میں مہیا کرتا ہے۔ اس اررے میں موجود آبجیکٹس کی پراپرٹیز میں تلاش شدہ ڈیٹا موجود ہوتا ہے۔ آئیں اس کی مختلف مثالیں دیکھتے ہیں۔

(1) ویب پیج کا ٹائٹل

درج ذیل مثال کی پہلی لائن پر HTML DOM Parser کی فائل شامل کی گئی ہے۔ اس سے اگلی لائن پر ()file_get_html فنکشن کی مدد سے ویب پیج کا مکمل کوڈ html$ ویری ایبل میں ایک آبجیکٹ کی شکل میں رکھا گیا ہے۔ اس آبجیکٹ کا ()find فنکشن استعمال کرتے ہوئے اس سے اگلی لائن پر title ٹیگ حاصل کیا گیا ہے۔

ویب پیج میں ٹائٹل ٹیگ اگرچہ ایک ہی ہوتا ہے جو براؤزر کی ٹیب یا ٹائٹل بار پر دکھایا جاتا ہے، لیکن ()find فنکشن یہ فرض کرتا ہے کہ جو ٹیگ آپ کو چاہیے وہ ویب پیج میں ایک سے زیادہ مرتبہ موجود ہو سکتا ہے۔ اس لیے اگرچہ وہ ٹیگ ایک ہی ہو، پھر بھی ()find فنکشن اسے Array میں شامل کر کے دیتا ہے۔ چنانچہ درج ذیل مثال میں دیکھا جا سکتا ہے کہ []tags$ اررے میں سے foreach لوپ کی مدد سے وہ آبجیکٹ حاصل کیا گیا ہے جس کی innertext پراپرٹی میں ٹائٹل ٹیگ موجود ہے۔

یہ کام لوپ کی بجائے []tags$ اررے کی زیرو انڈیکس پر موجود ویلیو حاصل کر کے بھی کیا جا سکتا ہے۔ foreach لوپ استعمال کرنے کا فائدہ یہ ہے کہ اگر یہ ٹیگ ویب پیج میں موجود نہ ہوا توکوئی Error جنریٹ نہیں ہوگا۔ لیکن اگر آپ اس مقصد کے لیے لوپ استعمال نہ کرنا چاہیں تو پھر ()isset فنکشن کی مدد سے پہلے چیک کر لیں کہ کیا اررے کی زیرو انڈیکس پر کوئی ویلیو موجود ہے یا نہیں۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.microsoft.com');
$tags $html->find('title');
foreach (
$tags as $t) {
    echo 
$t->innertext "<br>";
}
?>

(2) میٹا ٹیگز

درج ذیل مثال میں ویب پیج کے تمام Meta ٹیگز حاصل کیے گئے ہیں۔ foreach لوپ کی مدد سے ان میٹا ٹیگز کے name اور content ایٹری بیوٹس کی ویلیوز کے علاوہ charset کی ویلیو بھی حاصل کی گئی ہے، اس لیے کہ پارس کیے جانے والے ویب پیجز میں سے ایسے بھی ہوں گے جن میں کریکٹرسیٹ کے لیے content کی بجائے charset ایٹری بیوٹ استعمال کیا گیا ہوگا۔

count$ ویری ایبل اس لیے استعمال کیا گیا ہے تاکہ یہ بتایا جا سکے کہ کونسی ویلیوز کس میٹا ٹیگ کی ہیں۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.microsoft.com');
$tags $html->find('meta');
$count 1;
foreach (
$tags as $t) {
    echo 
"<h2>Meta tag " $count++ . "</h2>";
    echo 
"<b>Name:</b> "$t->name "<br>";
    echo 
"<b>Content:</b> "$t->content "<br>";
    echo 
"<b>Charset:</b> "$t->charset "<br>";
}
?>

(3) اسٹائل شیٹ فائلز

درج ذیل مثال میں ویب پیج کے link ٹیگز حاصل کیے گئے ہیں جن کی مدد سے ویب پیج میں اسٹائل شیٹس شامل کی جاتی ہیں۔ لوپ کے اندر link ٹیگز کے ایٹری بیوٹس کی ویلیوز پرنٹ کی گئی ہیں۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.microsoft.com');
$tags $html->find('link');
$count 1;
foreach (
$tags as $t) {
    echo 
"<h1>Stylesheet " $count++ . "</h1>";
    echo 
"<b>Rel:</b> "$t->rel "<br>";
    echo 
"<b>Media:</b> "$t->media "<br>";
    echo 
"<b>Type:</b> "$t->type "<br>";
    echo 
"<b>Href:</b> "$t->href "<br>";
}
?>

(4) جاوا سکرپٹ فائلز

ویب پیج میں استعمال کی گئی جاوا سکرپٹ فائلز حاصل کرنے کا طریقہ بھی وہی ہے۔ درج ذیل مثال میں ()find فنکشن کی مدد سے script ٹیگز تلاش کیے گئے ہیں اور پھر ان کے آبجیکٹس کی src پراپرٹی استعمال کرتے ہوئے جاوا سکرپٹ فائلز کے ایڈریسز پرنٹ کیے گئے ہیں۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.microsoft.com');
$tags $html->find('script');
$count 1;
foreach (
$tags as $t) {
    echo 
"<h1>Javascript " $count++ . "</h1>";
    echo 
"<b>Type:</b> "$t->type "<br>";
    echo 
"<b>Source:</b> "$t->src "<br>";
}
?>

(5) بغیر کوڈ کے مکمل ویب پیج کا ٹیکسٹ

ویب پیج کا مکمل مواد بغیر کوڈ کے حاصل کر کے مختلف طریقوں سے استعمال کیا جا سکتا ہے۔ ایک استعمال یہ ہو سکتا ہے کہ PHP کی مدد سے یہ معلوم کیا جائے کہ ویب پیج میں کونسا لفظ یا کونسا جملہ کتنی مرتبہ استعمال ہوا ہے۔ یوں آپ یہ پتا لگا سکتے ہیں کہ اس پیج کے اہم الفاظ (Keywords) یا اہم جملے (Key phrases) کونسے ہیں۔ ویسے تو الفاظ کی اہمیت جاننے کے لیے یہ بھی دیکھنا ہوتا ہے کہ وہ الفاظ ویب پیج کے کس حصے میں موجود ہیں۔ مثلاً ویب پیج کے ٹائٹل اور عنوانات میں موجود الفاظ کو زیادہ اہمیت حاصل ہوتی ہے۔ اگر آپ ایسا PHP اسکرپٹ لکھنے میں کامیاب ہو جاتے ہیں جس کی مدد سے یہ معلوم کیا جا سکے کہ کونسے الفاظ ویب پیج میں کتنی تعداد میں موجود ہیں اور ان کی اہمیت (Weight) کیا ہے تو سمجھ لیں کہ آپ کو سرچ انجنز کے اہم کاموں میں سے ایک کام کا طریقہ معلوم ہوگیا ہے۔

درج ذیل مثال میں پہلے ریگولر ایکسپریشنز کے ()preg_replace فنکشن کی مدد سے عبارت کے الفاظ کے درمیان موجود غیر ضروری اسپیسز ختم کی گئی ہیں۔ اور پھر ()str_replace فنکشن کی مدد سے ہارڈ اسپیسز ختم کی گئی ہیں۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.microsoft.com');
$plain_text $html->plaintext;
$plain_text preg_replace('/s+/'' '$plain_text);
$plain_text str_replace('&nbsp;'''$plain_text);
echo 
$plain_text;
?>

(6) عنوانات، پیرا گرافس اور دیگر ٹیگز

درج ذیل مثال میں ویب پیج کے تمام h2 ٹیگز کی عبارتیں حاصل کی گئی ہیں۔ اسی طریقے سے آپ دیگر ٹیگز مثلاً p، div، span اور blockquote وغیرہ کی عبارتیں حاصل کر سکتے ہیں۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.microsoft.com');
$tags $html->find('h2');
foreach (
$tags as $t) {
    echo 
$t->innertext "<br>";
}
?>

(7) ہائپر لنکس

درج ذیل مثال میں ویب پیج میں استعمال کیے گئے تمام لنکس (a ٹیگز کے ایڈریسز) بھی حاصل کیے گئے ہیں اور ان کی عبارتیں بھی۔ اگرویب پیج پر کسی تصویر کو بطور لنک استعمال کیا گیا ہے تو innertext پراپرٹی مکمل امیج ٹیگ مہیا کر دے گی، یعنی یہ تصویر ہی پرنٹ ہو جائے گی۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.microsoft.com');
$tags $html->find('a');
foreach (
$tags as $t) {
    echo 
$t->innertext "<br>";
    echo 
$t->href "<br>";
}
?>

(8) تصاویر کے ایڈریسز

درج ذیل مثال میں ویب پیج میں استعمال کی گئی تمام تصاویر کے ایڈریسز، ان کے ٹائٹل اور متبادل ٹیکسٹ حاصل کیے گئے ہیں۔ براؤزر متبادل ٹیکسٹ تب دکھاتا ہے جب وہ تصویر نہیں دکھا سکتا۔ اور ٹائٹل ٹیکسٹ تب نظر آتا ہے جب تصویر کے اوپر ماؤس کا کرسر لایا جاتا ہے۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.microsoft.com');
$tags $html->find('img');
$count 1;
foreach (
$tags as $t) {
    echo 
"<h1>Image " $count++ . "</h1>";
    echo 
"<b>Source:</b> " $t->src "<br>";
    echo 
"<b>Title:</b> " $t->title "<br>";
    echo 
"<b>Alt:</b> " $t->alt "<br>";
}
?>

(9) id اور class کی مدد سے ٹیگ تلاش کرنا

بعض اوقات ویب پیج کے کسی خاص ٹیگ کی ضرورت پیش آتی ہے۔ اگر اس ٹیگ کے لیے id یا class استعمال کی گئی ہے تو اس کی مدد سے یہ ٹیگ تلاش کیا جا سکتا ہے۔ درج ذیل مثال میں پہلے content کی id والا div ٹیگ حاصل کیا گیا ہے۔ پھر highlight کی class والے div ٹیگز حاصل کیے گئے ہیں۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.microsoft.com');
// By id
$tags $html->find('div#content');
foreach (
$tags as $t) {
    echo 
$t->innertext "<br>";
}
// By class
$tags $html->find('div.highlight');
foreach (
$tags as $t) {
    echo 
$t->innertext "<br>";
}
?>

(10) اندرونی ٹیگز

اندرونی ٹیگز حاصل کرنے کے لیے ایک سے زیادہ لوپس استعمال کرنا پڑتے ہیں۔ درج ذیل مثال میں دیکھا جا سکتا ہے کہ HTML ڈیٹا میں دو ٹیبلز موجود ہیں جن کے ہر سیل کی ویلیو پرنٹ کی گئی ہے۔ اس مقصد کے لیے تین foreach استعمال کیے گئے ہیں۔ پہلا table ٹیگ کے لیے، دوسرا اس کے اندر موجود tr ٹیگز کے لیے، اور تیسرا ان کے اندر موجود td ٹیگز کے لیے۔

اسی طریقے سے ul ٹیگز کے اندر موجود li ٹیگز کی ویلیوز حاصل کی جا سکتی ہیں۔ اس مقصد کے لیے آپ کو دو foreach لوپ استعمال کرنا پڑیں گے۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$str '<html>
    <table>
    <tr>
         <td>John Doe</td>
         <td>johndoe@example.com</td>
    </tr>
    <tr>
         <td>Peter Sam</td>
         <td>petersam@example.com</td>
    </tr>
    </table>
    <table>
    <tr>
         <td>Lisa Frank</td>
         <td>lisafrank@example.com</td>
    </tr>
    </table>
</html>'
;
$html str_get_html($str);
$table_count 1;
foreach(
$html->find('table') as $table) {
    echo 
"<h1>Table " $table_count++ . "</h1>";
    
$row_count 1;
    foreach(
$table->find('tr') as $tr) {
        echo 
"<h3>Row " $row_count++ . "</h3>";
        foreach(
$tr->find('td') as $td) {
          echo 
$td->innertext '<br>';
        }
    }
}
?>

اندرونی ٹیگز ایک مختلف طریقے سے بھی حاصل کیے جا سکتے ہیں۔ درج ذیل مثال میں یہ کہا جا رہا ہے کہ ہمیں تیسرے لیول پر موجود دوسرے div ٹیگ کی اسٹائل کلاس اور اس کی عبارت چاہیے۔یعنی صرف وہی div ٹیگ حاصل کیا جا رہا ہے جس کے اوپر div ٹیگ موجود ہے، اور پھر اس کے اوپر بھیdiv ٹیگ موجود ہے۔ مطلب یہ ہے کہ اگر ویب پیج میں بہت سے div ٹیگز ہیں لیکن ان میں سے کوئی بھی تیسرے لیول پر نہیں ہے تو ہمیں کچھ بھی نہیں ملے گا۔ درج ذیل مثال کا نتیجہ jar اور ok ہوگا۔

اس مثال میں آپ دیکھ رہے ہیں کہ foreach لوپ استعمال کرنے کی بجائے آبجیکٹ کی پراپرٹی براہ راست پرنٹ کر لی گئی ہے۔ لیکن اگر ویب پیج میں تیسرے لیول پر کوئی div ٹیگ موجود نہ ہوا تو Error جنریٹ ہوگا، اس لیے کہ اس صورت میں ہم ایسے آبجیکٹ کی پراپرٹی حاصل کرنے کی کوشش کر رہے ہیں جو موجود ہی نہیں ہے۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$str '<html>
    <div>
         <div>
              <div class="foo">not ok</div>
              <div class="jar">ok</div>
              <div class="bar">not ok</div>
         </div>
    </div>
    </html>'
;
$html str_get_html($str);
echo 
$html->find('div div div'1)->class '<br>';
echo 
$html->find('div div div'1)->innertext '<br>';
?>

(11) ویب پیج میں سے کچھ تلاش کریں

درج ذیل مثال میں پہلے ویب پیج کے تمام پیراگرافس حاصل کیے گئے ہیں۔ پھر ()strpos فنکشن کی مدد سے ان میں سے وہ پیراگرافس حاصل کیے گئے ہیں جن میں لفظ news موجود ہے۔ اس لفظ کو نمایاں دکھانے کے لیے ()str_replace فنکشن کی مدد سے اس لفظ کو سرخ رنگ میں بدلا گیا ہے۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.cnn.com');
$tags $html->find('p');
$keyword "Finance";
foreach (
$tags as $t) {
    if (
strpos($t->innertext$keyword) !== false) {
        
$para str_replace($keyword,  
                
"<b style='color:red;'>$keyword</b>"
                
$t->innertext);
        echo 
"<p>" $para "</p>";
    }
}
?>

(12) فارم کے ایلی منٹس

ان پٹ فیلڈز:
درج ذیل مثال میں ویب پیج میں موجود فارم کی Input فیلڈز کی ویلیوز حاصل کی گئی ہیں۔ اگر ویب پیج میں ایک سے زیادہ فارمز موجود ہوں تو ٹیبلز کی طرح ایک سے زیادہ loops استعمال کرتے ہوئے ان سب فارمز کی ویلیوز حاصل کی جا سکتی ہیں۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$str '<html><form>
             <input type="text" name="name" value="John Doe"><br>
             <input type="text" name="email" 
                value="johndoe@example.com"><br>
             <input type="text" name="phone" 
                value="000 00000000"><br>
        </form></html>'
;
$html str_get_html($str);
foreach (
$html->find('input[type=text]') as $t) {
    echo 
$t->name ": " $t->value "<br>";
}
?>

چیک باکسز:
درج ذیل مثال میں نہ صرف ویب پیج میں موجودcheckbox حاصل کیے گئے ہیں بلکہ یہ بھی بتایا گیا ہے کہ کونسا چیک باکس اس وقت سلیکٹ ہے اور کونسا نہیں۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$str '<html><form>
             <input type="checkbox" name="male">Male<br>
             <input type="checkbox" name="female" checked>Female<br>
             <input type="checkbox" name="mix">Mix<br>
        </form></html>'
;
$html str_get_html($str);
foreach(
$html->find('input[type=checkbox]') as $checkbox) {
    if (
$checkbox->checked) {
        echo 
$checkbox->name ' is checked<br>';
    } else {
        echo 
$checkbox->name ' is not checked<br>';
    }
}
?>

سلیکٹ مینیوز:
درج ذیل مثال میں fruits کی id والا سلیکٹ مینیوحاصل کر کے اس کے آپشنز پرنٹ کیے گئے ہیں۔ اور یہ بھی بتایا گیا ہے کہ اس وقت کونسا آپشن سلیکٹ ہے۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$str '<html><form>
     <select id="fruits" name="fruits">
        <option>Apple</option>
        <option selected="selected">Banana</option>
        <option>Orange</option>
     </select>
    </form></html>'
;
$html str_get_html($str);
foreach(
$html->find('select#fruits') as $select) {
    foreach(
$select->find('option') as $option) {
        if (
$option->selected) {
            echo 
$option->innertext ' is selected<br>';
        } else {
            echo 
$option->innertext ' is not selected<br>';
        }
    }
}
?>

(13) ٹیگز کی ویلیوز ختم یا تبدیل کرنا

یہ بھی کیا جا سکتا ہے کہ مکمل ویب پیج ویسے کا ویسا ہی پرنٹ کر دیا جائے، لیکن اس میں سے کچھ ٹیگز کی ویلیوز تبدیل کر دی جائیں۔ درج مثال میں یہی کیا گیا ہے، آبجیکٹ کی outertext پراپرٹی استعمال کرتے ہوئے ویب پیج کے تمام لنکس کو ٹیگ سمیت ختم کر کے ان کی جگہ صرف لفظ Hyperlink لکھ دیا گیا ہے۔ آپ یہ بھی کر سکتے ہیں ان کی جگہ کچھ بھی نہ لکھیں، یوں ویب پیج سے تمام لنکس غائب ہو جائیں گے۔

<?php
include_once('simplehtmldom_1_5/simple_html_dom.php');
$html file_get_html('http://www.microsoft.com');
$tags $html->find('a');
foreach(
$tags as $t) {
    
$t->outertext ' Hyperlink ';
}
echo 
$html;
?>