Semalt မှသင်ခန်းစာ။ Python တွင် Web Scraping

ငါမကြာသေးမီက KinoPoisk (ရုရှားဗားရှင်း IMDB) သို့လည်ပတ်ခဲ့ပြီးနှစ်များတစ်လျှောက်ရုပ်ရှင် ၁၀၀၀ ကျော်ကိုအဆင့်သတ်မှတ်နိုင်ခဲ့သည်ကိုတွေ့ရှိခဲ့သည် ဒီအချက်အလက်တွေကိုအသေးစိတ်လေ့လာခြင်းဟာစိတ်ဝင်စားဖို့ကောင်းလိမ့်မယ်လို့ကျွန်တော်ထင်ခဲ့တယ် - အချိန်ကြာလာတာနဲ့အမျှကျွန်ုပ်၏ရုပ်ရှင်အရသာများပြောင်းလဲသွားပြီလား။ ဘယ်နှစ်ရာသီတွေမှာရုပ်ရှင်တွေပိုကြည့်နေတာလဲ။

လှပသောဂရပ်ဖစ်များကိုကျွန်ုပ်တို့မဆန်းစစ်မီတည်ဆောက်ခြင်းမပြုမီဒေတာရယူရန်လိုအပ်သည်။ ကံမကောင်းစွာဖြင့်ဝန်ဆောင်မှုများစွာတွင် public API မရှိပါ။ ထို့ကြောင့်သင်သည်သင်၏ sleeves များကိုလှိမ့်ပြီး html စာမျက်နှာများကိုခွဲခြမ်းစိတ်ဖြာရန်လိုအပ်သည်။

ဤဆောင်းပါးသည် Web Scrapping ကိုမည်သို့အသုံးပြုရမည်ကိုအမြဲလေ့လာလိုသောသူများအတွက်ရည်ရွယ်သည်။ သို့သော်၎င်းကိုသူတို့လက်ဖြင့်မရသို့မဟုတ်မည်သည့်နေရာတွင်စတင်ရမည်ကိုမသိပါ။

Task

ကျွန်ုပ်တို့၏တာ ၀ န်မှာရုပ်ရှင်နှင့်ပတ်သက်သည့်အချက်အလက်: ရုပ်ရှင်၏ခေါင်းစဉ်၊ ကြည့်ရှုမည့်နေ့နှင့်အချိန်၊ အသုံးပြုသူအဆင့်သတ်မှတ်ချက်တို့ဖြစ်သည်။

တကယ်တော့ငါတို့အလုပ်ကိုအဆင့်နှစ်ဆင့်လုပ်မယ်။

အဆင့် ၁: html စာမျက်နှာများကိုကူးယူသိမ်းဆည်းပါ

အဆင့် ၂: html ကိုနောက်ထပ်ခွဲခြမ်းစိတ်ဖြာရန်သင့်လျော်သောပုံစံဖြင့် (csv, json, pandas dataframe စသည်ဖြင့်) parse

တူရိယာ

http-request များကိုပေးပို့ရန် python-libraries များစွာရှိသည်။ အကျော်ကြားဆုံးနှင့်အလွန်အသုံးဝင်သောတစ်ခုတောင်းဆိုမှုများဖြစ်ပါတယ်။

html parsing အတွက်စာကြည့်တိုက်တစ်ခုကိုရွေးချယ်ရန်လည်းလိုအပ်သည်။

BeatifulSoup, lxml

ဤရွေ့ကား html ကိုခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်၎င်းတို့ထဲမှတစ်ခုကိုရွေးချယ်ခြင်းသည်လူကြိုက်များသောစာကြည့်တိုက်နှစ်ခုဖြစ်သည်။ ထို့အပြင်ဤစာကြည့်တိုက်များသည်တစ် ဦး နှင့်တစ် ဦး နီးကပ်စွာချိတ်ဆက်ထားသည်။ BeautifulSoup သည်အရှိန်မြှင့်ရန်အတွက်ပြည်တွင်း parser အဖြစ် lxml ကိုစတင်အသုံးပြုခဲ့ပြီး lxml တွင် soupparser module တစ်ခုထည့်သွင်းခဲ့သည်။ ချဉ်းကပ်နည်းများကိုနှိုင်းယှဉ်ရန် BeautifulSoup ဖြင့်အချက်အလက်များကိုခွဲခြမ်းစိတ်ဖြာပြီး lxml.html module ရှိ XPath selector များကိုအသုံးပြုပါမည်။

ဒေတာကိုဒေါင်းလုပ်ဆွဲခြင်း

ဒေတာကိုစတင်ဒေါင်းလုပ်လုပ်ကြပါစို့။ ပထမ ဦး စွာစာမျက်နှာအား url ဖြင့်ရယူပြီး local file တစ်ခုထဲသို့သိမ်းဆည်းပါ။

ကျွန်ုပ်တို့ရရှိသောဖိုင်ကိုဖွင့်လိုက်သည်နှင့်၎င်းသည်မလွယ်ကူကြောင်းတွေ့ရသည်။ ဆိုက်သည်ကျွန်ုပ်တို့ကိုစက်ရုပ်ဟုသတ်မှတ်ပြီးဒေတာကိုပြလိမ့်မည်မဟုတ်။

ဆိုက်အလုပ်လုပ်ပုံကိုရှာကြည့်ရအောင်

ဆိုက်မှသတင်းအချက်အလက်ရယူရာတွင်ပြသနာမရှိပါ။ သူကတောင်းဆိုမှုကိုဘယ်လောက်တိတိကျကျပို့တယ်ဆိုတာကြည့်ရအောင်။ ထိုသို့ပြုလုပ်ရန်ကျွန်ုပ်တို့သည် Browser ("ဤအတွက် Firebug ကိုသုံးသည်") တွင် "Developer Tools" ရှိ "Network" panel ကိုအသုံးပြုသည်၊ များသောအားဖြင့်ကျွန်ုပ်တို့လိုအပ်သောတောင်းဆိုချက်သည်အရှည်ဆုံးဖြစ်သည်။

ကျွန်ုပ်တို့မြင်တွေ့ရသည့်အတိုင်းဘရောက်ဇာသည် UserAgent, cookie နှင့်အခြား parameters များကိုခေါင်းစီးများသို့လည်းပို့သည်။ ပထမ ဦး စွာ UserAgent ကိုမှန်ကန်သောခေါင်းစဉ်သို့ပို့ရန်ကျွန်ုပ်တို့ကြိုးစားရမည်။

ဒီတစ်ကြိမ်မှာတော့ကျွန်တော်တို့အောင်မြင်နေပြီ၊ လိုအပ်တဲ့အချက်အလက်တွေလည်းရပြီ။ သတိပြုသင့်သည်မှာတစ်ခါတစ်ရံတွင် site သည် cookie ၏တရားဝင်မှုကိုစစ်ဆေးသည်။ ၎င်းမှာ Requests library မှ session များကကူညီလိမ့်မည်။

အားလုံးနှုန်းထားများကို download လုပ်ပါ

ယခုကျွန်ုပ်တို့သည်တစ်စာမျက်နှာကိုနှုန်းထားများဖြင့်သိမ်းနိုင်ပြီ။ သို့သော်များသောအားဖြင့်အသုံးပြုသူတွင်နှုန်းထားများစွာရှိပြီးစာမျက်နှာများအားလုံးကိုဖြတ်သန်းရန်လိုအပ်သည်။ ကျွန်ုပ်တို့ကိုစိတ်ဝင်စားသောစာမျက်နှာနံပါတ်သည် url သို့တိုက်ရိုက်လွှဲပြောင်းရန်လွယ်ကူသည်။

Html မှအချက်အလက်ကောက်ယူခြင်း

ယခု html မှဒေတာစုဆောင်းမှုကိုတိုက်ရိုက်ရယူကြပါစို့။ html စာမျက်နှာမည်သို့တည်ဆောက်သည်ကိုနားလည်ရန်အလွယ်ကူဆုံးနည်းလမ်းမှာ browser အတွင်းရှိ "Inspect element" function ကိုသုံးခြင်းဖြစ်သည်။ ဤကိစ္စတွင်အရာအားလုံးသည်အလွန်လွယ်ကူသည်။ နှုန်းထားများရှိသောစားပွဲတစ်ခုလုံးသည်အမှတ်အသားဖြစ်သည်။ ဤ node ကိုရွေးချယ်ပါ။

bs4 မှ BeautifulSoup ကိုတင်သွင်းသည်

lxml တင်သွင်းမှု html မှ

# လှပသောဟင်းချို

ဟင်းချို = သာယာသောပန်းချီပြပွဲ (စာသား)

film_list = soup.find ('div', ('class': 'profileFilmsList'))

# lxml

tree = html.fromstring (စာသား)

film_list_lxml = tree.xpath ('// div [@class =' 'profileFilmList' ']') [0]

ရုရှားရုပ်ရှင်ခေါင်းစဉ်နှင့်ရုပ်ရှင်စာမျက်နှာသို့ချိတ်ဆက်ဆွဲခြင်း (စာသားနှင့် attribute ၏တန်ဖိုးမည်သို့ရရှိနိုင်ပုံကို) မည်သို့ဆွဲထုတ်ရမည်ကိုလေ့လာကြပါစို့။

အင်္ဂလိပ်လိုရေးထားတဲ့ခေါင်းစဉ်ကိုထုတ်ချင်တယ်ဆိုရင် "nameRus" ကို "nameEng" ကိုပြောင်းလိုက်ပါ။

ရလဒ်များ

ကျွန်ုပ်တို့သည်ဝက်ဘ်ဆိုက်များကိုမည်သို့ခွဲခြမ်းစိတ်ဖြာရမည်၊ စာကြည့်တိုက်တောင်းဆိုမှုများ၊ BeautifulSoup နှင့် lxml တို့နှင့်ရင်းနှီးကျွမ်းဝင်လာပြီး KinoPoisk တွင်တွေ့မြင်ခဲ့ရသောရုပ်ရှင်များကိုနောက်ထပ်ခွဲခြမ်းစိတ်ဖြာရန်သင့်လျော်သောအချက်အလက်များရရှိခဲ့သည်။