Jak seškrabat webové stránky pomocí Pythonu a BeautifulSoup

Na internetu je více informací, než jakýkoli člověk dokáže za celý život absorbovat. Potřebujete k těmto informacím přístup, ale škálovatelný způsob jejich shromažďování, organizace a analýzy.

Potřebujete škrabání na webu.

Webové škrabání automaticky extrahuje data a prezentuje je ve formátu, který můžete snadno pochopit. V tomto tutoriálu se zaměříme na jeho aplikace na finančním trhu, ale webové škrabání lze použít v celé řadě situací.

Jste-li vášnivým investorem, může být zavírací ceny každý den bolestí, zejména když se potřebné informace nacházejí na několika webových stránkách. Extrakci dat usnadníte vytvořením webové škrabky pro automatické načítání indexů akcií z internetu.

Začínáme

Budeme používat Python jako náš scrapingový jazyk spolu s jednoduchou a výkonnou knihovnou BeautifulSoup.

  • Pro uživatele Mac je Python předinstalován v OS X. Otevřete Terminál a napište python --version. Měli byste vidět, že vaše pythonová verze je 2.7.x.
  • Pro uživatele Windows nainstalujte Python pomocí oficiálního webu.

Dále musíme získat knihovnu BeautifulSoup pomocí pip, nástroje pro správu balíků pro Python.

Do terminálu zadejte:

easy_install pip
pip install BeautifulSoup4

Poznámka: Pokud se vám nepodaří spustit výše uvedený příkazový řádek, zkuste přidat sudo před každý řádek.

Základy

Než začneme skákat do kódu, porozumíme základům HTML a některým pravidlům škrábání.

HTML značky
Pokud již značkám HTML rozumíte, můžete tuto část přeskočit.



    
    
    
        

První škrábání

        

Ahoj svět

    

Toto je základní syntaxe webové stránky HTML. Každý obsluhuje blok uvnitř webové stránky:
1. : HTML dokumenty musí začínat deklarací typu.
2. Dokument HTML je obsažen mezi a .
3. Deklarace meta a skriptů dokumentu HTML je mezi a .
4. Viditelná část dokumentu HTML je mezi značkami a .
5. Nadpisy nadpisů jsou definovány pomocí značek

.
6. Odstavce jsou definovány pomocí značky

.

Mezi další užitečné tagy patří pro hypertextové odkazy,

pro tabulky, pro řádky tabulky a
pro sloupce tabulky.

Značky HTML také někdy přicházejí s atributy id nebo class. Atribut id určuje jedinečné ID pro značku HTML a hodnota musí být v dokumentu HTML jedinečná. Atribut class se používá k definování stejných stylů pro značky HTML se stejnou třídou. Tyto idy a třídy můžeme využít k tomu, abychom našli potřebná data.

Další informace o značkách HTML, id a třídách najdete v kurzech W3Schools.

Stírací pravidla

  1. Než škrábnete, měli byste si přečíst smluvní podmínky webu. Přečtěte si prohlášení o zákonném použití údajů. Data, která seškrábnete, by se obvykle neměla používat pro komerční účely.
  2. Nevyžadujte data z webu příliš agresivně s programem (také známým jako spam), protože by to mohlo web poškodit. Ujistěte se, že se váš program chová rozumně (tj. Chová se jako člověk). Jeden požadavek na jednu webovou stránku za sekundu je dobrý postup.
  3. Rozložení webové stránky se může čas od času změnit, proto se ujistěte, že jste ji znovu navštívili a podle potřeby přepište svůj kód

Prohlížení stránky

Vezměme si jako příklad jednu stránku z webu Bloomberg Quote.

Jako někdo, kdo sleduje akciový trh, bychom chtěli získat indexový název (S&P 500) a jeho cenu z této stránky. Nejprve klikněte pravým tlačítkem a otevřete inspektor vašeho prohlížeče, abyste si prohlédli webovou stránku.

Zkuste umístit kurzor na cenu a měli byste mít možnost vidět modrý rámeček, který jej obklopuje. Pokud na něj kliknete, bude v konzole prohlížeče vybrána související HTML.

Z výsledku můžeme vidět, že cena je uvnitř několika úrovní značek HTML, což je

.

Podobně, pokud umístíte kurzor myši a kliknete na název „Index S&P 500“, bude to uvnitř

a

.

Nyní známe jedinečné umístění našich dat pomocí značek tříd.

Přejít na kód

Nyní, když víme, kde jsou naše data, můžeme začít kódovat naši webovou škrabku. Otevřete textový editor hned teď!

Nejprve musíme importovat všechny knihovny, které budeme používat.

# importovat knihovny
import urllib2
z bs4 importovat BeautifulSoup

Dále deklarujte proměnnou pro adresu URL stránky.

# zadejte adresu URL
quote_page = ‘http://www.bloomberg.com/quote/SPX:IND '

Potom využijte Python urllib2 k získání HTML stránky url.

# dotazovat web a vrátit html na proměnnou „stránku“
page = urllib2.urlopen (quote_page)

Nakonec stránku rozeberte do formátu BeautifulSoup, abychom na ní mohli použít BeautifulSoup.

# analyzujte html pomocí krásné polévky a uložte do proměnné `polévka`
soup = BeautifulSoup (stránka, „html.parser“)

Nyní máme proměnnou polévku obsahující HTML stránky. Zde můžeme začít kódovat část, která extrahuje data.

Pamatujete si jedinečné vrstvy našich dat? BeautifulSoup nám může pomoci dostat se do těchto vrstev a extrahovat obsah pomocí find (). V tomto případě, protože název třídy HTML je na této stránce jedinečný, můžeme jednoduše dotazovat

.

# Vyjměte 
jména a získejte jeho hodnotu name_box = soup.find ('h1', attrs = {'' class ':' 'name'})

Poté, co máme značku, můžeme získat data získáním jejího textu.

name = name_box.text.strip () # strip () se používá k odstranění začátku a konce
název tisku

Podobně můžeme získat i cenu.

# získat cenu indexu
price_box = soup.find ('div', attrs = {'' class ':' 'cena')}
price = price_box.text
cena tisku

Při spuštění programu byste měli být schopni vidět, že vytiskne aktuální cenu indexu S&P 500.

Export do Excelu CSV

Nyní, když máme data, je čas je uložit. Excel oddělený formát čárkami je dobrá volba. Může být otevřen v Excelu, takže můžete vidět data a snadno je zpracovat.

Nejdříve však musíme importovat modul Python csv a modul datetime, abychom získali datum záznamu. Vložte tyto řádky do kódu v sekci importu.

importovat csv
z datetime import datetime

V dolní části kódu přidejte kód pro zápis dat do souboru CSV.

# otevřete soubor CSV s připojením, takže stará data nebudou vymazána
s otevřeným („index.csv“, „a“) ​​jako csv_file:
 writer = csv.writer (csv_file)
 writer.writerow ([jméno, cena, datetime.now ()])

Pokud nyní spustíte program, měli byste exportovat soubor index.csv, který pak můžete otevřít v Excelu, kde byste měli vidět řádek dat.

Pokud tedy tento program spouštíte každý den, budete moci snadno získat cenu indexu S&P 500, aniž byste procházeli webovou stránku!

Další postup (Pokročilá použití)

Více indexů
Takže škrábání jednoho indexu pro vás nestačí, že? Můžeme se pokusit extrahovat více indexů současně.

Nejprve upravte stránku quote_page do pole adres URL.

quote_page = [‘http://www.bloomberg.com/quote/SPX:IND ',‘ http://www.bloomberg.com/quote/CCMP:IND']

Poté změníme kód pro extrakci dat na smyčku for, která adresy URL postupně zpracuje a všechna data uloží do proměnných dat v n-ticích.

# for loop
data = []
pro pg v quote_page:
 # dotazovat web a vrátit html na proměnnou „stránku“
 page = urllib2.urlopen (pg)
# analyzujte html pomocí krásného mýdla a uložte jej do proměnné `soup`
 soup = BeautifulSoup (stránka, „html.parser“)
# Vyjměte 
jména a získejte jeho hodnotu  name_box = soup.find ('h1', attrs = {'' class ':' 'name'})  name = name_box.text.strip () # strip () se používá k odstranění začátku a konce
# získat cenu indexu
 price_box = soup.find ('div', attrs = {'' class ':' 'cena')}
 price = price_box.text
# uložit data v n-tice
 data.append ((jméno, cena))

Upravte také ukládací část a ukládejte data řádek po řádku.

# otevřete soubor CSV s připojením, takže stará data nebudou vymazána
s otevřeným („index.csv“, „a“) ​​jako csv_file:
 writer = csv.writer (csv_file)
 # Pro smyčku
 pro jméno, cena v datech:
 writer.writerow ([jméno, cena, datetime.now ()])

Znovu spusťte program a měli byste být schopni extrahovat dva indexy současně!

Pokročilé techniky stírání

BeautifulSoup je jednoduchý a skvělý pro malování na webu v malém měřítku. Pokud však máte zájem o stírání dat ve větším měřítku, měli byste zvážit použití těchto dalších alternativ:

  1. Scrapy, výkonný python škrabací rámec
  2. Zkuste integrovat svůj kód do některých veřejných API. Účinnost získávání dat je mnohem vyšší než škrábání webových stránek. Podívejte se například na rozhraní Facebook Graph API, které vám může pomoci získat skrytá data, která nejsou zobrazena na webových stránkách Facebooku.
  3. Zvažte použití databázového backendu, jako je MySQL, k uložení vašich dat, když bude příliš velká.

Přijměte metodu SUCHÉ

DRY znamená „Don't Repeat Yourself“, zkuste automatizovat své každodenní úkoly, jako je tato osoba. Některé další zábavné projekty, které je třeba zvážit, by mohly sledovat aktivní čas vašich přátel na Facebooku (samozřejmě s jejich souhlasem), nebo popadnout seznam témat na fóru a vyzkoušet si zpracování přirozeného jazyka (což je horké téma pro právo umělé inteligence) Nyní)!

Pokud máte nějaké dotazy, prosím, neváhejte zanechat komentář níže.

Reference
http://www.gregreda.com/2013/03/03/web-scraping-101-with-python/
http://www.analyticsvidhya.com/blog/2015/10/beginner-guide-web-scraping-beautiful-soup-python/

Tento článek byl původně publikován na blogu Altitude Labs a byl napsán naším softwarovým inženýrem Leonardem Mokem. Altitude Labs je softwarová agentura, která se specializuje na personalizované mobilní aplikace React.