Semalt-dan Tutorial: Pythonda Veb Scraping

Bu yaxınlarda KinoPoisk'e (IMDB-nin rus versiyası) baş çəkdim və illər ərzində 1000-dən çox filmə qiymət verə bildiyimi bildim. Düşündüm ki, bu məlumatları daha ətraflı araşdırmaq maraqlı olar: zamanla film zövqlərim dəyişdi? İlin hansı fəsillərində daha çox film izləyirəm?

Ancaq gözəl qrafika təhlil edib qurmadan əvvəl məlumatları almalıyıq. Təəssüf ki, bir çox xidmətdə açıq API yoxdur, buna görə qollarınızı yuvarlatmalı və html səhifələrini təhlil etməlisiniz.

Bu məqalə həmişə Web Scrapdan necə istifadə etməyi öyrənmək istəyən, lakin əllərini almamış və ya haradan başlayacağını bilməyənlər üçün nəzərdə tutulmuşdur.

Tapşırıq

Bizim vəzifəmiz onsuz da görülmüş filmlər haqqında məlumat çıxarmaqdır: filmin adı, izlənmə tarixi və saatı, istifadəçinin reytinqi.

Əslində işlərimiz 2 mərhələdə aparılacaq:

Mərhələ 1: html səhifələrini yükləyin və qeyd edin

Mərhələ 2: html əlavə təhlil üçün uyğun bir formatda təhlil edin (csv, json, pandas dataframe və s.)

Alətlər

Http-sorğuları göndərmək üçün çox sayda piton kitabxanası var. Ən məşhur və çox lazımlı biri İstəklərdir.

Html təhlil üçün bir kitabxana seçmək də lazımdır.

BeatifulSoup, lxml

Bunlar html-ni təhlil etmək üçün ən populyar iki kitabxanadır və onlardan birini seçmək yalnız fərdi üstünlükdür. Üstəlik, bu kitabxanalar bir-biri ilə sıx bağlıdır: BeautifulSoup lxml-ni sürətləndirmək üçün daxili bir analizator kimi istifadə etməyə başladı və lxml-də soupparser modulu əlavə edildi. Yanaşmaları müqayisə etmək üçün məlumatları BeautifulSoup ilə analiz edəcəyəm və lxml.html modulunda XPath seçicilərindən istifadə edirəm.

Məlumat yüklənir

Məlumat yükləməyə başlayaq. Əvvəlcə səhifəni url ilə əldə etməyə və yerli bir faylda qeyd etməyə çalışaq.

Yaranan faylı açırıq və bunun sadə olmadığını görürük: sayt bizi robot hesab etdi və məlumatları göstərməyəcək.

Saytın necə işlədiyini öyrənək

Brauzer saytdan məlumat almaqda problem yaratmır. Görək sorğunu necə dəqiq bir şəkildə göndərir. Bunun üçün brauzerdəki "Yaradıcı alətlər" dəki "Şəbəkə" panelindən istifadə edirəm (bunun üçün Firebug istifadə edirəm), ümumiyyətlə ehtiyac duyduğumuz tələb ən uzundür.

Gördüyümüz kimi, brauzer də UserAgent, çerez və başqa bir sıra parametrlərə başlıq göndərir. Əvvəlcə bir başlığa düzgün UserAgent göndərməyə çalışacağıq.

Bu dəfə uğur qazandıq və indi bizə lazımi məlumatlar verilir. Qeyd etmək lazımdır ki, bəzən sayt çerezin doğruluğunu da yoxlayır, bu halda İstəklər kitabxanasındakı seanslar kömək edəcəkdir.

Bütün qiymətləri yükləyin

İndi dərəcələri ilə bir səhifəni saxlaya bilirik. Ancaq ümumiyyətlə istifadəçi çox dərəcələrə malikdir və bütün səhifələrdə təkrarlamaq lazımdır. Bizi maraqlandıran səhifə nömrəsini birbaşa url-ə köçürmək asandır.

Html-dən məlumat toplamaq

İndi birbaşa html-dən məlumat toplamağa gələk. Html səhifəsinin necə qurulduğunu başa düşməyin ən asan yolu brauzerdəki "Check element" funksiyasından istifadə etməkdir. Bu vəziyyətdə hər şey olduqca sadədir: dərəcələri olan bütün masa etiketdədir. Bu qovluğu seçin:

bs4 idxalından BeautifulSoup

lxml idxal html-dən

# Gözəl Şorba

şorba = BeautifulSoup (mətn)

film_list = şorbası.find ('div', ('sinif': 'profileFilmsList'))

# lxml

ağac = html.fromstring (mətn)

film_list_lxml = ağac.xpath ('// div [@class =' 'profileFilmList' ']') [0]

Filmin rus başlığını və filmin səhifəsinə bir keçidin (mətni və atributun dəyərini necə əldə etməyi) necə çıxarmağı öyrənək.

İngilis dilində başlıq çıxarmaq lazımdırsa, "nameRus" sözünü "nameEng" olaraq dəyişdirin.

Nəticələr

Veb saytları necə analiz etməyi öyrəndik, kitabxanaların sorğuları, BeautifulSoup və lxml ilə tanış olduq, həmçinin KinoPoisk-də artıq görülmüş filmlərin sonrakı təhlili üçün uyğun məlumatlar əldə etdik.