Opetusohjelma Semalt: Web-kaavinta Pythonissa

Olen vieraillut äskettäin KinoPoiskissa (IMDB: n venäläinen versio) ja huomannut, että olen vuosien varrella pystynyt arvioimaan yli 1000 elokuvaa. Ajattelin, että olisi mielenkiintoista tutkia näitä tietoja tarkemmin: onko elokuvan maku muuttunut ajan myötä? Millä vuodenaikoilla katson enemmän elokuvia?

Mutta ennen kuin analysoimme ja rakennamme kaunista grafiikkaa, meidän on haettava tiedot. Valitettavasti monilla palveluilla ei ole julkista sovellusliittymää, joten joudut kääntämään hihat ylös ja jäsentämään html-sivuja.

Tämä artikkeli on tarkoitettu niille, jotka aina halusivat oppia käyttämään Web-romuttamista, mutta eivät saaneet käsiinsä tai eivät tienneet mistä aloittaa.

Tehtävä

Tehtävämme on poimia tiedot jo nähneistä elokuvista: elokuvan nimi, katselupäivä ja -aika, käyttäjän luokitus.

Itse asiassa työmme tehdään kahdessa vaiheessa:

Vaihe 1: lataa ja tallenna html-sivut

Vaihe 2: jäsentä html muodossa, joka soveltuu jatkoanalyysiin (csv, json, pandas dataframe jne.)

Instruments

Http-pyyntöjen lähettämiseen on paljon python-kirjastoja. Tunnetuin ja erittäin kätevä on Requests.

On myös välttämätöntä valita kirjasto html-jäsentelyyn.

BeatifulSoup, lxml

Nämä ovat kaksi suosituinta kirjastoa html: n jäsentämiseen, ja yhden valitseminen niistä on vain henkilökohtainen mieltymys. Lisäksi nämä kirjastot ovat tiiviisti yhteydessä toisiinsa: BeautifulSoup alkoi käyttää lxml: tä sisäisenä jäsentäjänä kiihdytystä varten, ja lxml: ään lisättiin keittoparser-moduuli. Lähestymistapojen vertailemiseksi jäsentän tiedot BeautifulSoupilla ja käyttämällä XPath-valitsimia moduulissa lxml.html.

Tietojen lataaminen

Aloitetaan tietojen lataaminen. Ensinnäkin, yritetään vain hakea sivu URL-osoitteen avulla ja tallentaa se paikalliseen tiedostoon.

Avaamme tuloksena olevan tiedoston ja huomaa, että se ei ole niin yksinkertainen: sivusto piti meitä robotiksi eikä näytä tietoja.

Otetaan selville, kuinka sivusto toimii

Selaimella ei ole mitään ongelmia tietojen saamiseksi sivustolta. Katsotaan kuinka se lähettää pyynnön tarkalleen. Tätä varten käytämme selaimen "Kehittäjän työkaluissa" "Verkko" -paneelia (käytän tähän Firebugia), yleensä tarvitsemme pyyntö on pisin.

Kuten voimme nähdä, selain lähettää myös otsikoihin UserAgent, evästeet ja toisen määrän parametreja. Ensin yritämme vain lähettää oikean UserAgentin otsikkoon.

Tällä kertaa olemme menestyviä, ja nyt meille annetaan tarvittavat tiedot. On syytä huomata, että joskus sivusto tarkistaa myös evästeen pätevyyden, jolloin pyynnöt-kirjaston istunnot auttavat.

Lataa kaikki hinnat

Nyt pystymme tallentamaan yhden sivun hinnoilla. Mutta yleensä käyttäjällä on paljon hintoja, ja on välttämätöntä toistaa kaikilla sivuilla. Meitä kiinnostava sivunumero on helppo siirtää suoraan URL-osoitteeseen.

Tietojen keruu html-tiedostosta

Nyt siirrytään suoraan tietojen keräämiseen html-tiedostosta. Helpoin tapa ymmärtää html-sivun rakennetta on käyttää "Selaa elementti" -toimintoa. Tässä tapauksessa kaikki on melko yksinkertaista: koko taulukko korkoilla on tunnisteessa. Valitse tämä solmu:

bs4: n tuonnista BeautifulSoup

alkaen lxml tuonti html

# Kaunis keitto

keitto = BeautifulSoup (teksti)

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

# lxml

puu = html.merkistä (teksti)

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

Oppitaan kuinka vetää elokuvan venäläinen nimi ja linkki elokuvan sivulle (myös kuinka saada teksti ja määritteen arvo).

Jos haluat purkaa otsikon englanniksi, muuta "nameRus" tilaan "nameEng".

tulokset

Oppimme kuinka jäsentää verkkosivustoja, tutustuimme kirjastopyyntöihin, BeautifulSoupiin ja lxml: ään sekä saimme tietoja, jotka soveltuvat KinoPoiskissa jo nähneiden elokuvien analysointiin.