Výukový program od Semalt: Web Scraping v Pythone

Nedávno som navštívil KinoPoisk (ruská verzia IMDB) a zistil som, že za tie roky sa mi podarilo ohodnotiť viac ako 1000 filmov. Myslel som si, že by bolo zaujímavé podrobnejšie preskúmať tieto údaje: zmenil sa vkus môjho filmu v priebehu času? V ktorých ročných obdobiach sledujem viac filmov?

Ale predtým, ako budeme analyzovať a budovať krásnu grafiku, musíme získať údaje. Bohužiaľ, mnoho služieb nemá verejné API, takže musíte zhrnúť rukávy a analyzovať stránky html.

Tento článok je určený pre tých, ktorí sa vždy chceli naučiť, ako používať webové zošrotovanie, ale nedostali zaň ruky alebo nevedeli, kde začať.

úloha

Našou úlohou je extrahovať údaje o už zobrazených filmoch: názov filmu, dátum a čas sledovania, hodnotenie používateľa.

V skutočnosti sa naša práca uskutoční v dvoch etapách:

Krok 1: stiahnite a uložte html stránky

Fáza 2: analyzovať html vo formáte vhodnom pre ďalšiu analýzu (csv, json, pandas dataframe atď.)

nástroje

Existuje veľa python-knižníc na odosielanie http-žiadostí. Najslávnejším a najužitočnejším je Žiadosť.

Je tiež potrebné zvoliť knižnicu na analýzu html.

BeatifulSoup, lxml

Toto sú dve najobľúbenejšie knižnice na analýzu html a výber jednej z nich je iba osobnou preferenciou. Tieto knižnice sú navyše navzájom úzko prepojené: BeautifulSoup začal používať lxml ako interný syntaktický analyzátor na zrýchlenie av lxml bol pridaný modul soupparser. Na porovnanie prístupov analyzujem údaje s programom BeautifulSoup a pomocou selektorov XPath v module lxml.html.

Sťahovanie údajov

Začnime sťahovať údaje. Najprv sa pokúsime získať stránku pomocou adresy URL a uložiť ju do miestneho súboru.

Otvoríme výsledný súbor a zistíme, že to nie je také jednoduché: stránka nás považovala za robota a nezobrazí údaje.

Poďme zistiť, ako web funguje

Prehliadač nemá problém so získavaním informácií z webu. Pozrime sa, ako presne to pošle žiadosť. Na tento účel používame panel „Sieť“ v „Nástroje pre vývojárov“ v prehľadávači (na tento účel používam Firebug). Obvykle je požiadavka najdlhšia.

Ako vidíme, prehliadač posiela aj hlavičky UserAgent, cookie a ďalší počet parametrov. Najprv sa pokúsime odoslať správne UserAgent do hlavičky.

Tentoraz sme úspešní a teraz dostávame potrebné údaje. Je potrebné poznamenať, že niekedy web tiež kontroluje platnosť súborov cookie. V takom prípade vám môžu pomôcť relácie v knižnici Žiadosti.

Stiahnite si všetky sadzby

Teraz sme schopní uložiť jednu stránku s cenami. Používateľ však zvyčajne má veľa sadzieb a je potrebné ho opakovať na všetkých stránkach. Číslo stránky, ktoré nás zaujíma, sa dá ľahko preniesť priamo na webovú adresu.

Zber údajov z HTML

Teraz sa dostaneme priamo k zhromažďovaniu údajov z html. Najjednoduchší spôsob, ako pochopiť štruktúru stránky html, je pomocou funkcie „Skontrolovať prvok“ v prehliadači. V tomto prípade je všetko celkom jednoduché: v tabuľke je celá tabuľka s cenami. Vyberte tento uzol:

z bs4 importovať BeautifulSoup

z lxml html importu

# Krásna polievka

soup = BeautifulSoup (text)

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

# lxml

strom = html.odstring (text)

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

Naučme sa, ako vytiahnuť ruský názov filmu a odkaz na stránku filmu (tiež ako získať text a hodnotu atribútu).

Ak potrebujete extrahovať názov v angličtine, jednoducho zmeňte „nameRus“ na „nameEng“.

výsledok

Naučili sme sa, ako analyzovať webové stránky, zoznámiť sa s knižničnými požiadavkami, BeautifulSoup a lxml, ako aj získať údaje vhodné na ďalšiu analýzu už videných filmov na KinoPoisk.