Data Harvesting

Website တစ်ခု ထဲမှာရှိတဲ့ သက်ဆိုင်ရာ data တွေကို လိုချင်တဲ့ အခါမှာ data harvesting စလုပ်ရပါတယ်။ အဲဒီလို လုပ်တဲ့အခါမှာ manually လုပ်မယ်ဆိုရင် အချိန် များများ ပေးရမယ်။ အချိန်ပေးနိုင်သည် ရှိသော် manually လုပ်တဲ့ အတွက် data မှန်ကန်မှု အတွက် အားနည်း ပါတယ်။ နောက် ပြသနာတစ်ခုက တစ်ချို့ website တွေ က manually လုပ်ဖို့ ခတ်ခဲတာတွေ အများကြီး တွေ့ရတယ်။

ဒီတော့ ကျွန်တော်တို့က computer programming သုံးပြီ harvest လုပ်ကြရပါတယ်။ သဘောကတော့ bots တွေ ရေးတဲ့ သဘောပါပဲ။ browser ကို code ကနေ ဖွင့်မယ် navigate လုပ်မယ်။ လိုချင်တဲ့ အချက်အလက် တွေကို Document Object Model (DOM) ကိုသုံးပြီ controls တွေထဲ data ထည့်တယ်။ Button တွေကို နှိပ်တယ်။ HTML tag တွေ ထဲမှာရှိတဲ့ data တွေကို ဆွဲထုတ်ပြီ database ထဲထည့်တယ်။ Image တွေ အသံ တွေ pdf တွေ ကို download လုပ်တယ်။ နောက်ဆုံး ရလဒ်ကတော့ မိမိအလိုရှိရာ အချက်အလက်တွေကို အလွယ်တကူနဲ့အချိန်အတို အတွင်း database ထဲမှာ စနစ်တကျ ရယူခြင်း ဖြစ်ပါတယ်။

Data Harvesting နဲ့ ပါတ်သတ်ပြီ ပြောမယ်ဆိုရင် ကျယ်ပြန့်ပါတယ်။ ခု ကျွန်တော် tutorial တစ်ခုလုပ်ပြပါမယ်။ Internet explorer နှင့် ms access ကိုအသုံးပြုပြီ မိမိ လိုချင်တဲ့ data တွေရှိတဲ့ website ကနေ data တွေကို table ထဲကို ထည့်ပြမှာဖြစ်ပါတယ်။

အခြေခံ လိုအပ်ချက်တွေကတော့

  1. VBA သိထားပြီး ဖြစ်ရမယ်
  2. Database အခြေခံရှိရမယ်
  3. HTML, JavaScript အခြေခံကို သိထားဖို့ လိုမယ်
  4. Internet ရှိဖို့ လိုတယ်
  5. MS Access 2000 နှင့် အထက် ရှိရမယ် ( ကျွန်တော်ကတော့ MS Access 2003 နဲ့ သုံးပြသွားမှာပါ။)

ဒါတွေ ပြည့်စုံပြီ ဆိုရင် ကျွန်တော် အခုပြောမယ့် Harvesting ကို စလုပ်လို့ ရပါပြီ။

ကျွန်တော်ခု harvesting လုပ်ပြမယ့် website က www.lyrics.com ဖြစ်ပါတယ် “Coldplay” band ရဲ့ သီချင်းစာသားတွေကို MS access ရဲ့ table ထဲကို စနစ်တကျ ထည့်ပြမှာ ဖြစ်ပါတယ်။

ကျွန်တော်တို့ coding စမရေးခင်မှာ မိမိလိုချင်တဲ့ data ကို ဘယ်လိုယူမလဲဆိုတာကို အရင် သွားကြည့်ဖို့လိုပါတယ်။

Lyrics.com ရဲ့ search box ထဲမှာ “coldplay” ကို ရိုက်ရှာကြည့်ပါတယ် သူ ရဲ့ သီချင်းစာသား ခေါင်းစဉ်တွေကို စာမျက်နှာ ၅ ခု စာရှာတွေ့ ပါတယ်။

ပထမ page မှာ အပုဒ် ၂၀ တွေ့တယ်။ သီချင်း title တွေ နှိပ်မှ သီချင်း စာသား အပြည့်အစုံကို မြင်ရမှာ ဖြစ်ပါတယ်။ အဲဒီလိုမျိုး ၅ page လောက် သွားလို့ရတဲ့ သဘောကို တွေ့ရတယ်။ ဒီ page မှာ ကျွန်တော်တို့ လိုအပ်တာ code ထဲကနေ search box ထဲကို “coldplay” ကို ဘယ်လို ထည့်မလဲ search button ကို ဘယ်လို နှိပ်မလဲ။ သီချင်း စာသားတွေကို ဖွင့်ကြည့်မည့် URL တွေနဲ့ page တွေကို သွားဖို့ URL တွေ ဘယ်လို ယူမလဲ ဆိုတာတွေ ဖြစ်ပါတယ်။

လက်ရှိ page ရဲ့ HTML source ကို ဖွင့်ကြည့်ပြီ (View menu -> source) လိုအပ်တဲ့ HTML Object တွေကို သိဖို့ လိုပါတယ်။ (တစ်ချို့ site တွေမှာ HTML Object တွေကို HTML source ကနေ ကြည့်ရုံဖြင့် မမြင်နိုင်ပါဘူး ဒါကိုတော့ ကျွန်တော် နောက် post တွေမှာ ရှင်းပြသွားပါမယ်)

၁။ Search Box ID နှင့် Search Button ကို ရှာဖွေခြင်း

Search box နှင့် search button တွေကို form ထဲမှာ ထည့်ထားပါတယ် search button ကို နှိပ်တာနဲ့ form action က

http://www.lyrics.com/search.php‘ ကို သွားမဲ့သဘောပါ။

၂။ Page တစ်ခုခြင်းစီရဲ့ URL ကို ရှာဖွေခြင်း


Page တွေကို သွားတဲ့ link တွေကို P tag ထဲမှာ ထည့်ထားပါတယ်။ အဲဒီ့ P tag ဟာ id မပါဘူး ဒါကတော့ ကျွန်တော်တို့ကို လွယ်လွယ်နဲ့ ယူလို့မရဘူးဆိုတဲ့ သဘောကို ဆောင်တာပါ။ ကိစ်စမရှိပါ DOM ကို ကျွန်တော် သုံးပြပါမယ်။

(၃) Song Title တွေရဲ့ URL ကို ရှာဖွေခြင်း

လာပြန်ပြီ တစ်ခါ id မပါတဲ့ div tag ထဲမှာ class သုံးထားတဲ့ table တွေ အများကြီးတွေ့ပါတယ် အဲဒီထဲမှာ ကျွန်တော်တို့လိုချင်တဲ့ URL တွေ တွေ့ပါပြီ။

ပထမအပိုင်းအတွက် code စရေးကြည့်ရအောင်

MS access ထဲမှာ fields ၄ ခုပါတဲ့ table တစ်ခုဆောက်မယ်


Module တခု အသစ်ယူမယ်

Internet explorer object ကိုသုံးဖို့ Microsoft Internet Controls ကို References on ရပါမယ် (Tools menu -> References)။ Available References list ထဲမှာ ရှာမတွေ့ခဲ့ လျှင် browse ကို နှိပ်ပြီ windows\system32\ieframe.dll ကို ရွေးလိုက်ပါ။


Step_One function ထဲမှာ ရေးထားသမျှကို ရှင်းပါမယ်

  • Internet explorer object ဆောက်တယ် browser လို့ပေးတယ်။
  • browser ကို မြင်ရအောင် visible true လုပ်တယ်။
  • browser မှာ http://www.lyrics.com ကို navigate လုပ်တယ်။ ပထမ home page loading လုပ်နေတဲ့အချိန်ကို loop ထဲမှာ စောင့်တယ်။
  • ကျွန်တော်တို့ HTML Page source ထဲမှာ ရှာတွေ့ခဲ့တဲ့ search box ရဲ့ value ထဲကို ColdPlay ထည့်ပြီ search button ကို နှိပ်တယ်။
  • browser loading ကိုစောင့်တယ်။
  • Recordset open လုပ်တယ်။ (ကျွန်တော် တို့ အပေါ်မှာဆောက်ခဲ့တဲ့ table name ကိုထည့်ပေးတယ်)
  • Table tag အားလုံးကို cTable object ထဲထည့်တယ််။
  • Table အားလုံးကို loop ပါတ်တယ် class name “search_results_table” ဖြစ်တဲ့ table ထဲမှာရှိတွေက စစ်ထုတ်တယ်။
  • အဲဒီ့ results table တွေရဲ့ ဒုတိယ cell အကွတ်ထဲမှာရှိတဲ့ A tag တွေကို aCount object ထဲ ထည့်ပြီ။ ပထမ A tag ထဲမှာ ရှိတဲ့ href နှင့် innertext တွေကို table ထဲထည့်တယ်။
  • browser ကို quit နဲ့ ပိ်တ်လိုက်တယ်။
  • Option Compare Database
    
    Sub Step_One()
    Dim strArtist As String: strArtist = "ColdPlay"
    
    Dim browser As New InternetExplorer
    browser.Visible = True
    
    browser.Navigate "http://www.lyrics.com"
    While browser.Busy Or browser.ReadyState <> READYSTATE_COMPLETE
    DoEvents
    Wend
    
    browser.Document.getElementByID("predictadInput").Value = strArtist
    browser.Document.getElementByID("search_btn").Click
    
    While browser.Busy Or browser.ReadyState <> READYSTATE_COMPLETE
    DoEvents
    Wend
    
    Set rst = CurrentDb.OpenRecordset("Lyrics_Data")
    Set cTable = browser.Document.getElementsByTagname("table")
    
    For i = 0 To cTable.length – 1
    If cTable(i).ClassName = "search_results_table" Then
    Set aCount = cTable(i).getElementsByTagname("td").Item(1).getElementsByTagname("a")
    If aCount.length = 1 Then
    rst.AddNew
    rst("Artists") = strArtist
    rst("Song Titles") = aCount(0).innerText
    rst("URL") = aCount(0).href
    rst.Update
    Else
    Stop
    End If
    End If
    Next
    browser.Quit
    End Sub
    

    ပြောစရာတစ်ခု ရှိတာက if aCount.length = 1 then ပါ ဘာလို့ထည့်ထားတာ လဲဆိုတော့ တစ်ခါတစ်လေ aCount.length က 1 ထက်ပို လာတဲ့အခါ data တွေ မှားပြီး ၀င်သွားတက်ပါတယ် နောက်တစ်ခု သတိထားစရာ တစ်ခုက results table အားလုံးမှာ row တစ်ခုပဲ ပါပါတယ် ဒါကြောင့် ဒုတိယ cell ကို တန်းယူ လိုက်ခြင်း ဖြစ်ပါတယ်။

    Step_One function ကို Run (F5) ကြည့်လိုက်ပါက IE က အလိုလိုပေါ်လာမယ်။ home page Loading ပြီးတာနဲ့ “Coldplay” ကို ထည့်ပြီ အလိုလျှောက် search button ကို နှိပ်သွားမယ်။ ဒုတိယ အကြိမ် loading ပြီးသွားပါ data တွေ table ၀င်သွားပြီ IE ကို ပိတ်သွားတဲ့ အခါ table ကို ဖွင့်ကြည့်ပါ။ သီချင်း အပုဒ် ၂၀ ကို ဖွင့်ရမဲ့ URL တွေ နဲ့ သီချင်း title တွေကို တွေ့ရမှာဖြစ်ပါတယ်။

    ဆက်ပါဦးမယ်…

    Source Code Download ယူရန်

    http://www.myanmartutorials.com/wp-content/uploads/2010/06/Lyrics.mdb

    Facebook comments:

    9 Responses

    1. awba says:

      » ခက်သလားဟေ့ ဒေတာဘေ့စ် အပိုင်း လေးဆက်တင်ပေးပါ အစ်ကိုတို့ရေ အဲဒီဟာလေးကို ကြိုက်တယ် မျှော်နေမယ်နော် ။

      • Thiha says:

        ကျွန်တော် ခက်သလားဟေ့ ဒေတာဘေ့စ်ရဲ့ အပိုင်းဆက်တွေကို စာရေးသူကို တိုက်တွန်းပြီး တင်ထားပါပြီခင်ဗျာ ..

    2. astk says:

      ha ha.. harvesting ဆိုလို့ ဘယ်သူများလဲလို့… zms ပါလား ..
      harvest နေတုန်းပဲလား… :D အကုန်လုံး အဆင်ပြေလား…

      • zms says:

        အေး မင်းကော အဆင်ပြေလား။ မင်း အကြောင်းတွေ ဖတ်ရပါတယ်။ BBC မှာလဲ နားထောင်လိုက်ရတယ်။ ဂုဏ်ယူပါတယ်။ ငါလဲ Phil နဲ့ တိုင်ပတ်နေတာ။ Harvesting က လွတ်လို့ကို မရသေးဘူး။ ဒါပေမဲ့ Online မှာ ရှိတာ ငါဟာ ကြီးပဲဆိုတာတော့ မမေ့နော်။ :D

    3. awba says:

      အခုလိုကျွန်တော်တို့ကို အရေးတယူ Reply လုပ်ပေးတာ ကျေးဇူးအများကြီးတင်ပါတယ် အစ်ကိုတို့ရေ ။

    4. [...] Page တစ်ခုချင်စီရဲ့ URL ကို ရှာဖွေခြင်း ဆိုတဲ့ ခေါင်းစဉ်မှာ ရှာတွေ့ခဲ့တဲ့ P tag ကို ကျွန်တော်တို့ ပြန်ကြည့်ဖို့လိုပါတယ်။ View Source ထဲမှာ <p> ကိုရှာကြည့်ပါ ကျွန်တော်တို့ နှစ်နေရာပဲ တွေ့နိုင်ပါတယ်။ [...]

    5. Phae Than Maung says:

      ko zms

      ကျွန်တော် ဖေသန်းမောင်ပါ
      မှတ်မိသေးလား
      အရမ်းလေးစားတယ်ဗျာ
      ဂုဏ်ယူပါတယ်
      ကျွန်တော့အီးမေးလ်က
      phaethan21@gmail.com
      အစ်ကိုရဲ့ Data Harvesting ကိုကျွန်တော်သဘောကျတယ်ဗျာ
      ကျွန်တော့ကိုအက်ပေးပါအုန်း

    6. Phae Than Maung says:

      နောက်ထပ်အသစ်လေးတွေရှိရင်
      ကျွန်တော်တို့ကို ဝေမျှပါအုန်းဗျာ
      ကျေးဇူးတင်လျှက်
      ဖေသန်းမောင်

    Leave a comment


    *