Një tutorial nga Semalt: Scraping në Ueb në Python

Kam vizituar KinoPoisk (version rus i IMDB) kohët e fundit dhe zbulova se me kalimin e viteve kam arritur të vlerësoj mbi 1000 filma. Mendova se do të ishte interesante të hulumtonit këto të dhëna më të hollësishme: a kanë ndryshuar shijet e filmit tim me kalimin e kohës? Gjatë cilat sezone të vitit shikoj më shumë filma?

Por para se të analizojmë dhe ndërtojmë grafika të bukura, duhet të marrim të dhënat. Fatkeqësisht, shumë shërbime nuk kanë API publike, kështu që ju duhet të rrokullisni mëngët dhe të analizoni faqet html.

Ky artikull ka për qëllim ata që gjithmonë kanë dashur të mësojnë se si të përdorin Web Scrapping, por nuk i morën duart ose nuk dinin nga fillonin.

detyrë

Detyra jonë është që të nxjerrim të dhënat për filmat e shikuar tashmë: titullin e filmit, datën dhe kohën e shikimit, vlerësimin e përdoruesit.

Në fakt, puna jonë do të bëhet në 2 faza:

Faza 1: shkarkoni dhe ruani faqet html

Faza 2: parse html në një format të përshtatshëm për analiza të mëtutjeshme (csv, json, pandas dataframe etj)

Instruments

Ka shumë biblioteka të python për dërgimin e kërkesave http. Më e famshme dhe shumë e dobishme është Kërkesat.

Shtë gjithashtu e nevojshme të zgjidhni një bibliotekë për analizimin html.

BeatifulSoup, lxml

Këto janë dy bibliotekat më të njohura për parsing html dhe zgjedhja e njërës prej tyre është vetëm një preferencë personale. Për më tepër, këto biblioteka janë të lidhura ngushtë me njëra-tjetrën: BeautifulSoup filloi të përdorë lxml si një analizues të brendshëm për përshpejtimin, dhe në lxml, u shtua një modul supparser. Për të krahasuar qasjet, unë do të analizoj të dhënat me BeautifulSoup dhe duke përdorur zgjedhësit XPath në modulin lxml.html.

Shkarkimi i të Dhënave

Le të fillojmë të shkarkojmë të dhënat. Para së gjithash, le të përpiqemi të marrim faqen me url dhe ta ruajmë atë në një skedar lokal.

Ne hapim skedarin që rezulton dhe shohim se nuk është aq e thjeshtë: faqja na konsideroi robot dhe nuk do të tregojë të dhënat.

Le të zbulojmë se si funksionon faqja

Shfletuesi nuk ka asnjë problem në marrjen e informacionit nga faqja. Le të shohim se si e dërgon saktësisht kërkesën. Për ta bërë këtë ne përdorim panelin "Rrjeti" në "Tools Developer" në shfletuesin (Unë përdor Firebug për këtë), zakonisht, kërkesa për të cilën kemi nevojë është më e gjata.

Siç mund ta shohim, shfletuesi gjithashtu dërgon tek header UserAgent, cookie dhe një numër tjetër të parametrave. Së pari, ne thjesht do të përpiqemi të dërgojmë UserAgent të saktë në një kokë.

Këtë herë kemi sukses, dhe tani na janë dhënë të dhënat e nevojshme. Vlen të përmendet se nganjëherë faqja kontrollon edhe vlefshmërinë e cookie-t, në të cilën rastet e seancave në bibliotekën e Kërkesave do të ndihmojnë.

Shkarkoni të gjitha tarifat

Tani ne jemi në gjendje të ruajmë një faqe me normat. Por zakonisht përdoruesi ka shumë norma, dhe është e nevojshme që të përsëritet përmes të gjitha faqeve. Numri i faqes që na intereson është i lehtë për t'u transferuar direkt në url.

Mbledhja e të dhënave nga Html

Tani le të shkojmë drejtpërdrejt në mbledhjen e të dhënave nga html. Mënyra më e lehtë për të kuptuar se si është strukturuar faqja html është duke përdorur funksionin "Inspect element" në shfletues. Në këtë rast, gjithçka është mjaft e thjeshtë: e gjithë tabela me normat është në etiketë. Zgjidhni këtë nyje:

nga importi i BS4 BeautifulSoup

nga importi lxml html

# Supë e bukur

supë = BeautifulSoup (teksti)

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

# lxml

pemë = html.fromstring (tekst)

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

Le të mësojmë se si të nxjerrim titullin rus të filmit dhe një lidhje në faqen e filmit (gjithashtu si të merrni tekstin dhe vlerën e atributit).

Nëse keni nevojë për të nxjerrë titullin në anglisht, thjesht ndryshoni "nameRus" në "nameEng".

rezultatet

Mësuam si të analizojmë faqet e internetit, u njohëm me kërkesat e bibliotekave, BeautifulSoup dhe lxml, si dhe të dhënat morëm të përshtatshme për analiza të mëtutjeshme të filmave tashmë të parë në KinoPoisk.

mass gmail