تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سلسلة التعامل مع الويب] تحليل الصفحات باستخدام HtmlAgilityPack
#1
السلام عليكم ورحمة الله وبركاته



[COLOR="#800000"]اولا نبارك لكم حلول عيد الفطر السعيد اعاده الله علينا باليمن والبركاتBig Grin

هذا هو الدرس الثاني من السلسلة ، للي ماشاف الدرس الاول يدخل هنا[/COLOR]




--
--
--




صفر :- أجزاء المقالة


اولا- تحميل مكتبة [COLOR="#4B0082"]Html Agility Pack وهي مكتبة مفتوحة المصدر
ثانيا- اضافة المكتبة بالشرح المصور
ثالثا- تعريف التحليل
رابعا- مقدمة حول لغة Html
خامسا- استخدامات التحليل
سادسا- الخاتمة[/COLOR]



--
--
--



اولا :- تحميل المكتبة


التحميل :-

هنا

--

بعد التحميل وفك الضغط ، ستجد عدة مجلدات كالاتي :




هذه ملفات المكتبة لكل نسخة فريم وررك

[COLOR="#FF0000"]مثلا : المكتبة net45 تحتوي على ميزات اكثر ولكنها لاتعمل الا بوجود فريم وررك 4.5 ، والبقية ايضا كذلك .


في هذا الدرس راح نستخدم net20 لأنها تعمل على كل نسخ الفريم وررك ماعدا فريم وررك 1.0[/COLOR]



--
--
--



ثانيا :- اضافة المكتبة


[COLOR="#2F4F4F"]رغم ان الكثيرين يعرفون طريقة اضافة المكاتب للمشروع

ولكن لإفادة الجميع قمت بعمل شرح مصور بالترتيب[/COLOR]

--

[COLOR="#000000"]1- في الـ Solution explorer ، حدد Refrences ، ثم اضغط زر يمين واختر Add refrence


2- اختر التبويب Browser وحدد الملف واضغط OK


3- الان المكتبة تمت اضافتها إلى مشروعك [/COLOR]




--
--
--




ثالثا :- تعريف التحليل


التحليل هو[COLOR="#FF0000"] قراءة صفحة الويب وإستخراج اي قيمة منها

سواء كانت نص ، ليبل ، عنوان الصفحة وغيرها ...

يتم هذا التحليل دون الحاجة الى فئة WebBrowser

بل يتم بواسطة HtmlAgilityPack وهي صنعت خصيصا لذلك

في الجزء القادم إن شاء الله راح يتم شرح كيفية استخراج البيانات من صفحة ويب[/COLOR]




--
--
--




رابعا :- مقدمة عن لغة Html


ماهي الNode ؟؟

-الـNode بالعربي يعني عقدة ، وصفحات الويب تتكون من Node

الNode او لنقل العقدة لتسهيل الامر لها نوعين

إما نوع عنصر(Element) - أو نوع وسم(Tag)

للمزيد ادخل هنا

[COLOR="#8B4513"]اعلم ان بعضكم قد يقول هذا الكاتب مطول الموضوع ليش مايخش في الشرح مباشرة

ولكن اذا كنت تريد ان تكون محترفا في التحليل فعليك أن تعرف ماذا تفعل

فحن في النهاية نتعامل مع صفحات Html ولازم تكون عندنا دراية ولو بسيطة بهذه اللغة[/COLOR]

--

[COLOR="#800080"]الـ Node قد يكون له ابن(Child) أو والد (Parent) . او الاثنين مها

فمثلا الNode الرئيسي لصفحة الHtml والمسمى <html>

له أبناء مثل ، HEAD,BODY,TITLE

ولكن ليس له والد فهو الرئيسي ، ويوجد العكس

<< نسمي هذا النوع من الNode بـ Tag Node ، اي عقد الوسوم

الوسوم مثل <b> , <Body> , <span> , </input> وغيرها ...
[/COLOR]

[COLOR="#0000CD"]اما الـNode من نوع Element (عنصر) تكون مثلا هكذا

PHP كود :
<input class="gsfi" id="lst-ib" name="q" maxlength="2048" title="بحث" size="41" type="text" autocomplete="off" dir="rtl" spellcheck="false"

الكود فوق يقوم بإضافة textbox للصفحة

وهذا مايسمى بالعناصر[/COLOR]


نكتفي هنا ولنذهب مباشرة للتطبيق




--
--
--




خامسا :- استخدام التحليل


[COLOR="#8B4513"]وصلنا للجزء المهم من المقالة ، وهو كيفية التحليل

نحدد هدفنا اولا ! ، ما الذي نريد ان نقوم بفعله

ماذا نريد ان نستخرج من صفحة الويب .

بدايا ، نريد أن نستخرج Ip الشبكة من خلال موقع[/COLOR]

http://whatismyipaddress.com/

--

فالنبدأ :


بعد الدخول للموقع ، ابحث عن الIP الخاص بك

بعد العثور عليه قم بوضع الماوس على نص الIP

واضغط زر يمين واختر Inspect Element



كما ترى تم تحديد الـ Parent node لل نص



الان نقوم بكتابة البرنامج

--

نقوم بتصميم زر

وندخل على حدث الclick تبعه ونكتب التالي:

PHP كود :
string url "http://whatismyipaddress.com";

            
HtmlAgilityPack.HtmlWeb hWeb = new HtmlAgilityPack.HtmlWeb();
            
HtmlAgilityPack.HtmlDocument doc hWeb.Load(url"GET");

            
HtmlAgilityPack.HtmlNodeCollection nodes doc.DocumentNode.SelectNodes("//span");

            foreach (
HtmlAgilityPack.HtmlNode node in nodes)
            {
                if (
node.GetAttributeValue("class""") == "ip blue")
                {
                    
MessageBox.Show(node.InnerText);
                }
            } 

بعد الضغط على الزر راح يتم عرض رسالة فيها الايبي


--

شرح الاكواد :-

PHP كود :
string url "http://whatismyipaddress.com";

            
HtmlAgilityPack.HtmlWeb hWeb = new HtmlAgilityPack.HtmlWeb();
            
HtmlAgilityPack.HtmlDocument doc hWeb.Load(url"GET"); 

[COLOR="#0000FF"]قمت بتعريف كائن hWeb
ثم قمت بتعريف كائن doc يحتوي على الصفحة التي قمت بجلبها من خلال
hWeb[/COLOR]


--


PHP كود :
HtmlAgilityPack.HtmlNodeCollection nodes doc.DocumentNode.SelectNodes("//span"); 

[COLOR="#0000FF"]جلب جميع الNodes التي تحتوي على tag ب span في بدايتها
لاحظ يجب عليك كتابة // قبل اسم الtag [/COLOR]
.. صورة للتوضيح :




--


PHP كود :
foreach (HtmlAgilityPack.HtmlNode node in nodes

الدوران على كل العقد التي تم جلبها


--


PHP كود :
if (node.GetAttributeValue("class""") == "ip blue"

اذا وجد عقدة بها المواصفة class ، وكانت قيمة المواصفة تساوي[COLOR="#FF0000"] ip blue[/COLOR]

قم
PHP كود :
MessageBox.Show(node.InnerText); 

node.InnerText لجلب النص الموجود داخل الnode الحالي


-- لتوضيح المواصفة :



--
--


طريقة اخرى اسهل --
PHP كود :
string url "http://whatismyipaddress.com";

            
HtmlAgilityPack.HtmlWeb hWeb = new HtmlAgilityPack.HtmlWeb();
            
HtmlAgilityPack.HtmlDocument doc hWeb.Load(url"GET");

            
HtmlAgilityPack.HtmlNode  node doc.DocumentNode.SelectNodes("//span[@class='ip blue']")[0];
            
MessageBox.Show(node.InnerText); 



انتهينا من طريق جلب نص من الموقع

--
--

الان منجلب نص موجود داخل عنصر ، وليكن مثلا (textbox)

سنعيد التطبيق على نفس الموقع على هذا التيكست بوكس :




فسيكون المثال كالتالي

PHP كود :
string url "http://whatismyipaddress.com";

            
HtmlAgilityPack.HtmlWeb hWeb = new HtmlAgilityPack.HtmlWeb();
            
HtmlAgilityPack.HtmlDocument doc hWeb.Load(url"GET");

            
HtmlAgilityPack.HtmlNode  node doc.DocumentNode.SelectNodes("//input[@name='LOOKUPADDRESS']")[0];
            
MessageBox.Show(node.InnerText); 


بسيط صح


--
--


[COLOR="#000000"]الان نريد أن نجلب قيمة من موقع اسعار الذهب

http://egypt.gold-price-today.com/

عشان تثبت المعلومة عندنا.


نريد ان نجلب قيمة (سعر عيار الذهب عيار 24) بالجنيه المصري وفي محلات الذهب وبالدولار

[img]http://vb4arb.com/vb/uploaded/454_01375955028.png"> [/img]


نقوم بذلك كالاتي :

PHP كود :
string url "http://egypt.gold-price-today.com/";

            
HtmlAgilityPack.HtmlWeb hWeb = new HtmlAgilityPack.HtmlWeb();
            
HtmlAgilityPack.HtmlDocument doc hWeb.Load(url"GET");

            
HtmlAgilityPack.HtmlNodeCollection  nodes doc.DocumentNode.SelectNodes("//tr"); //parent node

            
foreach (HtmlAgilityPack.HtmlNode node in nodes)
            {
                if (
node.SelectNodes(".//th")[0].InnerText == "سعر الذهب عيار 24")
                {
                    
MessageBox.Show("سعر الذهب بالجنيه المصري" "\n" node.SelectNodes(".//td")[0].InnerText);
                    
MessageBox.Show("سعر الذهب في محلات الذهب" "\n" node.SelectNodes(".//td")[1].InnerText);
                    
MessageBox.Show("سعر الذهب بالدولار" "\n" node.SelectNodes(".//td")[2].InnerText);
                    return;
                }
            } 


--

شرح الاكواد :


PHP كود :
HtmlAgilityPack.HtmlNodeCollection  nodes doc.DocumentNode.SelectNodes("//tr"); //parent node 

تحديد جميع الNodes الي يبدأ الtag تبعها ب tr


--

كود :
node.SelectNodes("[color=#FF0000].[/color]//th")[0].InnerText == "سعر الذهب عيار 24"

كما تلاحظ وضعت نقطة في مسار الnode

وتعني : حدد الnodes الذي يحتوي على تاغ th ضمن الparent node فقط
اي ضمن tr

--

PHP كود :
MessageBox.Show("سعر الذهب بالجنيه المصري" "\n" node.SelectNodes("./
/td"
)[0].InnerText);
                    
MessageBox.Show("سعر الذهب في محلات الذهب" "\n" node.SelectNodes(".//td")[1].InnerText);
                    
MessageBox.Show("سعر الذهب بالدولار" "\n" node.SelectNodes(".//td")[2].InnerText); 

الشي المهم هو ده
PHP كود :
node.SelectNodes(".//td")[0].InnerText 

وتعني جلب الNode الاول الذي يحتوي على تاغ td

--للتوضيح



--
--

طريقة اخرى اكثر دقة

وهي باستعمال الxpath

قم بتحديد الparent node ثم قم بنسخ الxpath

--صورة للتوضيح




وقم بلصقه [/COLOR]
كود :
HtmlAgilityPack.HtmlNodeCollection  nodes = doc.DocumentNode.SelectNodes("[color=#FF0000]//*[@id='right']/table[1]/tbody/tr[1][/color]");




--
--
--



سادسا :- الخاتمة


[COLOR="#800000"]الحمدلله وصلنا لنهاية المقالة

اتمنى انكم استفدتون مني ولو كلمة واحدة

ولو اني حاولت تبسيط الموضوع لأقصى درجة بواسطة الصور

وعيدكم مبارك وعساكم من عوادة Big Grin[/COLOR]

+

الامثلة في المرفقات

+

المزيد
---
---
---

تحياتي



الملفات المرفقة
.zip   Examples.zip (الحجم : 642.67 ك ب / التحميلات : 93)
الرد }}}
#2
السلام عليكم
شكرا لك اخى الحبيب الشاكى لله
بارك الله فيك وجعله فى ميزان حسناتك
استفد كثيرا من هذه المقال شكرا لك
اسف على ردى المتأخر لكنى لم اقرأ الموضوع إلا الأن
الرد }}}
تم الشكر بواسطة:
#3
AHMED HUSSIEN كتب :السلام عليكم
شكرا لك اخى الحبيب الشاكى لله
بارك الله فيك وجعله فى ميزان حسناتك
استفد كثيرا من هذه المقال شكرا لك
اسف على ردى المتأخر لكنى لم اقرأ الموضوع إلا الأن

والمقالات القادمة إن شاء الله راح تستفيد اكثر

لأني بحط مقالات لاتوجد في اي منتدى اخر

لأني اتبعت سياسة "الحصري" منذ بداية السلسلة
الرد }}}
تم الشكر بواسطة:
#4
السلام عليكم

جزاك الله خيرا اخي العزيز وفقك الله لما يحبه ويرضاه

يعطيك العافية
الرد }}}
تم الشكر بواسطة:
#5
الله يحفظك اخي واصل بارك الله فيك وجعله فى ميزان حسناتك
الرد }}}
تم الشكر بواسطة:
#6
الله يعطيك العافيه
(( نحن قوم أعزنا الله بالإسلام فمهما ابتغينا العزة بغيره أذلنا الله )) .. 











الرد }}}
تم الشكر بواسطة:
#7
استخدمت المكتبه و كانت جميله في القراءه بالنسبه لاستخدامي القديم في مجال regular expressions و لكن واجهتني مشكله معينه انها لا تعمل invoke بمحتوى الصفحه اي لو وجد صفحه لابد ان تفعل كود جافا سكربت قبل قراءه محتوى الصفحه او تضغط على زر برمجياً فانها لا تنفع هذه الطريقة ايضا وجدتها مفيده في عملية الطباعه في صفحات Asp.net بحيث تطلب جزء من الصفحه و تقوم بطباعتها كتقرير ، على العموم أعود لمشكلتي مع الـ invoke مع تجربتي الطويله مع صديقتي القديمه الـ webBrower بحيث اني حاولت ان ادخل على الرابط http://www.oscaroparts.com/ و محاولتي هنا هو سحب قوائم موديلات السيارات التي بالموقع و لكن عندما قمت بتصفحه على webBrower الموقع قام بحجب الصفحه بصفحه بديله و ينصحني باستخدام متصفح احدث من IE8 بالرغم ان الذي بجهازي هو IE11 لذلك بحثت قليلاً ووجدت هذا الموضوع لطريقة تخطي هذه المشكله :

http://stackoverflow.com/questions/17922...er-control

و عملت معي بشكل جيد ، في الاخير ان شاء الله انزل تجربتي في عملية سحب القوائم في موضوع منفصل للفائده ، و اتمنى اذا كان هناك مكتبه تدعم invoke ان تتكرم و تذكرها لي .
اسم معرفي : محمد يحيى
الرد }}}
تم الشكر بواسطة: الشاكي لله , الشاكي لله
#8
(25-09-16, 11:49 AM)myalsailamy كتب : استخدمت المكتبه و كانت  جميله  في القراءه  بالنسبه لاستخدامي القديم في مجال  regular expressions  و لكن  واجهتني مشكله  معينه  انها لا  تعمل  invoke  بمحتوى الصفحه  اي لو وجد صفحه لابد ان  تفعل كود جافا سكربت قبل قراءه محتوى الصفحه او  تضغط على زر برمجياً فانها لا  تنفع  هذه الطريقة ايضا وجدتها مفيده في عملية الطباعه  في صفحات  Asp.net  بحيث تطلب جزء من الصفحه و تقوم بطباعتها كتقرير  ، على العموم أعود لمشكلتي مع الـ invoke    مع تجربتي الطويله  مع صديقتي القديمه الـ webBrower  بحيث اني حاولت  ان ادخل  على الرابط  http://www.oscaroparts.com/   و محاولتي هنا هو سحب قوائم  موديلات السيارات التي بالموقع و لكن  عندما قمت بتصفحه  على  webBrower   الموقع قام بحجب الصفحه بصفحه بديله و ينصحني باستخدام  متصفح  احدث من  IE8 بالرغم ان  الذي بجهازي  هو  IE11  لذلك بحثت قليلاً  ووجدت  هذا الموضوع  لطريقة تخطي هذه المشكله  :

http://stackoverflow.com/questions/17922...er-control

و عملت معي بشكل جيد  ، في الاخير ان شاء الله انزل تجربتي في عملية سحب القوائم في موضوع منفصل  للفائده ،  و اتمنى اذا كان هناك مكتبه تدعم  invoke  ان تتكرم و تذكرها  لي .

اهلا بك اخوي myalsailamy

في الحقيقة -حسب علمي- المكتبة مخصصة فقط لتحليل نص الـ HTML وليست لها علاقة بتنفيذ الجافا سكربت

لذلك عليك بتنفيذ الـ Invoke باستخدام طلب الويب (HttpWebRequest) ، الذي بواسطته سيرجع لك نص HTML ، ثم  تدخله على مكتبة التحليل وتقوم واستخراج المطلوب Smile


تحياتي
الرد }}}
تم الشكر بواسطة: myalsailamy , myalsailamy
#9
ان شاء الله سأحاول كتابة كود الطلب والتحليل لهذا الموقع لاحقا ..

فقط بس لو توضح لي المطلوب عشان اكون على بينة ..
الرد }}}
تم الشكر بواسطة:
#10
(08-08-13, 02:38 PM)الشاكي لله كتب :
السلام عليكم ورحمة الله وبركاته



اولا نبارك لكم حلول عيد الفطر السعيد اعاده الله علينا باليمن والبركاتBig Grin

هذا هو الدرس الثاني من السلسلة ، للي ماشاف الدرس الاول يدخل هنا





--
--
--




صفر :-  أجزاء المقالة


اولا- تحميل مكتبة Html Agility Pack وهي مكتبة مفتوحة المصدر
ثانيا- اضافة المكتبة بالشرح المصور
ثالثا- تعريف التحليل
رابعا- مقدمة حول لغة Html
خامسا- استخدامات التحليل
سادسا- الخاتمة




--
--
--



اولا :-  تحميل المكتبة


التحميل :-

هنا

--

بعد التحميل وفك الضغط ، ستجد عدة مجلدات كالاتي :




هذه ملفات المكتبة لكل نسخة فريم وررك

مثلا : المكتبة net45 تحتوي على ميزات اكثر ولكنها لاتعمل الا بوجود فريم وررك 4.5 ، والبقية ايضا كذلك .


في هذا الدرس راح نستخدم net20 لأنها تعمل على كل نسخ الفريم وررك ماعدا فريم وررك 1.0




--
--
--



ثانيا :-  اضافة المكتبة


رغم ان الكثيرين يعرفون طريقة اضافة المكاتب للمشروع

ولكن لإفادة الجميع قمت بعمل شرح مصور بالترتيب


--

1- في الـ Solution explorer ، حدد Refrences ، ثم اضغط زر يمين واختر Add refrence


2- اختر التبويب Browser وحدد الملف واضغط OK


3- الان المكتبة تمت اضافتها إلى مشروعك





--
--
--




ثالثا :-  تعريف التحليل


التحليل هو قراءة صفحة الويب وإستخراج اي قيمة منها

سواء كانت نص ، ليبل ، عنوان الصفحة وغيرها ...

يتم هذا التحليل دون الحاجة الى فئة WebBrowser

بل يتم بواسطة HtmlAgilityPack وهي صنعت خصيصا لذلك

في الجزء القادم إن شاء الله راح يتم شرح كيفية استخراج البيانات من صفحة ويب





--
--
--




رابعا :-  مقدمة عن لغة Html


ماهي الNode ؟؟

-الـNode بالعربي يعني عقدة ، وصفحات الويب تتكون من Node

الNode او لنقل العقدة لتسهيل الامر لها نوعين

إما نوع عنصر(Element) - أو نوع وسم(Tag)

للمزيد ادخل هنا

اعلم ان بعضكم قد يقول هذا الكاتب مطول الموضوع ليش مايخش في الشرح مباشرة

ولكن اذا كنت تريد ان تكون محترفا في التحليل فعليك أن تعرف ماذا تفعل

فحن في النهاية نتعامل مع صفحات Html ولازم تكون عندنا دراية ولو بسيطة بهذه اللغة


--

الـ Node قد يكون له ابن(Child) أو والد (Parent) . او الاثنين مها

فمثلا الNode الرئيسي لصفحة الHtml والمسمى <html>

له أبناء مثل ، HEAD,BODY,TITLE

ولكن ليس له والد فهو الرئيسي  ، ويوجد العكس

<< نسمي هذا النوع من الNode بـ Tag Node ، اي عقد الوسوم

الوسوم مثل <b> , <Body> , <span> , </input> وغيرها ...


اما الـNode من نوع Element (عنصر) تكون مثلا هكذا


PHP كود :
<input class="gsfi" id="lst-ib" name="q" maxlength="2048" title="بحث" size="41" type="text" autocomplete="off" dir="rtl" spellcheck="false"


الكود فوق يقوم بإضافة textbox للصفحة

وهذا مايسمى بالعناصر



نكتفي هنا ولنذهب مباشرة للتطبيق




--
--
--




خامسا :-  استخدام التحليل


وصلنا للجزء المهم من المقالة ، وهو كيفية التحليل

نحدد هدفنا اولا ! ، ما الذي نريد ان نقوم بفعله

ماذا نريد ان نستخرج من صفحة الويب .

بدايا ، نريد أن نستخرج Ip الشبكة من خلال موقع


http://whatismyipaddress.com/

--

فالنبدأ :


بعد الدخول للموقع ، ابحث عن الIP الخاص بك

بعد العثور عليه قم بوضع الماوس على نص الIP

واضغط زر يمين واختر Inspect Element



كما ترى تم تحديد الـ Parent node لل نص



الان نقوم بكتابة البرنامج

--

نقوم بتصميم زر

وندخل على حدث الclick تبعه ونكتب التالي:

PHP كود :
           string url "http://whatismyipaddress.com";

 
           HtmlAgilityPack.HtmlWeb hWeb = new HtmlAgilityPack.HtmlWeb();
 
           HtmlAgilityPack.HtmlDocument doc hWeb.Load(url"GET");

 
           HtmlAgilityPack.HtmlNodeCollection nodes doc.DocumentNode.SelectNodes("//span");

 
           foreach (HtmlAgilityPack.HtmlNode node in nodes)
 
           {
 
               if (node.GetAttributeValue("class""") == "ip blue")
 
               {
 
                   MessageBox.Show(node.InnerText);
 
               }
 
           

بعد الضغط على الزر راح يتم عرض رسالة فيها الايبي


--

شرح الاكواد :-

PHP كود :
           string url "http://whatismyipaddress.com";

 
           HtmlAgilityPack.HtmlWeb hWeb = new HtmlAgilityPack.HtmlWeb();
 
           HtmlAgilityPack.HtmlDocument doc hWeb.Load(url"GET"); 

قمت بتعريف كائن hWeb
ثم قمت بتعريف كائن doc يحتوي على الصفحة التي قمت بجلبها من خلال
hWeb



--


PHP كود :
HtmlAgilityPack.HtmlNodeCollection nodes doc.DocumentNode.SelectNodes("//span"); 

جلب جميع الNodes التي تحتوي على tag ب span في بدايتها
لاحظ يجب عليك كتابة //  قبل اسم الtag

.. صورة للتوضيح :




--


PHP كود :
foreach (HtmlAgilityPack.HtmlNode node in nodes

الدوران على كل العقد التي تم جلبها


--


PHP كود :
if (node.GetAttributeValue("class""") == "ip blue"

اذا وجد عقدة بها المواصفة class ، وكانت قيمة المواصفة تساوي ip blue

قم
PHP كود :
MessageBox.Show(node.InnerText); 

node.InnerText لجلب النص الموجود داخل الnode الحالي


-- لتوضيح المواصفة :



--
--


طريقة اخرى اسهل --
PHP كود :
           string url "http://whatismyipaddress.com";

 
           HtmlAgilityPack.HtmlWeb hWeb = new HtmlAgilityPack.HtmlWeb();
 
           HtmlAgilityPack.HtmlDocument doc hWeb.Load(url"GET");

 
           HtmlAgilityPack.HtmlNode  node doc.DocumentNode.SelectNodes("//span[@class='ip blue']")[0];
 
           MessageBox.Show(node.InnerText); 



انتهينا من طريق جلب نص من الموقع

--
--

الان منجلب نص موجود داخل عنصر ، وليكن مثلا (textbox)

سنعيد التطبيق على نفس الموقع على هذا التيكست بوكس :




فسيكون المثال كالتالي

PHP كود :
           string url "http://whatismyipaddress.com";

 
           HtmlAgilityPack.HtmlWeb hWeb = new HtmlAgilityPack.HtmlWeb();
 
           HtmlAgilityPack.HtmlDocument doc hWeb.Load(url"GET");

 
           HtmlAgilityPack.HtmlNode  node doc.DocumentNode.SelectNodes("//input[@name='LOOKUPADDRESS']")[0];
 
           MessageBox.Show(node.InnerText); 


بسيط صح


--
--


الان نريد أن نجلب قيمة من موقع اسعار الذهب

http://egypt.gold-price-today.com/

عشان تثبت المعلومة عندنا.


نريد ان نجلب قيمة (سعر عيار الذهب عيار 24) بالجنيه المصري وفي محلات الذهب وبالدولار

[img]http://vb4arb.com/vb/uploaded/454_01375955028.png"> [/img]


نقوم بذلك كالاتي :


PHP كود :
           string url "http://egypt.gold-price-today.com/";

 
           HtmlAgilityPack.HtmlWeb hWeb = new HtmlAgilityPack.HtmlWeb();
 
           HtmlAgilityPack.HtmlDocument doc hWeb.Load(url"GET");

 
           HtmlAgilityPack.HtmlNodeCollection  nodes doc.DocumentNode.SelectNodes("//tr"); //parent node

 
           foreach (HtmlAgilityPack.HtmlNode node in nodes)
 
           {
 
               if (node.SelectNodes(".//th")[0].InnerText == "سعر الذهب عيار 24")
 
               {
 
                   MessageBox.Show("سعر الذهب بالجنيه المصري" "\n" node.SelectNodes(".//td")[0].InnerText);
 
                   MessageBox.Show("سعر الذهب في محلات الذهب" "\n" node.SelectNodes(".//td")[1].InnerText);
 
                   MessageBox.Show("سعر الذهب بالدولار" "\n" node.SelectNodes(".//td")[2].InnerText);
 
                   return;
 
               }
 
           



--

شرح الاكواد :



PHP كود :
HtmlAgilityPack.HtmlNodeCollection  nodes doc.DocumentNode.SelectNodes("//tr"); //parent node 


تحديد جميع الNodes الي يبدأ الtag تبعها ب tr


--


كود :
node.SelectNodes("[color=#FF0000].[/color]//th")[0].InnerText == "سعر الذهب عيار 24"


كما تلاحظ وضعت نقطة في مسار الnode

وتعني : حدد الnodes الذي يحتوي على تاغ th ضمن الparent node فقط
اي ضمن tr

--


PHP كود :
                   MessageBox.Show("سعر الذهب بالجنيه المصري" "\n" node.SelectNodes("./
/td"
)[0].InnerText);
 
                   MessageBox.Show("سعر الذهب في محلات الذهب" "\n" node.SelectNodes(".//td")[1].InnerText);
 
                   MessageBox.Show("سعر الذهب بالدولار" "\n" node.SelectNodes(".//td")[2].InnerText); 


الشي المهم هو ده

PHP كود :
node.SelectNodes(".//td")[0].InnerText 


وتعني جلب الNode الاول الذي يحتوي على تاغ td

--للتوضيح



--
--

طريقة اخرى اكثر دقة

وهي باستعمال الxpath

قم بتحديد الparent node ثم قم بنسخ الxpath

--صورة للتوضيح




وقم بلصقه

كود :
HtmlAgilityPack.HtmlNodeCollection  nodes = doc.DocumentNode.SelectNodes("[color=#FF0000]//*[@id='right']/table[1]/tbody/tr[1][/color]");




--
--
--



سادسا :-  الخاتمة


الحمدلله وصلنا لنهاية المقالة

اتمنى انكم استفدتون مني ولو كلمة واحدة

ولو اني حاولت تبسيط الموضوع لأقصى درجة بواسطة الصور

وعيدكم مبارك وعساكم من عوادة Big Grin


+

الامثلة في المرفقات

+

المزيد
---
---
---

تحياتي

موضوعك رائع
سبحان الله وبحمده سبحان الله العظيم 
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سلسلة التحكم] {4} - التحكم عن بعد بواسطة خدمة الويب الشاكي لله 7 9,578 12-07-21, 02:34 PM
آخر رد: devante.celvin
  [سلسلة التحكم] {5} - التحكم بالمصباح بواسطة الـ USB و Arduino الشاكي لله 12 25,194 30-12-19, 01:38 AM
آخر رد: mohammed abdalsamed
  [سلسلة التحكم] {3} - خدمة الويب (Web Service) الشاكي لله 9 12,822 25-09-19, 05:47 PM
آخر رد: al9atl
  تجميعية مقالات [سلسلة التحكم] الشاكي لله 10 7,507 15-07-19, 09:14 AM
آخر رد: mrsalnet
  [سلسلة التعامل مع الويب] - ارسال الطلبات HttpWebRequset الشاكي لله 42 28,426 29-05-19, 10:38 PM
آخر رد: egbest2
  التعامل مع ملفات xml بلغتي C#&VB Sajad 7 14,069 08-11-17, 10:21 AM
آخر رد: nani49
  [C#.NET] سلسلة حلقات نضف كودك Devahmedsalim 1 2,628 10-10-17, 11:28 PM
آخر رد: nani49
  [سلسلة ادوات المبرمج] {2} - اداة تحليل صفحات الويب HAPXPathFinder الشاكي لله 10 8,498 30-08-17, 06:49 PM
آخر رد: ابو روضة
  [سلسلة التحكم] {2} - التحكم بواسطة Remoting الشاكي لله 8 10,357 06-12-16, 04:22 PM
آخر رد: الشاكي لله
  انشاء ملف dll باستخدام لغة #c Sajad 3 5,732 02-06-16, 11:30 AM
آخر رد: CLARO

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم