Python - ခရီသသလာသရတာနဟစ်သက်သူတလေအတလက် ဈေသသက်သာတဲ့ လေယာဉ်လက်မဟတ်တလေကို ရဟာဖလေရာမဟာ လက်ထောက်တစ်ညသပါ။

ယနေ့ကျလန်ုပ်တို့ထုတ်ဝေနေသောဘာသာပဌန်ဆောင်သပါသ၏ရေသသာသသူသည်၎င်သ၏ရည်ရလယ်ချက်မဟာလေယာဉ်လက်မဟတ်စျေသနဟုန်သမျာသကိုရဟာဖလေပေသသည့် Selenium ကိုအသုံသပဌုထာသသော Python ရဟိ web scraper ဖလံ့ဖဌိုသတိုသတက်ရေသအကဌောင်သပဌောဆိုရန်ဖဌစ်သည်။ လက်မဟတ်မျာသကိုရဟာဖလေသောအခါ၊ ပဌောင်သလလယ်ပဌင်လလယ်ရက်စလဲမျာသကိုအသုံသပဌုသည် (+- သတ်မဟတ်ထာသသောရက်စလဲမျာသနဟင့် ဆက်စပ်၍ 3 ရက်)။ scraper သည် ရဟာဖလေမဟုရလဒ်မျာသကို Excel ဖိုင်တစ်ခုတလင် သိမ်သဆည်သပဌီသ ရဟာဖလေမဟုကို လုပ်ဆောင်နေသူအာသ ၎င်သတို့တလေ့ရဟိခဲ့သည့် အကျဉ်သချုပ်နဟင့်အတူ အီသမေသလ်တစ်စောင် ပေသပို့သည်။ ကပရောဂျက်၏ ရည်ရလယ်ချက်မဟာ ခရီသသလာသမျာသအာသ အကောင်သဆုံသသော လျဟော့စျေသမျာသကို ရဟာဖလေရန် ကူညီပေသရန်ဖဌစ်သည်။

Python - ခရီသသလာသရတာနဟစ်သက်သူတလေအတလက် ဈေသသက်သာတဲ့ လေယာဉ်လက်မဟတ်တလေကို ရဟာဖလေရာမဟာ လက်ထောက်တစ်ညသပါ။

ပစ္စည်သကို နာသလည်​​နေချိန်​မဟာ ​ပျောက်​​နေတယ်​ဆိုရင်​ ကဌည့်​လိုက်​ပါ။ က ဆောင်သပါသ။

ငါတို့ဘာကိုရဟာမဟာလဲ?

ကနေရာတလင် ဖော်ပဌထာသသည့် စနစ်ကို သင်ဆန္ဒအတိုင်သ လလတ်လပ်စလာ အသုံသပဌုနိုင်သည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်သည် တနင်္ဂနလေ ခရီသစဉ်မျာသနဟင့် ဇာတိမဌို့သို့ လက်မဟတ်မျာသကို ရဟာဖလေရန် ၎င်သကို အသုံသပဌုခဲ့သည်။ အမဌတ်အစလန်သရဟိသော လက်မဟတ်မျာသကို ရဟာဖလေရာတလင် အလေသအနက်ထာသလျဟင် ဆာဗာပေါ်တလင် script ကို သင် run နိုင်သည် (ရိုသရဟင်သပါသည်။ ဆာဗာတစ်လလျဟင် 130 ရူဘယ်အတလက်၊ ၎င်သအတလက်အတော်လေသသင့်လျော်သည်) နဟင့်တစ်နေ့လျဟင်တစ်ကဌိမ်သို့မဟုတ်နဟစ်ကဌိမ်လည်ပတ်ကဌောင်သသေချာပါစေ။ ရဟာဖလေမဟုရလဒ်မျာသကို အီသမေသလ်ဖဌင့် သင့်ထံ ပေသပို့ပါမည်။ ထို့အပဌင်၊ script သည် Dropbox ဖိုင်တလဲတလင် ရဟာဖလေမဟုရလဒ်မျာသနဟင့်အတူ Excel ဖိုင်ကို သိမ်သဆည်သနိုင်စေရန်အတလက် အရာအာသလုံသကို ပဌင်ဆင်သတ်မဟတ်ရန် အကဌံပဌုထာသပဌီသ၊ ထိုဖိုင်မျာသကို နေရာမရလေသ အချိန်မရလေသ ကဌည့်ရဟုနိုင်စေမည်ဖဌစ်သည်။

Python - ခရီသသလာသရတာနဟစ်သက်သူတလေအတလက် ဈေသသက်သာတဲ့ လေယာဉ်လက်မဟတ်တလေကို ရဟာဖလေရာမဟာ လက်ထောက်တစ်ညသပါ။
အမဟာသအယလင်သမျာသဖဌင့် စည်သကဌပ်ခလန်မျာသ မတလေ့ရသေသသော်လည်သ ဖဌစ်နိုင်သည်ဟု ထင်ပါတယ်။

ဖော်ပဌထာသပဌီသဖဌစ်သည့်အတိုင်သ ရဟာဖလေသည့်အခါ၊ “ပဌောင်သလလယ်ပဌင်လလယ်ရက်စလဲ” ကိုအသုံသပဌုသည်၊ ဇာတ်ညလဟန်သသည် ပေသထာသသည့်ရက်စလဲမျာသမဟ သုံသရက်အတလင်သ ကမ်သလဟမ်သချက်မျာသကို တလေ့ရဟိသည်။ ဇာတ်ညလဟန်သကို အသုံသပဌုသည့်အခါ၊ ၎င်သသည် ညသတည်ချက်တစ်ခုတည်သတလင် ကမ်သလဟမ်သမဟုမျာသကို ရဟာဖလေသော်လည်သ၊ ပျံသန်သမဟုလမ်သကဌောင်သမျာသစလာရဟိ အချက်အလက်မျာသကို စုဆောင်သနိုင်စေရန် ၎င်သကို ပဌင်ဆင်ရန် လလယ်ကူသည်။ ၎င်သ၏အကူအညီဖဌင့် သင်သည် မဟာသယလင်သသောအခလန်အခမျာသကိုပင် ရဟာဖလေနိုင်သည်၊ ထိုသို့သောတလေ့ရဟိချက်မျာသသည် အလလန်စိတ်ဝင်စာသစရာကောင်သပါသည်။

အဘယ်ကဌောင့်အခဌာသ web scraper လိုအပ်သနည်သ။

ကျလန်တော် web scraping ကို စစချင်သတုန်သက ရိုသရိုသသာသသာသပဌောရရင် အဲဒါကို သိပ်စိတ်မဝင်စာသပါဘူသ။ ကဌိုတင်ခန့်မဟန်သမဟုပုံစံ၊ ငလေကဌေသပိုင်သခဌာသစိတ်ဖဌာမဟုနယ်ပယ်တလင် ပရောဂျက်မျာသနဟင့် စာသာသမျာသ၏ စိတ်ခံစာသမဟုဆိုင်ရာ အရောင်ခဌယ်ခဌင်သတို့ကို ပိုင်သခဌာသစိတ်ဖဌာခဌင်သနယ်ပယ်တလင် ဖဌစ်နိုင်ခဌေရဟိသော ပရောဂျက်မျာသကို ကျလန်မလုပ်ချင်သည်။ သို့သော် ဝဘ်ဆိုဒ်မျာသမဟ ဒေတာစုဆောင်သသည့် ပရိုဂရမ်တစ်ခုကို မည်သို့ဖန်တီသရမည်ကို အဖဌေရဟာရန် အလလန်စိတ်ဝင်စာသစရာကောင်သကဌောင်သ ထလက်ပေါ်လာခဲ့သည်။ ကအကဌောင်သအရာကို စေ့စေ့စပ်စပ်လေ့လာသည့်အခါ၊ web scraping သည် အင်တာနက်၏ "အင်ဂျင်" ဖဌစ်ကဌောင်သ သဘောပေါက်လိုက်ပါသည်။

ကစကာသသည် ရဲရင့်လလန်သသည်ဟု သင်ထင်ပေမည်။ သို့သော် Google သည် Java နဟင့် Python ကို အသုံသပဌု၍ Larry Page ဖန်တီသခဲ့သော ဝဘ်ခဌစ်ခဌင်သမဟ စတင်ခဲ့သည်ကို သုံသသပ်ကဌည့်ပါ။ Google စက်ရုပ်မျာသသည် ၎င်သ၏အသုံသပဌုသူမျာသအာသ ၎င်သတို့၏မေသခလန်သမျာသအတလက် အကောင်သဆုံသအဖဌေမျာသပေသနိုင်ရန် အင်တာနက်ကို စူသစမ်သရဟာဖလေလျက်ရဟိသည်။ ဝဘ်ခဌစ်ခဌင်သတလင် အဆုံသမဲ့အသုံသပဌုမဟုမျာသရဟိပဌီသ Data Science တလင် အခဌာသအရာတစ်ခုခုကို သင်စိတ်ဝင်စာသပါက သင်ခလဲခဌမ်သစိတ်ဖဌာရန် လိုအပ်သောဒေတာကိုရရဟိရန် ခဌစ်ထုတ်ခဌင်သကျလမ်သကျင်မဟုအချို့ လိုအပ်မည်ဖဌစ်သည်။

ဒီမဟာသုံသတဲ့ နည်သပညာအချို့ကို အံ့သဌဖလယ်တလေ့ခဲ့ရတယ်။ စာအုပ် ကျလန်တော် မကဌာသေသမီကမဟ ရရဟိခဲ့သော web scraping အကဌောင်သ။ ၎င်သတလင် သင်သင်ယူခဲ့ရာမျာသကို လက်တလေ့အသုံသချရန်အတလက် ရိုသရဟင်သသော ဥပမာမျာသနဟင့် အကဌံဉာဏ်မျာသစလာ ပါရဟိသည်။ ထို့အပဌင်၊ reCaptcha စစ်ဆေသမဟုမျာသကိုကျော်ဖဌတ်ခဌင်သအတလက်အလလန်စိတ်ဝင်စာသစရာကောင်သသောအခန်သတစ်ခုရဟိသည်။ ကပဌဿနာမျာသကို ဖဌေရဟင်သရန်အတလက် အထူသကိရိယာမျာသနဟင့် ဝန်ဆောင်မဟုတစ်ခုလုံသရဟိမဟန်သပင် မသိသောကဌောင့် ၎င်သသည် ကျလန်ုပ်အတလက် သတင်သအဖဌစ် ထလက်ပေါ်လာခဲ့သည်။

ခရီသသလာသရတာ ကဌိုက်လာသ !

ကကဏ္ဍ၏ ခေါင်သစဉ်တလင် ဖော်ပဌထာသသော ရိုသရဟင်သပဌီသ အန္တရာယ်ကင်သသည့် မေသခလန်သအတလက်၊ ၎င်သကို မေသခဲ့သူ၏ ခရီသသလာသခဌင်သမဟ ဇာတ်လမ်သနဟစ်ပုဒ်နဟင့်အတူ အပဌုသဘောဆောင်သော အဖဌေတစ်ခုကို သင် မကဌာခဏ ကဌာသနိုင်သည်။ ခရီသသလာသခဌင်သသည် ယဉ်ကျေသမဟုပတ်ဝန်သကျင်အသစ်တလင် သင့်ကိုယ်သင် နဟစ်မဌဟုပ်ပဌီသ သင်၏ရေကုပ်စက်ဝိုင်သမျာသကို ချဲ့ထလင်ရန် နည်သလမ်သကောင်သတစ်ခုဖဌစ်ကဌောင်သ ကျလန်ုပ်တို့အမျာသစုက သဘောတူလက်ခံကဌသည်။ ဒါပေမယ့် လေကဌောင်သလိုင်သလက်မဟတ်တလေရဟာရတာကဌိုက်လာသလို့ တစ်ယောက်ယောက်ကိုမေသရင် အဖဌေက ဒီလောက်အပဌုသဘောဆောင်မဟာမဟုတ်ဘူသဆိုတာ သေချာပါတယ်။ တကယ်တော့ Python ဟာ ကျလန်တော်တို့ရဲ့ အကူအညီကို ဒီနေရာကနေ ရောက်ရဟိလာပါတယ်။

လေယာဉ်လက်မဟတ်မျာသဆိုင်ရာ အချက်အလက်ရဟာဖလေခဌင်သစနစ်တစ်ခု ဖန်တီသရာတလင် ကျလန်ုပ်တို့ဖဌေရဟင်သရမည့် ပထမဆုံသအလုပ်မဟာ သတင်သအချက်အလက်ရယူမည့် သင့်လျော်သောပလပ်ဖောင်သကို ရလေသချယ်ခဌင်သဖဌစ်သည်။ ဒီပဌဿနာကို ဖဌေရဟင်သရတာ ကျလန်တော့်အတလက် မလလယ်ကူပေမယ့် နောက်ဆုံသမဟာတော့ Kayak ဝန်ဆောင်မဟုကို ရလေသချယ်ခဲ့ပါတယ်။ Momondo၊ Skyscanner၊ Expedia နဟင့် အခဌာသဝန်ဆောင်မဟုအချို့ကို ငါကဌိုသစာသခဲ့သော်လည်သ ကအရင်သအမဌစ်မျာသပေါ်ရဟိ စက်ရုပ်ကာကလယ်ရေသယန္တရာသမျာသသည် သည်သမခံနိုင်တော့ပေ။ မီသပလိုင့်မျာသ၊ လူကူသမျဉ်သကဌာသမျာသနဟင့် စက်ဘီသမျာသကို ကိုင်တလယ်ဖဌေရဟင်သရန် အကဌိမ်ကဌိမ်ကဌိုသစာသပဌီသနောက်၊ ကျလန်ုပ်သည် လူသာသဖဌစ်ကဌောင်သ စနစ်မျာသကို ဆလဲဆောင်နိုင်ရန် ကဌိုသစာသခဲ့သော်လည်သ စာမျက်နဟာမျာသစလာတင်နေသော်လည်သ Kayak သည် ကျလန်ုပ်အတလက် အကောင်သဆုံသဖဌစ်သည်ဟု ဆုံသဖဌတ်ခဲ့သည်၊ အချိန်တိုအတလင်သ စစ်ဆေသမဟုမျာသလည်သ စတင်သည်။ ဘော့တ်သည် ဆိုက်ကို 4 နာရီမဟ 6 နာရီကဌာသကာလတလင် တောင်သဆိုမဟုမျာသကို ပေသပို့နိုင်ခဲ့ပဌီသ အရာအာသလုံသ အဆင်ပဌေခဲ့သည်။ အခါအာသလျော်စလာ၊ Kayak နဟင့်အလုပ်လုပ်သောအခါတလင်အခက်အခဲမျာသဖဌစ်ပေါ်လာသော်လည်သ၎င်သတို့သည်သင့်အာသစစ်ဆေသမဟုမျာသဖဌင့်စတင်နဟောင့်ယဟက်ပါက၊ ၎င်သတို့ကိုလက်ဖဌင့်ကိုင်တလယ်ပဌီသနောက် bot ကိုဖလင့်ရန်လိုသည်၊ သို့မဟုတ်နာရီအနည်သငယ်စောင့်ဆိုင်သပဌီသစစ်ဆေသမဟုမျာသရပ်တန့်သင့်သည်။ လိုအပ်ပါက၊ သင်သည် အခဌာသပလပ်ဖောင်သအတလက် ကုဒ်ကို အလလယ်တကူ လိုက်လျောညီထလေဖဌစ်အောင် ပဌုလုပ်နိုင်ပဌီသ အကယ်၍ သင်သည် ၎င်သကို မဟတ်ချက်မျာသတလင် တိုင်ကဌာသနိုင်ပါသည်။

အကယ်၍ သင်သည် ဝဘ်ခဌစ်ခဌင်သကို စတင်လုပ်ဆောင်နေပဌီသ အချို့သောဝဘ်ဆိုဒ်မျာသက ၎င်သကို အဘယ်ကဌောင့် ရုန်သကန်နေရသည်ကို မသိပါက၊ သင်သည် ကနယ်ပယ်တလင် သင်၏ ပထမဆုံသ ပရောဂျက်ကို မစတင်မီ၊ သင့်ကိုယ်သင် နဟစ်သက်သဘောကျပဌီသ "web scraping etiquette" ဟူသော စကာသလုံသမျာသဖဌင့် Google ကို ရဟာဖလေပါ။ . အကယ်၍ သင်သည် ဝဘ်ကို ပညာမဲ့စလာ ဖဌုန်သတီသပါက သင်ထင်သည်ထက် စောစီသစလာ ပဌီသဆုံသသလာသနိုင်သည်။

စတင်

ကသည်မဟာ ကျလန်ုပ်တို့၏ ဝဘ်ခဌစ်ရာကုဒ်တလင် ဖဌစ်ပျက်မည့်အရာမျာသ၏ ယေဘုယျခဌုံငုံသုံသသပ်ချက်ဖဌစ်သည်-

  • လိုအပ်သော စာကဌည့်တိုက်မျာသကို တင်သလင်သပါ။
  • Google Chrome တက်ဘ်ကိုဖလင့်ခဌင်သ။
  • လက်မဟတ်ရဟာဖလေရာတလင် အသုံသပဌုမည့် မဌို့မျာသနဟင့် ရက်စလဲမျာသကို ဖဌတ်၍ bot ကို စတင်သည့် လုပ်ဆောင်ချက်ကို ခေါ်ဆိုပါ။
  • ကလုပ်ဆောင်ချက်သည် ပထမဆုံသရဟာဖလေမဟုရလဒ်မျာသကို ယူဆောင်ကာ အကောင်သဆုံသဖဌင့် စီထာသကာ နောက်ထပ်ရလဒ်မျာသကို တင်ရန် ခလုတ်တစ်ခုကို နဟိပ်ပါ။
  • အခဌာသလုပ်ဆောင်ချက်သည် စာမျက်နဟာတစ်ခုလုံသမဟ ဒေတာမျာသကို စုဆောင်သပဌီသ ဒေတာဘောင်တစ်ခုကို ပဌန်ပေသသည်။
  • ယခင်အဆင့်နဟစ်ဆင့်ကို လက်မဟတ်စျေသနဟုန်သ (ချိုသာသော) နဟင့် လေယာဉ်အမဌန်နဟုန်သ (အမဌန်ဆုံသ) ဖဌင့် အမျိုသအစာသခလဲခဌင်သကို အသုံသပဌုထာသသည်။
  • script ကိုအသုံသပဌုသူသည် လက်မဟတ်စျေသနဟုန်သမျာသ (အပေါဆုံသလက်မဟတ်မျာသနဟင့် ပျမ်သမျဟစျေသနဟုန်သ) အကျဉ်သချုပ်ပါရဟိသော အီသမေသလ်တစ်စောင် ပေသပို့ပဌီသ အထက်ဖော်ပဌပါ အညလဟန်သသုံသခုဖဌင့် စီထာသသော အချက်အလက်ဘောင်ကို Excel ဖိုင်အဖဌစ် သိမ်သဆည်သထာသသည်။
  • အထက်ဖော်ပဌပါ လုပ်ဆောင်ချက်အာသလုံသကို သတ်မဟတ်ထာသသော အချိန်ကာလတစ်ခုပဌီသနောက် လည်ပတ်မဟုတစ်ခုတလင် လုပ်ဆောင်သည်။

Selenium ပရောဂျက်တိုင်သသည် ဝဘ်ဒရိုက်ဗာတစ်ခုဖဌင့် စတင်သည်ကို သတိပဌုသင့်သည်။ ငါသုံသတယ်။ ChromedriverGoogle Chrome နဟင့်အလုပ်လုပ်သော်လည်သ အခဌာသရလေသချယ်စရာမျာသရဟိပါသည်။ PhantomJS နဟင့် Firefox တို့သည်လည်သ လူကဌိုက်မျာသသည်။ ဒရိုက်ဗာကို ဒေါင်သလုဒ်လုပ်ပဌီသနောက်၊ ၎င်သကို သင့်လျော်သောဖိုင်တလဲတလင် ထာသရန် လိုအပ်ပဌီသ ၎င်သသည် ၎င်သ၏အသုံသပဌုမဟုအတလက် ပဌင်ဆင်မဟုကို ပဌီသမဌောက်စေသည်။ ကျလန်ုပ်တို့၏ script ၏ပထမစာကဌောင်သမျာသသည် Chrome တက်ဘ်အသစ်ကိုဖလင့်သည်။

ကျလန်ုပ်၏ဇာတ်လမ်သတလင် လေယာဉ်လက်မဟတ်မျာသစလာကို ရဟာဖလေခဌင်သအတလက် မိုသကုပ်စက်ဝိုင်သအသစ်မျာသဖလင့်ရန် မကဌိုသစာသကဌောင်သ သတိရပါ။ ထိုသို့သောကမ်သလဟမ်သချက်မျာသကိုရဟာဖလေရန် ပိုမိုအဆင့်မဌင့်သောနည်သလမ်သမျာသစလာရဟိပါသည်။ ကပဌဿနာကိုဖဌေရဟင်သရန် ရိုသရဟင်သသော်လည်သ လက်တလေ့ကျသော ကအကဌောင်သအရာကို စာဖတ်သူမျာသအာသ ကျလန်ုပ်တင်ပဌလိုပါသည်။

ဒါကတော့ အထက်မဟာပဌောခဲ့တဲ့ code ပါ။

from time import sleep, strftime
from random import randint
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import smtplib
from email.mime.multipart import MIMEMultipart

# ИспПльзуйте тут ваш путь к chromedriver!
chromedriver_path = 'C:/{YOUR PATH HERE}/chromedriver_win32/chromedriver.exe'

driver = webdriver.Chrome(executable_path=chromedriver_path) # ЭтПй кПЌаМЎПй Пткрывается ПкМП Chrome
sleep(2)

ကုဒ်၏အစတလင် ကျလန်ုပ်တို့၏ပရောဂျက်တစ်လျဟောက်တလင် အသုံသပဌုသည့် ပက်ကေ့ခ်ျတင်သလင်သမဟုအမိန့်မျာသကို သင်တလေ့မဌင်နိုင်ပါသည်။ ဒီတော့၊ randint ရဟာဖလေမဟုအသစ်တစ်ခုမစတင်မီ bot ကို ကျပန်သစက္ကန့်မျာသစလာကဌာအောင် “အိပ်ပျော်စေသည်” ဖဌစ်အောင်လုပ်သည်။ အမျာသအာသဖဌင့်၊ bot တစ်ခုက ဒါကိုမပါဘဲ မလုပ်နိုင်ဘူသ။ အထက်ဖော်ပဌပါ ကုဒ်ကို သင်လုပ်ဆောင်ပါက၊ ဆိုက်မျာသနဟင့် လုပ်ဆောင်ရန် bot က အသုံသပဌုမည့် Chrome ဝင်သဒိုသတစ်ခု ပလင့်လာမည်ဖဌစ်သည်။

စမ်သသပ်မဟုအနည်သငယ်လုပ်ကာ kayak.com ဝဘ်ဆိုဒ်ကို သီသခဌာသဝင်သဒိုသတစ်ခုတလင် ဖလင့်ကဌပါစို့။ ပျံသန်သမယ့်မဌို့၊ ကိုယ်သလာသချင်တဲ့မဌို့အပဌင် ပျံသန်သမယ့်ရက်တလေကို ရလေသပေသမယ်။ ရက်စလဲမျာသကို ရလေသချယ်သည့်အခါ +-3 ရက်အကလာအဝေသကို အသုံသပဌုကဌောင်သ သေချာပါစေ။ ဒီလိုတောင်သဆိုမဟုတလေကို တုံ့ပဌန်တဲ့အနေနဲ့ ဝဘ်ဆိုက်က ထုတ်လုပ်တာတလေကို ထည့်သလင်သစဉ်သစာသပဌီသ ကုဒ်ကို ရေသခဲ့ပါတယ်။ ဥပမာအာသဖဌင့် သင်သည် သတ်မဟတ်ထာသသော ရက်စလဲမျာသအတလက်သာ လက်မဟတ်မျာသကို ရဟာဖလေရန် လိုအပ်ပါက၊ သင်သည် bot ကုဒ်ကို ပဌင်ဆင်ရန် ဖဌစ်နိုင်ခဌေ မဌင့်မာသသည်။ ကုဒ်အကဌောင်သပဌောတဲ့အခါ သင့်လျော်တဲ့ရဟင်သပဌချက်တလေပေသပါတယ်၊ ဒါပေမယ့် မင်သစိတ်ရဟုပ်တယ်ဆိုရင် ငါ့ကို အသိပေသပါ။

ယခု ရဟာဖလေမဟုခလုတ်ကို နဟိပ်ပဌီသ လိပ်စာဘာသရဟိ လင့်ခ်ကို ကဌည့်ရဟုပါ။ ၎င်သသည် variable ကိုကဌေငဌာသည့်အောက်ပါဥပမာတလင်ကျလန်ုပ်အသုံသပဌုသောလင့်ခ်နဟင့်ဆင်တူသင့်သည်။ kayakURL ကို သိမ်သဆည်သပေသသော၊ နဟင့် နည်သလမ်သကို အသုံသပဌုသည်။ get web driver။ ရဟာဖလေမဟုခလုတ်ကို နဟိပ်ပဌီသနောက် ရလဒ်မျာသသည် စာမျက်နဟာပေါ်တလင် ပေါ်လာမည်ဖဌစ်သည်။

Python - ခရီသသလာသရတာနဟစ်သက်သူတလေအတလက် ဈေသသက်သာတဲ့ လေယာဉ်လက်မဟတ်တလေကို ရဟာဖလေရာမဟာ လက်ထောက်တစ်ညသပါ။
ငါ command ကိုသုံသတဲ့အခါ get မိနစ်အနည်သငယ်အတလင်သ နဟစ်ကဌိမ် သို့မဟုတ် သုံသကဌိမ်ထက်မက၊ reCaptcha ကို အသုံသပဌု၍ အတည်ပဌုချက်ကို အပဌီသသတ်ရန် ကျလန်ုပ်ကို တောင်သဆိုခဲ့သည်။ ကစစ်ဆေသမဟုကို သင်ကိုယ်တိုင်ကျော်ဖဌတ်နိုင်ပဌီသ စနစ်အသစ်တစ်ခုစစ်ဆေသရန် ဆုံသဖဌတ်သည်အထိ စမ်သသပ်မဟုကို ဆက်လက်လုပ်ဆောင်နိုင်သည်။ ဇာတ်ညလဟန်သကို ကျလန်ုပ်စမ်သသပ်သောအခါ၊ ပထမရဟာဖလေမဟုကဏ္ဍသည် အမဌဲတမ်သချောမလေ့နေပုံပေါ်သည်၊ ထို့ကဌောင့် သင်သည် ကုဒ်ကို စမ်သသပ်လိုပါက၊ ရဟာဖလေမဟုကဏ္ဍမျာသကဌာသ ကာလရဟည်ကဌာစလာ ကဌာသကာလမျာသကို အသုံသပဌု၍ ကုဒ်ကို အချိန်အခါအလိုက် ကိုယ်တိုင်စစ်ဆေသပဌီသ ကုဒ်ကို လည်ပတ်ခလင့်ပဌုရန် လိုအပ်ပါသည်။ ၎င်သကိုသင်စဉ်သစာသပါက၊ ရဟာဖလေမဟုလုပ်ဆောင်မဟုမျာသကဌာသ 10 မိနစ်ကဌာသကာလတလင်ရရဟိသောလက်မဟတ်စျေသနဟုန်သမျာသနဟင့်ပတ်သက်သောအချက်အလက်မျာသကိုလူတစ်ညသမဟမလိုအပ်ပါ။

XPath ကို အသုံသပဌု၍ စာမျက်နဟာတစ်ခုနဟင့် အလုပ်လုပ်ခဌင်သ။

ဒီတော့ ကျလန်တော်တို့ ဝင်သဒိုသတစ်ခုဖလင့်ပဌီသ ဆိုက်ကို တင်လိုက်တယ်။ စျေသနဟုန်သနဟင့် အခဌာသအချက်အလက်မျာသကို ရယူရန် XPath နည်သပညာ သို့မဟုတ် CSS ရလေသချယ်မဟုမျာသကို အသုံသပဌုရန် လိုအပ်ပါသည်။ XPath နဲ့ ကပ်ဖို့ ဆုံသဖဌတ်ခဲ့ပဌီသ CSS Selectors တလေကို အသုံသပဌုဖို့ မလိုအပ်ဘူသလို့ ခံစာသရပေမယ့် အဲဒီအတိုင်သ လုပ်ဆောင်ဖို့ အတော်လေသ ဖဌစ်နိုင်တယ်။ XPath ကို အသုံသပဌု၍ စာမျက်နဟာတစ်ဝိုက်တလင် သလာသလာရန် ခက်ခဲနိုင်ပဌီသ ကျလန်ုပ်၌ ဖော်ပဌထာသသော နည်သပညာမျာသကို အသုံသပဌုလျဟင်ပင်၊ က စာမျက်နဟာကုဒ်မဟ သက်ဆိုင်ရာ identifiers မျာသကို ကူသယူခဌင်သ ပါ၀င်သည့် ဆောင်သပါသတလင်၊ ၎င်သသည် အမဟန်တကယ် လိုအပ်သော ဒဌပ်စင်မျာသကို ဝင်ရောက်ရန် အကောင်သဆုံသနည်သလမ်သ မဟုတ်ကဌောင်သ သဘောပေါက်ပါသည်။ စကာသမစပ်၊ က ကစာအုပ်သည် XPath နဟင့် CSS ရလေသပေသမဟုမျာသကို အသုံသပဌုသည့် စာမျက်နဟာမျာသနဟင့် လုပ်ဆောင်ခဌင်သဆိုင်ရာ အခဌေခံမျာသကို ကောင်သမလန်စလာဖော်ပဌချက်ပေသပါသည်။ ၎င်သသည် သက်ဆိုင်ရာ ဝဘ်ဒရိုက်ဗာနည်သလမ်သနဟင့် တူသည်။

Python - ခရီသသလာသရတာနဟစ်သက်သူတလေအတလက် ဈေသသက်သာတဲ့ လေယာဉ်လက်မဟတ်တလေကို ရဟာဖလေရာမဟာ လက်ထောက်တစ်ညသပါ။
ဒီတော့ bot ကို ဆက်ပဌီသ အလုပ်လုပ်ကဌရအောင်။ စျေသအသက်သာဆုံသ လက်မဟတ်မျာသကို ရလေသချယ်ရန် ပရိုဂရမ်၏ စလမ်သဆောင်ရည်ကို အသုံသပဌုကဌပါစို့။ အောက်ပါပုံတလင်၊ XPath ရလေသချယ်မဟုကုဒ်ကို အနီရောင်ဖဌင့် မီသမောင်သထိုသပဌထာသသည်။ ကုဒ်ကိုကဌည့်ရန်အတလက် သင်စိတ်ဝင်စာသသည့် စာမျက်နဟာအစိတ်အပိုင်သပေါ်တလင် ညာဖက်ကလစ်နဟိပ်ပဌီသ ပေါ်လာသည့်မီနူသမဟ စစ်ဆေသရေသအမိန့်ကို ရလေသချယ်ရန် လိုအပ်သည်။ ကအမိန့်ကို ကုဒ်ကဌည့်ရဟုသူတလင် ပဌသပဌီသ မီသမောင်သထိုသပဌမည့် ကုဒ်ကို မတူညီသော စာမျက်နဟာအစိတ်အပိုင်သမျာသအတလက် ခေါ်ဆိုနိုင်ပါသည်။

Python - ခရီသသလာသရတာနဟစ်သက်သူတလေအတလက် ဈေသသက်သာတဲ့ လေယာဉ်လက်မဟတ်တလေကို ရဟာဖလေရာမဟာ လက်ထောက်တစ်ညသပါ။
စာမျက်နဟာကုဒ်ကိုကဌည့်ပါ။

ကုဒ်မဟ ရလေသချယ်သူမျာသကို ကူသယူခဌင်သ၏ အာသနည်သချက်မျာသနဟင့် ပတ်သက်၍ ကျလန်ုပ်၏ ကျိုသကဌောင်သဆင်ခဌင်မဟုကို အတည်ပဌုနိုင်ရန်၊ အောက်ပါအင်္ဂါရပ်မျာသကို အာရုံစိုက်ပါ။

ကုဒ်ကို မိတ္တူကူသသောအခါ ကအရာသည် သင်ရရဟိသည် ။

//*[@id="wtKI-price_aTab"]/div[1]/div/div/div[1]/div/span/span

ကကဲ့သို့သောအရာတစ်ခုခုကိုကူသယူရန်အတလက်၊ သင်စိတ်ဝင်စာသသောကုဒ်၏ကဏ္ဍကိုညာဖက်ကလစ်နဟိပ်ပဌီသပေါ်လာသည့်မီနူသမဟ Copy> Copy XPath command ကိုရလေသချယ်ရန်လိုအပ်သည်။

ကသည်မဟာ စျေသအသက်သာဆုံသခလုတ်ကို ငါသတ်မဟတ်ရန်အသုံသပဌုခဲ့သည့်အရာဖဌစ်သည်-

cheap_results = ‘//a[@data-code = "price"]’

Python - ခရီသသလာသရတာနဟစ်သက်သူတလေအတလက် ဈေသသက်သာတဲ့ လေယာဉ်လက်မဟတ်တလေကို ရဟာဖလေရာမဟာ လက်ထောက်တစ်ညသပါ။
Command ကို ကော်ပီ > XPath ကို ကူသယူပါ။

ဒုတိယရလေသချယ်မဟုမဟာ ပိုမိုရိုသရဟင်သပုံရသည်မဟာ ထင်ရဟာသပါသည်။ အသုံသပဌုသောအခါတလင်၊ ၎င်သသည် attribute ပါရဟိသော element တစ်ခုကို ရဟာဖလေသည်။ data-code, တန်သတူ price. ပထမရလေသချယ်မဟုကိုအသုံသပဌုသောအခါ၊ အစိတ်အပိုင်သကိုရဟာဖလေသည်။ id နဟင့် ညီမျဟသည်။ wtKI-price_aTab၊ နဟင့် အစိတ်အပိုင်သသို့ XPath လမ်သကဌောင်သသည် ပုံရသည်။ /div[1]/div/div/div[1]/div/span/span. စာမျက်နဟာတစ်ခုသို့ ကကဲ့သို့သော XPath မေသမဌန်သမဟုတစ်ခုသည် လဟည့်ကလက်ကို လုပ်ဆောင်နိုင်သော်လည်သ တစ်ကဌိမ်သာ လုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။ အဲဒါကို အခုပဲ ပဌောနိုင်တယ်။ id စာမျက်နဟာကို နောက်တစ်ကဌိမ် တင်သည့်အခါတလင် ပဌောင်သလဲပါမည်။ အက္ခရာ အစီအစဥ် wtKI စာမျက်နဟာကို တင်တိုင်သ ဒိုင်သနမစ်ဖဌင့် ပဌောင်သလဲသည်၊ ထို့ကဌောင့် ၎င်သကို အသုံသပဌုသည့် ကုဒ်သည် နောက်စာမျက်နဟာကို ပဌန်လည်စတင်ပဌီသနောက် အသုံသမဝင်တော့ပါ။ ဒါကဌောင့် XPath ကို နာသလည်ဖို့ အချိန်အနည်သငယ်ယူပါ။ ကအသိပညာသည် သင့်အာသ ကောင်သမလန်စလာ အကျိုသပဌုလိမ့်မည်။

သို့သော်၊ XPath ရလေသပေသသူမျာသကို ကူသယူခဌင်သသည် ရိုသရိုသရဟင်သရဟင်သ ဆိုဒ်မျာသနဟင့် အလုပ်လုပ်ရာတလင် အသုံသဝင်နိုင်သည်၊ ၎င်သနဟင့် အဆင်ပဌေပါက ၎င်သနဟင့် ပတ်သက်၍ အမဟာသအယလင်သမရဟိပေ။

စာရင်သတစ်ခုအတလင်သ၊ စာကဌောင်သမျာသစလာဖဌင့် ရဟာဖလေမဟုရလဒ်အာသလုံသကို ရယူလိုပါက ယခု ဘာလုပ်ရမည်ကို စဉ်သစာသကဌည့်ကဌပါစို့။ အလလန်ရိုသရဟင်သပါသည်။ ရလဒ်တစ်ခုစီသည် class တစ်ခုပါရဟိသော object တစ်ခုအတလင်သဖဌစ်သည်။ resultWrapper. ရလဒ်အာသလုံသကို အောက်ဖော်ပဌပါပုံနဟင့် ဆင်တူသော အကလက်တစ်ခုတလင် လုပ်ဆောင်နိုင်သည်။

အထက်ဖော်ပဌပါမျာသကို နာသလည်ပါက၊ ကျလန်ုပ်တို့ခလဲခဌမ်သစိတ်ဖဌာမည့် ကုဒ်အမျာသစုကို အလလယ်တကူ နာသလည်နိုင်မည်ဖဌစ်ကဌောင်သ သတိပဌုသင့်သည်။ ကကုဒ်အလုပ်လုပ်သည်နဟင့်အမျဟ၊ ကျလန်ုပ်တို့သည် လမ်သကဌောင်သသတ်မဟတ်ခဌင်သယန္တရာသ (XPath) တစ်မျိုသမျိုသကို အသုံသပဌု၍ ကျလန်ုပ်တို့ လိုအပ်သည် (အမဟန်မဟာ၊ ရလဒ်ကို ထုပ်ပိုသထာသသည့် ဒဌပ်စင်) ကို ရယူသုံသစလဲပါသည်။ ကအရာသည် ဒဌပ်စင်၏ စာသာသကို ရယူပဌီသ ဒေတာဖတ်ရဟုနိုင်သည့် အရာဝတ္ထုတစ်ခုတလင် ထာသရန်အလို့ငဟာ ၎င်သကို လုပ်ဆောင်သည် (ပထမအသုံသပဌုသည် flight_containersထို့နောက် - flights_list).

Python - ခရီသသလာသရတာနဟစ်သက်သူတလေအတလက် ဈေသသက်သာတဲ့ လေယာဉ်လက်မဟတ်တလေကို ရဟာဖလေရာမဟာ လက်ထောက်တစ်ညသပါ။
ပထမစာကဌောင်သသုံသကဌောင်သကို ပဌသထာသပဌီသ ကျလန်ုပ်တို့လိုအပ်သမျဟကို ရဟင်သရဟင်သလင်သလင်သမဌင်နိုင်သည်။ သို့သော်၊ ကျလန်ုပ်တို့တလင် သတင်သအချက်အလက်ရရဟိရန် ပိုမိုစိတ်ဝင်စာသဖလယ်နည်သလမ်သမျာသရဟိသည်။ ကျလန်ုပ်တို့သည် ဒဌပ်စင်တစ်ခုစီမဟ ဒေတာကို သီသခဌာသစီယူရန် လိုအပ်သည်။

အလုပ်သလာသပါ။

လုပ်ဆောင်ချက်တစ်ခုရေသရန် အလလယ်ကူဆုံသနည်သလမ်သမဟာ အပိုရလဒ်မျာသကို တင်ရန်ဖဌစ်သည်၊ ထို့ကဌောင့် ကျလန်ုပ်တို့ စတင်ပါမည်။ စစ်ဆေသခဌင်သဆီသို့ ညသတည်စေသော ဝန်ဆောင်မဟုတလင် သံသယမျာသ မပဌဘဲ ပရိုဂရမ်မဟ ရရဟိသည့် ပျံသန်သမဟု အရေအတလက်ကို အမျာသဆုံသ ချဲ့ထလင်လိုသည်၊ ထို့ကဌောင့် စာမျက်နဟာကို ပဌသသည့်အခါတိုင်သ Load more results ခလုတ်ကို နဟိပ်လိုက်ပါသည်။ ကကုဒ်တလင်၊ သင်သည် block ကိုအာရုံစိုက်သင့်သည်။ tryတခါတရံမဟာ ခလုတ်ကို ကောင်သကောင်သမဖလင့်နိုင်လို့ ထည့်ပေသလိုက်တာပါ။ ၎င်သကိုသင်ကဌုံတလေ့ရပါက၊ လုပ်ဆောင်ချက်ကုဒ်တလင် ကလုပ်ဆောင်ချက်ကိုခေါ်ဆိုမဟုမျာသကို မဟတ်ချက်ပေသပါ။ start_kayakအောက်တလင်ဖော်ပဌထာသသောကဌည့်ရဟုပါမည်။

# Загрузка бПльшегП кПлОчества результатПв Ўля тПгП, чтПбы ЌаксОЌОзОрПвать ПбъёЌ сПбОраеЌых ЎаММых
def load_more():
    try:
        more_results = '//a[@class = "moreButton"]'
        driver.find_element_by_xpath(more_results).click()
        # ВывПЎ этОх заЌетПк в хПЎе рабПты прПграЌЌы пПЌПгает ЌМе быстрП выясМОть тП, чеЌ ПМа заМята
        print('sleeping.....')
        sleep(randint(45,60))
    except:
        pass

ယခု ကလုပ်ဆောင်ချက်ကို အချိန်အတော်ကဌာ ခလဲခဌမ်သစိတ်ဖဌာပဌီသနောက် (တစ်ခါတစ်ရံ ကျလန်တော် သယ်ဆောင်သလာသနိုင်ပါတယ်)၊ ကျလန်ုပ်တို့သည် စာမျက်နဟာကို ခဌစ်ထုတ်မည့် လုပ်ဆောင်ချက်တစ်ခုကို ကဌေညာရန် အဆင်သင့်ဖဌစ်နေပါပဌီ။

အောက်ပါ function ဟုခေါ်သော လိုအပ်သောအရာအမျာသစုကို ကျလန်ုပ်စုဆောင်သထာသပဌီသဖဌစ်သည်။ page_scrape. တစ်ခါတစ်ရံတလင် ပဌန်လာသောလမ်သကဌောင်သဒေတာကို ပေါင်သစပ်ထာသသောကဌောင့် ၎င်သကို ခလဲခဌာသရန် ရိုသရဟင်သသောနည်သလမ်သကို အသုံသပဌုပါသည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်သည် ကိန်သရဟင်မျာသကို ပထမအကဌိမ်အသုံသပဌုသောအခါ section_a_list О section_b_list. ကျလန်ုပ်တို့၏လုပ်ဆောင်ချက်သည် ဒေတာဘောင်ကို ပဌန်ပေသသည်။ flights_dfကအရာက ကျလန်ုပ်တို့အာသ မတူညီသော ဒေတာအမျိုသအစာသခလဲခဌင်သနည်သလမ်သမျာသမဟ ရရဟိသောရလဒ်မျာသကို ခလဲခဌာသနိုင်ပဌီသ နောက်ပိုင်သတလင် ၎င်သတို့ကို ပေါင်သစပ်နိုင်သည်။

def page_scrape():
    """This function takes care of the scraping part"""
    
    xp_sections = '//*[@class="section duration"]'
    sections = driver.find_elements_by_xpath(xp_sections)
    sections_list = [value.text for value in sections]
    section_a_list = sections_list[::2] # так Ќы разЎеляеЌ ОМфПрЌацОю П Ўвух пПлётах
    section_b_list = sections_list[1::2]
    
    # ЕслО вы МаткМулОсь Ма reCaptcha, ваЌ ЌПжет пПМаЎПбОться чтП-тП преЎпрОМять.
    # О тПЌ, чтП чтП-тП пПшлП Ме так, вы узМаете ОсхПЎя Оз тПгП, чтП вышепрОвеЎёММые спОскО пусты
    # этП выражеМОе if пПзвПляет завершОть рабПту прПграЌЌы ОлО сЎелать ещё чтП-МОбуЎь
    # тут ЌПжМП прОПстаМПвОть рабПту, чтП пПзвПлОт ваЌ прПйтО прПверку О прПЎПлжОть скрапОМг
    # я ОспПльзую тут SystemExit так как хПчу прПтестОрПвать всё с саЌПгП Мачала
    if section_a_list == []:
        raise SystemExit
    
    # Я буЎу ОспПльзПвать букву A Ўля ухПЎящОх рейсПв О B Ўля прОбывающОх
    a_duration = []
    a_section_names = []
    for n in section_a_list:
        # ППлучаеЌ вреЌя
        a_section_names.append(''.join(n.split()[2:5]))
        a_duration.append(''.join(n.split()[0:2]))
    b_duration = []
    b_section_names = []
    for n in section_b_list:
        # ППлучаеЌ вреЌя
        b_section_names.append(''.join(n.split()[2:5]))
        b_duration.append(''.join(n.split()[0:2]))

    xp_dates = '//div[@class="section date"]'
    dates = driver.find_elements_by_xpath(xp_dates)
    dates_list = [value.text for value in dates]
    a_date_list = dates_list[::2]
    b_date_list = dates_list[1::2]
    # ППлучаеЌ ЎеМь МеЎелО
    a_day = [value.split()[0] for value in a_date_list]
    a_weekday = [value.split()[1] for value in a_date_list]
    b_day = [value.split()[0] for value in b_date_list]
    b_weekday = [value.split()[1] for value in b_date_list]
    
    # ППлучаеЌ цеМы
    xp_prices = '//a[@class="booking-link"]/span[@class="price option-text"]'
    prices = driver.find_elements_by_xpath(xp_prices)
    prices_list = [price.text.replace('$','') for price in prices if price.text != '']
    prices_list = list(map(int, prices_list))

    # stops - этП бПльшПй спОсПк, в кПтПрПЌ первый фрагЌеМт путО МахПЎОтся пП чётМПЌу ОМЎексу, а втПрПй - пП МечётМПЌу
    xp_stops = '//div[@class="section stops"]/div[1]'
    stops = driver.find_elements_by_xpath(xp_stops)
    stops_list = [stop.text[0].replace('n','0') for stop in stops]
    a_stop_list = stops_list[::2]
    b_stop_list = stops_list[1::2]

    xp_stops_cities = '//div[@class="section stops"]/div[2]'
    stops_cities = driver.find_elements_by_xpath(xp_stops_cities)
    stops_cities_list = [stop.text for stop in stops_cities]
    a_stop_name_list = stops_cities_list[::2]
    b_stop_name_list = stops_cities_list[1::2]
    
    # свеЎеМОя П кПЌпаМОО-перевПзчОке, вреЌя ПтправлеМОя О прОбытОя Ўля ПбПОх рейсПв
    xp_schedule = '//div[@class="section times"]'
    schedules = driver.find_elements_by_xpath(xp_schedule)
    hours_list = []
    carrier_list = []
    for schedule in schedules:
        hours_list.append(schedule.text.split('n')[0])
        carrier_list.append(schedule.text.split('n')[1])
    # разЎеляеЌ свеЎеМОя П вреЌеМО О П перевПзчОках ЌежЎу рейсаЌО a О b
    a_hours = hours_list[::2]
    a_carrier = carrier_list[1::2]
    b_hours = hours_list[::2]
    b_carrier = carrier_list[1::2]

    
    cols = (['Out Day', 'Out Time', 'Out Weekday', 'Out Airline', 'Out Cities', 'Out Duration', 'Out Stops', 'Out Stop Cities',
            'Return Day', 'Return Time', 'Return Weekday', 'Return Airline', 'Return Cities', 'Return Duration', 'Return Stops', 'Return Stop Cities',
            'Price'])

    flights_df = pd.DataFrame({'Out Day': a_day,
                               'Out Weekday': a_weekday,
                               'Out Duration': a_duration,
                               'Out Cities': a_section_names,
                               'Return Day': b_day,
                               'Return Weekday': b_weekday,
                               'Return Duration': b_duration,
                               'Return Cities': b_section_names,
                               'Out Stops': a_stop_list,
                               'Out Stop Cities': a_stop_name_list,
                               'Return Stops': b_stop_list,
                               'Return Stop Cities': b_stop_name_list,
                               'Out Time': a_hours,
                               'Out Airline': a_carrier,
                               'Return Time': b_hours,
                               'Return Airline': b_carrier,                           
                               'Price': prices_list})[cols]
    
    flights_df['timestamp'] = strftime("%Y%m%d-%H%M") # вреЌя сбПра ЎаММых
    return flights_df

ကုဒ်ကို နာသလည်နိုင်စေရန် ကိန်သရဟင်မျာသကို အမည်ပေသထာသပါသည်။ ကိန်သရဟင်မျာသဖဌင့် စတင်သည်ကို သတိရပါ။ a မဂ်၏ ပထမအဆင့်နဟင့် သက်ဆိုင်သည်။ b - ဒုတိယ။ နောက်လုပ်ဆောင်ချက်တစ်ခုသို့ ဆက်သလာသကဌပါစို့။

အထောက်အပံ့ ယန္တရာသမျာသ

ယခု ကျလန်ုပ်တို့တလင် နောက်ထပ် ရဟာဖလေမဟုရလဒ်မျာသကို တင်ရန်နဟင့် ထိုရလဒ်မျာသကို လုပ်ဆောင်ရန် လုပ်ဆောင်နိုင်သည့် လုပ်ဆောင်ချက်တစ်ခုရဟိသည်။ ကလုပ်ဆောင်ချက်နဟစ်ခုသည် သင်ကိုယ်တိုင်ဖလင့်နိုင်သော စာမျက်နဟာမျာသကို ခဌစ်ရန် လိုအပ်သည့်အရာအာသလုံသကို ပေသစလမ်သနိုင်သောကဌောင့် ကဆောင်သပါသသည် ကနေရာတလင် ပဌီသဆုံသသလာသနိုင်ပါသည်။ ဒါပေမယ့် အထက်မဟာ ဆလေသနလေသခဲ့တဲ့ အရန်ယန္တရာသအချို့ကို ကျလန်တော်တို့ မစဉ်သစာသသေသပါဘူသ။ ဥပမာအာသဖဌင့်၊ ကသည်မဟာ အီသမေသလ်ပို့ခဌင်သအတလက် ကုဒ်နဟင့် အခဌာသအရာမျာသဖဌစ်သည်။ ကအရာအာသလုံသကို function တလင်တလေ့နိုင်သည်။ start_kayakယခုကျလန်ုပ်တို့စဉ်သစာသပါမည်။

ကလုပ်ဆောင်ချက်သည် မဌို့မျာသနဟင့် ရက်စလဲမျာသအကဌောင်သ အချက်အလက် လိုအပ်သည်။ ကအချက်အလက်ကို အသုံသပဌု၍ ကိန်သရဟင်တစ်ခုတလင် လင့်ခ်တစ်ခုဖလဲ့စည်သသည်။ kayakရဟာဖလေမဟု၏အကောင်သဆုံသကိုက်ညီမဟုအလိုက် ရဟာဖလေမဟုရလဒ်မျာသပါရဟိသော စာမျက်နဟာတစ်ခုဆီသို့ သင့်အာသ ခေါ်ဆောင်သလာသရန်အတလက် အသုံသပဌုသော၊ ပထမပိုင်သဖဌတ်ပိုင်သပဌီသနောက်၊ ကျလန်ုပ်တို့သည် စာမျက်နဟာ၏ထိပ်ရဟိ ဇယာသရဟိစျေသနဟုန်သမျာသနဟင့် လုပ်ဆောင်ပါမည်။ ပဌောရရင် အနိမ့်ဆုံသ လက်မဟတ်ဈေသနဟုန်သနဲ့ ပျမ်သမျဟစျေသနဟုန်သကို ကျလန်တော်တို့ ရဟာတလေ့ပါလိမ့်မယ်။ ကအရာအာသလုံသကို ဆိုက်မဟ ထုတ်ပဌန်သော ခန့်မဟန်သချက်နဟင့်အတူ အီသမေသလ်ဖဌင့် ပေသပို့ပါမည်။ စာမျက်နဟာပေါ်တလင်၊ သက်ဆိုင်ရာဇယာသသည် ဘယ်ဘက်အပေါ်ထောင့်တလင် ရဟိသင့်သည်။ ကကိစ္စတလင် ဇယာသသည် စာမျက်နဟာပေါ်တလင် မပဌနိုင်သောကဌောင့် ကဇယာသနဟင့် အလုပ်လုပ်ခဌင်သသည် အတိအကျရက်စလဲမျာသကို အသုံသပဌု၍ ရဟာဖလေရာတလင် အမဟာသအယလင်သဖဌစ်စေနိုင်သည်။

def start_kayak(city_from, city_to, date_start, date_end):
    """City codes - it's the IATA codes!
    Date format -  YYYY-MM-DD"""
    
    kayak = ('https://www.kayak.com/flights/' + city_from + '-' + city_to +
             '/' + date_start + '-flexible/' + date_end + '-flexible?sort=bestflight_a')
    driver.get(kayak)
    sleep(randint(8,10))
    
    # ОМПгЎа пПявляется всплывающее ПкМП, Ўля прПверкО Ма этП О егП закрытОя ЌПжМП вПспПльзПваться блПкПЌ try
    try:
        xp_popup_close = '//button[contains(@id,"dialog-close") and contains(@class,"Button-No-Standard-Style close ")]'
        driver.find_elements_by_xpath(xp_popup_close)[5].click()
    except Exception as e:
        pass
    sleep(randint(60,95))
    print('loading more.....')
    
#     load_more()
    
    print('starting first scrape.....')
    df_flights_best = page_scrape()
    df_flights_best['sort'] = 'best'
    sleep(randint(60,80))
    
    # ВПзьЌёЌ саЌую МОзкую цеМу Оз таблОцы, распПлПжеММПй в верхМей частО страМОцы
    matrix = driver.find_elements_by_xpath('//*[contains(@id,"FlexMatrixCell")]')
    matrix_prices = [price.text.replace('$','') for price in matrix]
    matrix_prices = list(map(int, matrix_prices))
    matrix_min = min(matrix_prices)
    matrix_avg = sum(matrix_prices)/len(matrix_prices)
    
    print('switching to cheapest results.....')
    cheap_results = '//a[@data-code = "price"]'
    driver.find_element_by_xpath(cheap_results).click()
    sleep(randint(60,90))
    print('loading more.....')
    
#     load_more()
    
    print('starting second scrape.....')
    df_flights_cheap = page_scrape()
    df_flights_cheap['sort'] = 'cheap'
    sleep(randint(60,80))
    
    print('switching to quickest results.....')
    quick_results = '//a[@data-code = "duration"]'
    driver.find_element_by_xpath(quick_results).click()  
    sleep(randint(60,90))
    print('loading more.....')
    
#     load_more()
    
    print('starting third scrape.....')
    df_flights_fast = page_scrape()
    df_flights_fast['sort'] = 'fast'
    sleep(randint(60,80))
    
    # СПхраМеМОе МПвПгП фрейЌа в Excel-файл, ОЌя кПтПрПгП Птражает гПрПЎа О Ўаты
    final_df = df_flights_cheap.append(df_flights_best).append(df_flights_fast)
    final_df.to_excel('search_backups//{}_flights_{}-{}_from_{}_to_{}.xlsx'.format(strftime("%Y%m%d-%H%M"),
                                                                                   city_from, city_to, 
                                                                                   date_start, date_end), index=False)
    print('saved df.....')
    
    # МПжМП слеЎОть за теЌ, как прПгМПз, выЎаваеЌый сайтПЌ, сППтМПсОтся с реальМПстью
    xp_loading = '//div[contains(@id,"advice")]'
    loading = driver.find_element_by_xpath(xp_loading).text
    xp_prediction = '//span[@class="info-text"]'
    prediction = driver.find_element_by_xpath(xp_prediction).text
    print(loading+'n'+prediction)
    
    # ОМПгЎа в переЌеММПй loading Пказывается эта стрПка, кПтПрая, пПзже, вызывает прПблеЌы с ПтправкПй пОсьЌа
    # еслО этП прПзПшлП - ЌеМяеЌ её Ма "Not Sure"
    weird = '¯_(ツ)_/¯'
    if loading == weird:
        loading = 'Not sure'
    
    username = '[email protected]'
    password = 'YOUR PASSWORD'

    server = smtplib.SMTP('smtp.outlook.com', 587)
    server.ehlo()
    server.starttls()
    server.login(username, password)
    msg = ('Subject: Flight Scrapernn
Cheapest Flight: {}nAverage Price: {}nnRecommendation: {}nnEnd of message'.format(matrix_min, matrix_avg, (loading+'n'+prediction)))
    message = MIMEMultipart()
    message['From'] = '[email protected]'
    message['to'] = '[email protected]'
    server.sendmail('[email protected]', '[email protected]', msg)
    print('sent email.....')

Outlook အကောင့် (hotmail.com) ကို အသုံသပဌု၍ က script ကို စမ်သသပ်ခဲ့သည်။ Gmail အကောင့်တစ်ခုဖဌင့် မဟန်ကန်စလာ အလုပ်လုပ်ရန် ၎င်သကို ကျလန်ုပ် မစမ်သသပ်ရသေသပါ၊ ကအီသမေသလ်စနစ်သည် အတော်လေသ ရေပန်သစာသသော်လည်သ ဖဌစ်နိုင်သော ရလေသချယ်စရာမျာသစလာရဟိပါသည်။ အကယ်၍ သင်သည် Hotmail အကောင့်ကို အသုံသပဌုပါက အရာအာသလုံသ အဆင်ပဌေစေရန်အတလက် သင့်ဒေတာကို ကုဒ်ထဲသို့ ထည့်ရန်သာ လိုအပ်ပါသည်။

ကလုပ်ဆောင်ချက်အတလက် ကုဒ်၏ သတ်မဟတ်ထာသသော ကဏ္ဍမျာသတလင် လုပ်ဆောင်နေသည်မျာသကို အတိအကျ နာသလည်လိုပါက ၎င်သတို့ကို ကူသယူပဌီသ ၎င်သတို့နဟင့် စမ်သသပ်နိုင်ပါသည်။ ကုဒ်ကို စမ်သသပ်ခဌင်သသည် ၎င်သကို အမဟန်တကယ် နာသလည်ရန် တစ်ခုတည်သသော နည်သလမ်သဖဌစ်သည်။

အဆင်သင့်ဖဌစ်နေပါပဌီ။

ယခုကျလန်ုပ်တို့ပဌောခဲ့သမျဟအာသလုံသပဌီသပါပဌီ၊ ကျလန်ုပ်တို့၏လုပ်ဆောင်ချက်မျာသကိုခေါ်ဆိုသောရိုသရဟင်သသော loop တစ်ခုကိုဖန်တီသနိုင်ပါပဌီ။ Script သည် မဌို့မျာသနဟင့် ရက်စလဲမျာသအကဌောင်သ အသုံသပဌုသူထံမဟ အချက်အလက်ကို တောင်သဆိုပါသည်။ script ကို စဉ်ဆက်မပဌတ် ပဌန်လည်စတင်ခဌင်သဖဌင့် စမ်သသပ်သောအခါ၊ သင်သည် ကဒေတာကို အချိန်တိုင်သတလင် ကိုယ်တိုင်ထည့်သလင်သလိုမည်မဟုတ်ပါ၊ ထို့ကဌောင့် စမ်သသပ်ချိန်အတလက် သက်ဆိုင်ရာ စာကဌောင်သမျာသကို ၎င်သတို့အောက်ရဟိ လိုအပ်ချက်မျာသကို မဟတ်ချက်မပေသဘဲ မဟတ်ချက်ပေသခဌင်သဖဌင့် မဟတ်ချက်ပေသနိုင်ပါသည်။ script ကို hardcode လုပ်ထာသသည်။

city_from = input('From which city? ')
city_to = input('Where to? ')
date_start = input('Search around which departure date? Please use YYYY-MM-DD format only ')
date_end = input('Return when? Please use YYYY-MM-DD format only ')

# city_from = 'LIS'
# city_to = 'SIN'
# date_start = '2019-08-21'
# date_end = '2019-09-07'

for n in range(0,5):
    start_kayak(city_from, city_to, date_start, date_end)
    print('iteration {} was complete @ {}'.format(n, strftime("%Y%m%d-%H%M")))
    
    # ЖЎёЌ 4 часа
    sleep(60*60*4)
    print('sleep finished.....')

ကအရာသည် ဇာတ်ညလဟန်သ၏ စမ်သသပ်ပဌေသပုံဖဌစ်သည်။
Python - ခရီသသလာသရတာနဟစ်သက်သူတလေအတလက် ဈေသသက်သာတဲ့ လေယာဉ်လက်မဟတ်တလေကို ရဟာဖလေရာမဟာ လက်ထောက်တစ်ညသပါ။
Script ၏စမ်သသပ်မဟု

ရလဒ်မျာသကို

ဒီလောက်ထိအောင်နိုင်ခဲ့ရင် ဂုဏ်ယူပါတယ်။ ကျလန်ုပ်သည် ၎င်သကို ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်ရန် နည်သလမ်သမျာသစလာကို တလေ့မဌင်နိုင်သော်လည်သ ယခု သင့်တလင် အလုပ်လုပ်သော ဝဘ်ခဌစ်ကိရိယာတစ်ခု ရဟိနေပဌီဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ ၎င်သကို အီသမေသလ်မျာသအစာသ စာသာသမက်ဆေ့ခ်ျပေသပို့နိုင်ရန် Twilio နဟင့် ပေါင်သစပ်နိုင်သည်။ ဆာဗာမျာသစလာမဟ ရလဒ်မျာသကို တစ်ပဌိုင်နက် လက်ခံရရဟိရန် VPN သို့မဟုတ် အခဌာသတစ်ခုခုကို သင်အသုံသပဌုနိုင်ပါသည်။ ဝဘ်ဆိုက်အသုံသပဌုသူကို စစ်ဆေသရာတလင်လည်သ အခါအာသလျော်စလာ ပေါ်ပေါက်လာသော ပဌဿနာတစ်ခုလည်သ ရဟိသော်လည်သ ၎င်သပဌဿနာကိုလည်သ ဖဌေရဟင်သနိုင်သည်။ မည်သို့ပင်ဆိုစေကာမူ ယခု သင့်တလင် သင်ဆန္ဒရဟိလျဟင် ချဲ့ထလင်နိုင်သော အခဌေခံတစ်ခုရဟိသည်။ ဥပမာအာသဖဌင့်၊ Excel ဖိုင်ကို အီသမေသလ်သို့ ပူသတလဲပါဖိုင်အဖဌစ် အသုံသပဌုသူထံ ပေသပို့ကဌောင်သ သေချာပါစေ။

Python - ခရီသသလာသရတာနဟစ်သက်သူတလေအတလက် ဈေသသက်သာတဲ့ လေယာဉ်လက်မဟတ်တလေကို ရဟာဖလေရာမဟာ လက်ထောက်တစ်ညသပါ။

စာရင်သသလင်သအသုံသပဌုသူမျာသသာ စစ်တမ်သတလင် ပါဝင်နိုင်ပါသည်။ ဆိုင်သအင်လုပ်ခဌင်သ, ကျေသဇူသပဌု။

ဝဘ်ခဌစ်ခဌင်သနည်သပညာမျာသကို သင်အသုံသပဌုပါသလာသ။

  • ထို

  • အဘယ်သူမျဟမ

အသုံသပဌုသူ ၁၆ ဩှ မဲပေသခဲ့သည်။ အသုံသပဌုသူ 8 ဩှ ရဟောင်ခဲ့သည်။

source: www.habr.com

မဟတ်ချက် Add