تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيفية احضار text من موقع الى برنامجي
#5
boty كتب :اخي انا اريد ان اتعلم كيفية تنفيذ البرنامج حتى استفيد فانا تحت التعليم
لكن اذا كنت تريد تنفيذ التطبيق
فانا اريد سعرة بالجنيه ، و العيار 21 على سبيل المثال

امثالك يعجبوني

لايريدون الكود جاهزا بل يريدون الكيفية كي يستفيدون

لذلك ساشرح لك بالتفصيل

--
اولا العملية التي سنقوم باستعمالها تسمى html parsing

وتعني تحليل صفحة الويب واستخراج المطلوب

هناك اكثر من طريقة لعمل هذا التحليل مثل استخدام مكتبة متخصصة في ذلك اسمها htmlagilitypack وهي مجانية وطبعا هي افضل طريقة للتحليل
يمكنك استعمال اداة الويب براوزر لجلب مستند الصفحة وتحليله لكن هذا ليس مفيدا ابدا لأنها ستقوم بتحميل الصور وكل شيئ في الصفحة وهذا يأخذ وقتا بالاضافة الى استهلاك مساحة اكبر من الرام وجلب اشياء لانريدها كا الكوكيز والجيتش كل هذا لسنا بحاجة اليه مما يجعل اداة الويب براوزر اداة فاشلة للparsing html وهناك البديل

--

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

تريد ان نستخرج نصا صحيح , لذلك افتح قوقل كروم او الفايرفوكس واذهب للنص الذي تريد استخراجه
وقم بتحديده واضغط زر يمين على النص واختار اخر خيار




ظهرت لما قائمة جديدة في الاسفل وهي قائمة عناصر الصفحة (elements)

وتم تحديد العنصر الحالي (262.91)

ماذا الان ؟؟

احتفظ بهذه الصورة لأننا سنرجع لها لاحقا

--

الان قم بتنزيل مكتبة Html Agility Pack من المرفقات


لنقم بالبرمجة

1- نضيف زر نسميه Get gold price
2- نضيف ليبل
3- نضيف مرجع عبر الذهاب الى project في الاعلى ثم add refreance ثم browse ثم اختر ملف HtmlAgilityPack.dll المرفق في الحزمة rar

خلاص الان ندخل على حدث button1-click ونقوم بكتابة الاتي

PHP كود :
Dim hweb As New HtmlAgilityPack.HtmlWeb()
Dim doc As HtmlAgilityPack.HtmlDocument hweb.Load("http://egypt.gold-price-today.com/")



For 
Each node As HtmlAgilityPack.HtmlNode In doc.DocumentNode.SelectNodes("//tr")
    Try
        If 
node.SelectNodes(".//th")(0).InnerText "سعر الذهب عيار 21" Then
            label1
.Text node.SelectNodes(".//td")(0).InnerText
        End 
If
    Catch
    
End Try
Next 

نقوم بشرح الاكواد
1. قمنا بتعريف كائن hweb
2. قمنا بتحميل سورس الصفحة ونسخها الى كائن اخر هو htmlDocument - العملية تاخذ 3 ثواني فقط بعكس اداة webbrowser
3. قمنا بالدوران على كل العناصر الي الtag تبعها tr
ماهي العناصر التي الtag مالها tr ؟؟ لنرى صورتنا السابقة


ترى ان العنصر المحدد صاحب التاغ tr يحتوي على العناصر المطلوب استخراجها

لذلك قمت بكتابة هذا الكود
PHP كود :
doc.DocumentNode.SelectNodes("//tr"
ليقوم البرنامج بتحديد جميع العناصر التي يبدأ الtag تبعها ب tr

وعندما يجد البرنامج عنصرا ذو تاغ tr سيقوم بالدخول للعمليات التالية
PHP كود :
    Try
        If 
node.SelectNodes(".//th")(0).InnerText "سعر الذهب عيار 21" Then
            label1
.Text node.SelectNodes(".//td")(0).InnerText
        End 
If
    Catch
    
End Try 

try كتبت لكي لا تحصل اخطاء توقف البرنامج

الان قمت بكتابة جملة شرطية اذا تحققت سيتم الدخول الى الاكواد الي داخلها

شرط الجملة هو انه يجب ان يكون النص في العنصر صاحب التاغ th هو "سعر الذهب عيار 21"
ولكن هل ترا رمز النقطة (".//th")

يعني ان يتم تحديد العناصر صاحبة التاغ th داخل ال node الحالي فقط وليس على مستوى الصفحة
selectnode تعود بمصفوفة وقمت بتحديد باختيار العنصر 0 من المصفوفة ليتم جلبه وتتم المقارنة عليه
ليش كتبت 0 ؟؟ الجواب هو انه لايوجد اصلا سوا عنصر واحد التاغ تبعه th في الnode الحالي

انظر مرة اخرى


كما ترى يوجد فقط عنصر واحد فيه tag th لذلك اخترنا 0 وتعني (حدد اول عنصر يحتوي على tag th)

طيب لنفترض ان في الnode الحالي هناك 2 من الtag th ونريد تحديد الثانية
سنقوم بكتابة 1 بدل صفر وهكذا



الان نكمل حكايتنا

بعد ان ينجح الشرط ويتم الدخول للاكواد نرى الكود النهائي
PHP كود :
label1.Text node.SelectNodes(".//td")(0).InnerText 

ويعني نسب النص الموجود في العنصر الاول الذي يحتوي على التاغ td
داخل الnode الحالي الى الليبل

ههه جملة طويلة صح !!

المهم هذا الي راح يصير

طيب لو اردنا جلب قيمة محلات الذهب كيف سيكون الامر ؟؟
يكون هكذا
PHP كود :
label1.Text node.SelectNodes(".//td")(1).InnerText 
ولو اردناه بالدولار منكتب
PHP كود :
label1.Text node.SelectNodes(".//td")(2).InnerText 

شاهد الصورة :


هل وضحت الصورة الان ؟؟


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

وفي النهاية اعرض لك صفحة تهم كل من يستعمل مكتبة htmlagilitypack
http://codingfields.com/guides/htmlagilitypack/

--

الكود كامل
PHP كود :
    Public Partial Class Form1

        
Private Sub button1_Click(sender As ObjectAs EventArgs)
            
Dim hweb As New HtmlAgilityPack.HtmlWeb()
            
Dim doc As HtmlAgilityPack.HtmlDocument hweb.Load("http://egypt.gold-price-today.com/")



            For 
Each node As HtmlAgilityPack.HtmlNode In doc.DocumentNode.SelectNodes("//tr")
                Try
                    If 
node.SelectNodes(".//th")(0).InnerText "سعر الذهب عيار 21" Then
                        label1
.Text node.SelectNodes(".//td")(0).InnerText
                    End 
If
                Catch
                
End Try
            
Next
        End Sub


    End 
Class 

--
للأسف الكود مكتوب بالسي شارب فما اعتقد انك راح تستفيد من السورس

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


الملفات المرفقة
.zip   GetgoldPrices.zip (الحجم : 64.68 ك ب / التحميلات : 96)
.zip   Html Agility Pack.zip (الحجم : 127.67 ك ب / التحميلات : 86)
الرد }}}
تم الشكر بواسطة: السندبااد


الردود في هذا الموضوع
كيفية احضار text من موقع الى برنامجي - بواسطة الشاكي لله_mybb_import4784 - 28-07-13, 06:28 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيفية منع ظهور الأخطاء من إعدادات البيسيك mmaalmesry 2 851 29-08-25, 10:30 AM
آخر رد: mmaalmesry
  كيفية جلب أسماء الأعمدة بجدول من جداول sql heem1986 2 747 17-08-25, 09:15 PM
آخر رد: heem1986
  كيفية حفظ إعدادات البرنامج بحيث لا تتغير أحمد إبراهيم سعد 4 3,004 06-08-25, 06:34 PM
آخر رد: Taha Okla
  [VB.NET] ما هو أفضل موقع استضافة لقواعد البيانات MSSQL ؟ mmaalmesry 0 796 16-07-25, 10:45 PM
آخر رد: mmaalmesry
  مساعدة في كيفية ترحيل البيانات من داتا قريدفيو إلى داتا قريدفيو في فيجوال بيسك ahmedfa71 13 2,245 09-07-25, 11:24 PM
آخر رد: أبو خالد الشكري
  كيفية احتساب الفرق بين تاريخين بناء على عدد معين مصمم هاوي 2 554 15-01-25, 02:02 PM
آخر رد: مصمم هاوي
  كيفية التعامل مع inputbox في فيجوال ستوديو أسامة حسين 4 3,506 14-01-25, 02:04 AM
آخر رد: أبو خالد الشكري
  كيفية معرفة الجهاز رئيسي ام فرعي المتألق9 1 398 13-11-24, 06:41 PM
آخر رد: justforit
  كيفية معرفة تاريخ انشاء ملف وحدفه المتألق9 2 513 07-11-24, 08:54 AM
آخر رد: F.H.M
  التعامل مع موقع ويب لجلب صورة لالفيجوال بيزك صبري زينوبي 3 444 09-09-24, 11:22 PM
آخر رد: Taha Okla

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


يقوم بقرائة الموضوع: