Python-da selendan foydalangan holda eng yaxshi ma'lumotlarni qirqish amaliyotlari

Veb-qirqish uchun selen

Selenium brauzerni avtomatlashtirish kutubxonasidir. Ko'pincha veb-ilovalarni sinab ko'rish uchun ishlatiladigan Selenium brauzer bilan o'zaro aloqani avtomatlashtirishni talab qiladigan har qanday vazifa uchun ishlatilishi mumkin. Bunga web-scraping kiradi.

Quyidagi o'quv qo'llanma selen yordamida veb-qirqish bo'yicha eng yaxshi amaliyotlar bo'yicha foydalanuvchi qo'llanmasi bo'ladi. Men o'zimning 5 ta eng yaxshi maslahatlarimni sanab o'tdim, ular foydalanuvchi so'ragan har qanday ma'lumotlarni iloji boricha kamroq kod bilan Python yordamida iloji boricha samarali ravishda qirib tashlashga yordam beradi.

Maqsad:

BBC yangiliklaridan Koronavirus global sarlavhalarini olish uchun.

Old shartlar

Ushbu qo'llanmani bajarish uchun sizga kerak bo'ladi:

  1. Selenium veb drayverini yuklab oling. Chrome drayveri Chrome bilan ishlash uchun ishlatilishi mumkin va "bu erda" mavjud.
  2. pip install selenium

Selen bo'yicha 5 ta eng yaxshi amaliyot bo'yicha maslahatlar

1-maslahat: veb-drayverni bajariladigan faylni PATH-ga joylashtiring

Veb-qirqish vazifamizni boshlash uchun avval quyidagi sahifaga o'tishimiz kerak, "https://www.bbc.co.uk/news". Ushbu bosqichga uchta kod qatorida erishish mumkin. Avval biz selenyumdan veb-drayverni import qilamiz, Chrome veb-drayverining namunasini yaratamiz va nihoyat, drayver deb nomlangan webdriver obyektida get usulini chaqiramiz.

Ushbu kodni qisqa va o'qilishi mumkin qilish uchun chromedriver bajariladigan faylni foydalanuvchi tanlagan papkaga joylashtirish mumkin. Keyinchalik bu maqsad atrof-muhit o'zgaruvchilari ostida PATHga qo'shilishi mumkin. Qavslar ichida Chrome brauzeriga argumentlar berilmagan holda webdriver.Chrome() yordamida veb-drayver ishga tayyor.

Maslahat 2. Konsol yordamida istalgan veb-elementni toping

Veb-sahifaga o'tganimizdan so'ng, biz qidiruv maydonini topmoqchimiz, ustiga bosing va "koronavirus global yangilanishlari" ni yozishni boshlaymiz.

Ushbu veb-elementni topish uchun biz shunchaki Chrome-ni o'ng tugmasini bosib, tekshirish-ni tanlashimiz mumkin. Tekshirganimizda ochiladigan sahifaning yuqori chap burchagida kursorni kursorning ustiga olib borish va qiziqqan veb-elementlarni tanlash uchun foydalanishimiz mumkin. Ko'rsatilganidek, qidiruv maydonida "orb-search-q" id qiymatiga ega kirish yorlig'i mavjud.

Bu bizni qiziqtirgan yagona qidiruv elementi ekanligiga qanday ishonch hosil qilishimiz mumkin?

Biz shunchaki konsol yorlig'i oynasini tanlashimiz mumkin, so'ngra ikkita dollar belgisini, so'ngra qavslar va tirnoqlarni kiritishimiz mumkin. Qo'shtirnoq ichiga biz tegni kiritamiz, keyin kvadrat qavslar qo'yamiz. Ushbu kvadrat qavslarga id va uning qiymatini qo'shishimiz mumkin.

Format to find CSS selectors

$$('tag[attribute="attribute value"]')

Ko'rsatilganidek, faqat bitta elementdan iborat massiv qaytariladi. Ishonchimiz komilki, biz hozir bosish va qidiruv so'rovlarimizni yozishni boshlash uchun to'g'ri qidiruv maydoniga egamiz.

Konsol ichidagi qo'shtirnoqlar tarkibi to'g'ri CSS selektoridir va biz uni veb-elementni topish uchun skriptimizda ishlatishimiz mumkin.

Bu keyingi maslahatga olib keladi.

Maslahat 3: Kuchli ma'lumotlarni qirqish Bir-laynerlar: ActionChains va kalitlar

Endi biz webdriver obyekt drayverida find_element_by_css_selector usulini chaqirishimiz mumkin.

Biz veb-drayverimiz ushbu veb elementga o'tishini xohlaymiz, ustiga bosing, "Global koronavirus yangilanishlari" qidiruv so'rovimizni kiriting va Enter tugmasini bosing.

Bu selenyumdan ActionChains va Keys sinflari yordamida osonlik bilan amalga oshirilishi mumkin. Biz shunchaki drayverni ActionChains-ga o'tkazamiz va kirishni kiritish uchun move_to_element, click, send_keys va kiritishni taqlid qilish uchun key_downwith Keys.ENTER usullaridan foydalangan holda usullar zanjirini o'tkazamiz. Ushbu buyruqni bajarish uchun ActionChain oxirida perform usulini qo'shing.

ActionChain-ni ishga tushirish bizni bu erga olib boradi:

Maslahat 4: Ma'lumotlarni yozib olish

Ko'rsatilgan veb-element rasm, sarlavha, pastki sarlavha va nashr etilgan sana kabi ba'zi qo'shimcha ma'lumotlarni qaytaradi.

Qanday qilib har bir hikoyadan faqat sarlavhani olishimiz mumkin?

Agar biz konsolda quyida ko'rsatilgan veb-elementni yozsak, u 10 ta veb-element ro'yxatini qaytaradi. Biz ushbu hikoyalarning har biridan faqat sarlavhani olishni istaymiz.

Buning uchun biz 10 ta hikoyani oddiy takrorlashimiz mumkin. Buni amalga oshirish uchun biz o'tkazilgan veb-element bilan find_elements_by_css_selectorni chaqiramiz. Ushbu usul biz takrorlashimiz mumkin bo'lgan ro'yxatga o'xshash ob'ektni qaytaradi.

Biz buni top_titles o'zgaruvchisi nomiga belgilashimiz va for tsikli yordamida ularni takrorlashimiz mumkin. For tsiklida biz 2-maslahat yordamida har bir sarlavha bilan bog'langan elementni topishimiz va veb-elementdagi .text ga qo'ng'iroq qilish orqali matnni chiqarishimiz mumkin.

Terminal konsolida chop etishdan tashqari, biz .txt fayliga ham yozishimiz mumkin, shuning uchun biz skriptni ishga tushirganimizda sarlavhalarning doimiy nusxasiga ega bo'lamiz.

Maslahat 5: boshsiz veb-drayver

Sarlavhalarni chiqarish uchun skriptni ishga tushirganimizda, brauzer oynasi ochiladi va quyidagi videoda ko'rsatilganidek ishlaydi.

Bu tomosha qilish qiziqarli bo'lishi mumkin bo'lsa-da, aksariyat hollarda bu istalmagan bo'lishi mumkin.

Brauzerni olib tashlash uchun selen modulidan Options sinfini import qiling, ushbu sinfning namunasini yarating va ushbu misolda add_argumentmethod ‘ — boshsiz’ qator argumenti bilan chaqiring. Nihoyat, veb-drayverda variantlar parametri ostida boshsiz brauzerga ishora qiluvchi o'zgaruvchini qo'shing.

Bonus Maslahat: sekin ulanish holatlarida elementlarni topish uchun kutishlarni qo'shing

Webdriver kutish, By va kutilgan_shartlar

Veb-skraping muvaffaqiyatli bo'lishiga ishonch hosil qilish uchun biz skriptimizga kutishni kiritishimiz mumkin. Bu xususiyat, ayniqsa, veb-sahifalar sekin yuklangan hollarda foydali bo'lishi mumkin. Buning uchun biz ko'rsatilgan uchta sinfni import qilamiz.

Kutishni joriy qilishning yoqimli tomoni shundaki, ular tuzilganda deyarlini jumla sifatida yozish mumkin. Bundan tashqari, ular veb-elementni biz tanlaganimizcha qidirishlari mumkin. Agar veb-element avvalroq topilgan bo'lsa, skript shunchaki ertaroq ishlaydi.

Bu erda biz WebDriverWait sinfini, bizning drayver obyektimizdan o'tamiz, unga element joylashguncha maksimal 10 soniya kutishini aytamiz. until usulida biz EC taxallusliExpectedConditons sinfiga o'tamiz va unda joylashgan elementning mavjudligini metod deb ataymiz. Keyin biz ushbu usulga qaysi elementni (By.CSS_SELECTOR) va veb elementni izlayotganimizni batafsil ko'rsatuvchi lokator kortejini o'tkazamiz.

Kutish skriptlaringizni yanada mustahkam qiladi va Vaqt tugashi istisnolariga nisbatan kamroq sezgir bo'ladi.

Ushbu misollar uchun skript bu erda to'liq ko'rsatilgan.

Avtomatlashtirish skriptini sinfga aylantirish

Koronavirus sarlavhalari klassi

Veb-avtomatlashtirish mo'ljallanganidek ishlayotganiga amin bo'lganimizda, endi kodni sinfga aylantirishimiz mumkin. Ushbu sinfning har qanday bo'lajak foydalanuvchilari uchun hamma narsani tushunarli qilish uchun men sinfga CoronaVirusHeadlines qo'ng'iroq qilishga qaror qildim.

initkonstruktorda men ob'ektda Chrome veb-drayviga ishora qiluvchi drayver atributini o'rnatdim.

Kod avvalgi bo'limlarda ko'rsatilgan protsessual kod bilan bir xil (boshsiz variantni olib tashlaganimdan tashqari). Faqatgina istisno shundaki, drayver ob'ektda atribut sifatida o'rnatilgan. Drayv init usulida ishga tushiriladi va sarlavhalarni olish uchun get_headlinesmetodda ishlatiladi.

Sarlavhalarni olish uchun men ushbu sinfning virus_data nomli namunasini yarataman. Keyin .txt faylidagi sarlavhalarni olish uchun ushbu sinfdagi get_headlines usulini chaqiraman.

Mahalliy katalogimda endi “Coronavirus_headlines.txt” nomli faylni tekshirishim mumkin.

Quyida ko'rsatilganidek, sarlavhalar .txt fayliga qirqib olingan. Shuni yodda tutingki, agar siz kodni o'zingiz ishlatsangiz, sarlavhalar albatta boshqacha bo'ladi, chunki koronavirus pandemiyasi BBCda har kuni chop etiladigan yangi hikoyalar bilan doimiy ravishda rivojlanmoqda.

Xulosa va kengaytmalar

Bular selen yordamida qirib tashlash bo'yicha eng yaxshi maslahatlarim. Ba'zi maslahatlar, jumladan, harakatlar zanjiri va kutish bo'yicha maslahatlar juda o'qilishi mumkin va sizning kodingizni o'qishi mumkin bo'lgan boshqalar tomonidan oson tushunilishi mumkin.

Skript osongina kengaytirilishi mumkin. Keyingi 10 ta sarlavhani olish uchun ikkinchi sahifaga ham oʻtishingiz mumkin. Yoki siz sarlavhalar elektron pochta orqali yuborilishini yoki bajariladigan faylga aylantirilishini xohlar edingiz, shuning uchun sarlavhalarni siz va Python-dan foydalanmasligi mumkin bo'lgan manfaatdor hamkasblaringiz/do'stlaringiz bilan bo'lishish mumkin. Bunga mos ravishda smtplib yoki PyInstaller modullar yordamida erishish mumkin.

O'qiganingiz uchun rahmat.