Semalt-dan qo'llanma: Python-da veb-skrabing

Yaqinda KinoPoiskga (IMDB rus tilidagi versiyasi) tashrif buyurib, yillar davomida 1000 dan ortiq filmlarga baho berishga muvaffaq bo'lganimni bildim. Ushbu ma'lumotlarni batafsil o'rganish qiziq bo'ladi deb o'yladim: vaqt o'tishi bilan filmimning didi o'zgarganmi? Yilning qaysi mavsumlarida ko'proq filmlarni tomosha qilaman?

Ammo chiroyli grafikalarni tahlil qilishdan va qurishdan oldin, biz ma'lumotlarni olishimiz kerak. Afsuski, ko'pgina xizmatlarda ommaviy API mavjud emas, shuning uchun siz englarini echib, html sahifalarini tahlil qilishingiz kerak.

Ushbu maqola har doim Web Scrapping-dan qanday foydalanishni o'rganishni istagan, ammo unga qo'l qo'ymagan yoki qaerdan boshlashni bilmaganlar uchun mo'ljallangan.

Vazifa

Bizning vazifamiz allaqachon ko'rilgan filmlar to'g'risida ma'lumot olish: filmning nomi, tomosha qilish vaqti va vaqti, foydalanuvchining bahosi.

Aslida, bizning ishimiz ikki bosqichda amalga oshiriladi:

1-bosqich: html sahifalarini yuklab oling va saqlang

2-bosqich: html-ni keyingi tahlil qilish uchun mos formatda tahlil qilish (csv, json, pandas ma'lumotlar ro'yxati va hk).

Asboblar

Http-so'rovlarini yuborish uchun juda ko'p pyton-kutubxonalar mavjud. Eng mashhur va juda qulay variant - bu So'rovlar.

Html tahlil qilish uchun kutubxonani tanlash kerak.

BeatifulSoup, lxml

Bu html-ni tahlil qilish uchun eng mashhur ikkita kutubxonadir va ulardan birini tanlash faqat shaxsiy tanlovdir. Bundan tashqari, ushbu kutubxonalar bir-biri bilan chambarchas bog'liq: BeautifulSoup lxml-ni tezlashtirish uchun ichki tahlil sifatida ishlatishni boshladi va lxml-da soamsarser moduli qo'shildi. Yondashuvlarni taqqoslash uchun BeautifulSoup yordamida ma'lumotlarni tahlil qilaman va lxml.html modulida XPath selektorlaridan foydalanaman.

Ma'lumotlar yuklanmoqda

Ma'lumotlarni yuklashni boshlaylik. Avvalo, sahifani url-ga kiritib, uni mahalliy faylga saqlashga harakat qilaylik.

Olingan faylni ochamiz va unchalik oson emasligini ko'ramiz: sayt bizni robot deb hisoblaydi va ma'lumotlarni namoyish qilmaydi.

Sayt qanday ishlashini bilib olaylik

Brauzer saytdan ma'lumot olishda muammo bo'lmaydi. Keling, qanday qilib so'rovni aniq yuborishini ko'rib chiqaylik. Buning uchun biz brauzerdagi "Tuzuvchi asboblar" dagi "Tarmoq" panelidan foydalanamiz (men buning uchun Firebug-dan foydalanaman), odatda, biz talab qiladigan eng uzoq bo'lgan.

Ko'rib turganimizdek, brauzer shuningdek, UserAgent, cookie va boshqa parametrlar sarlavhalariga yuboradi. Birinchidan, biz to'g'ri UserAgent-ni sarlavhaga yuborishga harakat qilamiz.

Bu safar biz muvaffaqiyatli bo'ldik va endi bizga kerakli ma'lumotlar berildi. Shuni ta'kidlash kerakki, ba'zida sayt cookie-fayllarning haqiqiyligini tekshiradi, bu holda "Requests" kutubxonasidagi sessiyalar yordam beradi.

Barcha narxlarni yuklab oling

Endi biz bitta sahifani narxlar bilan saqlashimiz mumkin. Ammo odatda foydalanuvchi juda ko'p narxlarga ega va uni barcha sahifalar orqali takrorlash kerak. Bizni qiziqtirgan sahifa raqamini to'g'ridan-to'g'ri url-ga o'tkazish oson.

Html-dan ma'lumot to'plash

Endi html-dan ma'lumotlarni yig'ishga to'g'ridan-to'g'ri murojaat qilaylik. Html sahifasining qanday tuzilganligini tushunishning eng oson usuli brauzerda "Tekshirish elementi" funktsiyasidan foydalanishdir. Bunday holda, hamma narsa juda oddiy: stavkalari bo'lgan barcha jadval yorliqda. Ushbu tugunni tanlang:

bs4-dan BeautifulSoup-ni import qilish

lxml import html-dan

# Chiroyli sho'rva

osh = BeautifulSoup (matn)

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

# lxml

daraxt = html.fromstring (matn)

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

Keling, filmning ruscha sarlavhasini va film sahifasiga havolani qanday chiqarish kerakligini bilib olamiz (shuningdek, matnni va atributning qiymatini qanday olish kerak).

Agar siz ingliz tilida sarlavha chiqarib olishingiz kerak bo'lsa, "nameRus" so'zini "nameEng" ga o'zgartiring.

Natijalar

Biz veb-saytlarni tahlil qilishni o'rgandik, Kutubxonalardagi so'rovlar, BeautifulSoup va lxml bilan tanishdik, shuningdek KinoPoisk-da ko'rgan filmlarni keyinchalik tahlil qilish uchun mos ma'lumotlarni oldik.