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 ထဲကို ထည့်ပြမှာဖြစ်ပါတယ်။
အခြေခံ လိုအပ်ချက်တွေကတော့
- VBA သိထားပြီး ဖြစ်ရမယ်
- Database အခြေခံရှိရမယ်
- HTML, JavaScript အခြေခံကို သိထားဖို့ လိုမယ်
- Internet ရှိဖို့ လိုတယ်
- 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 တစ်ခုဆောက်မယ်
Internet explorer object ကိုသုံးဖို့ Microsoft Internet Controls ကို References on ရပါမယ် (Tools menu -> References)။ Available References list ထဲမှာ ရှာမတွေ့ခဲ့ လျှင် browse ကို နှိပ်ပြီ windows\system32\ieframe.dll ကို ရွေးလိုက်ပါ။

Step_One function ထဲမှာ ရေးထားသမျှကို ရှင်းပါမယ်
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:











» ခက်သလားဟေ့ ဒေတာဘေ့စ် အပိုင်း လေးဆက်တင်ပေးပါ အစ်ကိုတို့ရေ အဲဒီဟာလေးကို ကြိုက်တယ် မျှော်နေမယ်နော် ။
ကျွန်တော် ခက်သလားဟေ့ ဒေတာဘေ့စ်ရဲ့ အပိုင်းဆက်တွေကို စာရေးသူကို တိုက်တွန်းပြီး တင်ထားပါပြီခင်ဗျာ ..
ကျေးဇူးပဲ ကိုသီဟရေ့
ha ha.. harvesting ဆိုလို့ ဘယ်သူများလဲလို့… zms ပါလား ..
အကုန်လုံး အဆင်ပြေလား…
harvest နေတုန်းပဲလား…
အေး မင်းကော အဆင်ပြေလား။ မင်း အကြောင်းတွေ ဖတ်ရပါတယ်။ BBC မှာလဲ နားထောင်လိုက်ရတယ်။ ဂုဏ်ယူပါတယ်။ ငါလဲ Phil နဲ့ တိုင်ပတ်နေတာ။ Harvesting က လွတ်လို့ကို မရသေးဘူး။ ဒါပေမဲ့ Online မှာ ရှိတာ ငါဟာ ကြီးပဲဆိုတာတော့ မမေ့နော်။
အခုလိုကျွန်တော်တို့ကို အရေးတယူ Reply လုပ်ပေးတာ ကျေးဇူးအများကြီးတင်ပါတယ် အစ်ကိုတို့ရေ ။
[...] Page တစ်ခုချင်စီရဲ့ URL ကို ရှာဖွေခြင်း ဆိုတဲ့ ခေါင်းစဉ်မှာ ရှာတွေ့ခဲ့တဲ့ P tag ကို ကျွန်တော်တို့ ပြန်ကြည့်ဖို့လိုပါတယ်။ View Source ထဲမှာ <p> ကိုရှာကြည့်ပါ ကျွန်တော်တို့ နှစ်နေရာပဲ တွေ့နိုင်ပါတယ်။ [...]
ko zms
ကျွန်တော် ဖေသန်းမောင်ပါ
မှတ်မိသေးလား
အရမ်းလေးစားတယ်ဗျာ
ဂုဏ်ယူပါတယ်
ကျွန်တော့အီးမေးလ်က
phaethan21@gmail.com
အစ်ကိုရဲ့ Data Harvesting ကိုကျွန်တော်သဘောကျတယ်ဗျာ
ကျွန်တော့ကိုအက်ပေးပါအုန်း
နောက်ထပ်အသစ်လေးတွေရှိရင်
ကျွန်တော်တို့ကို ဝေမျှပါအုန်းဗျာ
ကျေးဇူးတင်လျှက်
ဖေသန်းမောင်