SAMSUNG_0425_02 Advertisement SAMSUNG_0425_02 Advertisement SAMSUNG_0425_02

Python a kybernetická bezpečnosť / 23. časť

Python
0

V tejto časti seriálu predstavíme jedno z možných riešení tzv. web scrapingu. Ide o spôsob, ako možno získať a analyzovať obsah množstva webových stránok bez toho, aby sme ich museli manuálne otvárať, prechádzať a detailne sa oboznamovať s ich obsahom. Web scraping túto činnosť automatizuje a umožňuje rýchlo a efektívne získať veľkú skupinu nesmierne užitočných údajov, ktoré môžeme poctivo spracovať a využiť, ale ktoré môžu nepoctiví narušitelia zneužiť na realizáciu ich záškodníckej činnosti.

SAMSUNG_04_1 Advertisement

Web scraping (scrape – z angl. vyškrabať, vyhrabať, vybrať)

Web scraping je metóda, ktorou sa označuje automatizovaná (naprogramovaná) činnosť, pri ktorej sú z obrovského množstva webových stránok získavané (extraction) a analyzované konkrétne údaje. Odbúrava sa tak nevyhutnosť fyzického navštívenia všetkých stránok a ich analýza prečítaním a zorientovaním sa v ich obsahu. Program, ktorý vykonáva web scraping, sa označuje aj ako bot, resp. web scraper/crawler. Bot obvykle vykonáva nasledujúcu činnosť:

1. získa (download, fetch) zdrojový kód konkrétnej stránky,

2. transformuje získaný kód do formátu, ktorý je zrozumiteľný pre chod botu,

3. prehľadá a analyzuje získaný kód,

4. uloží získané údaje do úložiska, resp. zašle ich na ďalšie spracovanie.

Existuje množstvo programových riešení, ktoré implementujú web scraping a dokážu prehľadávať obsah webových stránok. Mnoho z nich dokonca efektívne obchádza kontrolné mechanizmy, ako je napr. CAPTCHA, resp. antibotové riešenia. Práve preto nesmieme pri realizácii web scrapingu zabudnúť na skutočnosť, že automatické prehľadávanie obsahu niektorých webových stránok môže byť ilegálne. Je preto nanajvýš vhodné, aby sme si pred spustením našich programov preštudovali podmienky používania (term of use) stránok, ktorých obsah chceme programovo analyzovať.

Beautiful Soup (https://www.crummy.com/software/BeautifulSoup/)

Beautiful Soup (BS) je jedna z viacerých knižníc Python, ktorých úlohou je analyzovať (parse) dokumenty HTML/XML a vyberať (scrape) z nich nami požadované údaje. Cieľom knižnice BS je čo najjednoduchším a najefektívnejším spôsobom prehľadať zdrojový kód uvedených dokumentov, ktorý je často veľmi neprehľadný a navyše v mnohých prípadoch generovaný automaticky. Pre človeka je mnohokrát problém prečítať a zorientovať sa v „ťažkopádne“ formátovanom kóde HTML stránok, ktorý sa zvykne označovať aj ako „tag soup“, teda „polievka značiek“. BS sa snaží v tejto „polievke“ zorientovať a zmeniť ju na „peknú polievku“. Pomocou funkcií knižnice BS dokážeme najmä:

1. vykonávať navigáciu v rámci analyzovaných údajov, prehľadávať ich a modifikovať,

2. automaticky konvertovať vstupné a výstupné údaje,

3. prispôsobovať analytické stratégie s ohľadom na rýchlosť a flexibilitu.

Zjednodušene povedané, BS je jedna z knižníc, pomocou ktorej dokážeme z dokumentov prečítať nami požadované údaje bez toho, aby sme museli tieto dokumenty prácne študovať a ručne prehľadávať. Okrem jednoduchého prehľadávania možno realizovať prehľadávanie stromových štruktúr, teda postupne sa vnárať do nižších úrovní a vracať sa na vyššie úrovne (tree traversal). Samozrejme, počas vyhľadávania možno aplikovať rôzne typy podmienok a spresňovať tak požadované výstupy.

Funkcionalita knižnice BS sa najčastejšie využíva pri automatickom opakovanom prehľadávaní webových stránok, napr. na získavanie noviniek, sledovanie konkrétnych údajov, ktoré sa môžu meniť v čase, ďalej na automatické hľadanie obrázkov, videí, odkazov, prepojení, ale aj na sledovanie obchodných aktivít, porovnávanie produktov a cien, sumarizáciu výsledkov, pravidelné sťahovanie konkrétneho obsahu a na mnoho ďalších aktivít.

BS nie je jediná knižnica tohto druhu. Okrem nej môžeme spomenúť napr. knižnice ZenRows, Selenium či Scrapy. Rozdiely v nich sú v ponúkanej funkcionalite, rýchlosti, podpore JavaScriptu, resp. možnostiach analýzy dynamicky generovaných stránok.

Najnovšia verzia knižnice BS4 sa dá k nášmu prostrediu Python doplniť jednoduchým príkazom pip install bs4.

Aplikácia Sieťový skener v7.0

Nám známu vzorovú aplikáciu Sieťový skener sme rozšírili o funkcionalitu implementujúcu web scraping, a to v rámci súboru pages/page8.py. Použili sme rovnakú programovú štruktúru, akú sme používali aj doposiaľ, to znamená, že v kóde aplikácie netreba hľadať žiadne významné zmeny. Celý algoritmus sa nachádza v súbore page8.py, kde sme:

1. na začiatku importovali potrebné knižnice (moduly):

import requests

from bs4 import BeautifulSoup

2. vytvorili potrebné Pandas DataFrames:

anchors_data = pd.DataFrame(columns=['id', 'a'])

h1h2_data = pd.DataFrame(columns=['id', 'h1h2'])

img_data = pd.DataFrame(columns=['id', 'img'])

 

3. upravili, resp. doplnili tri dash_table.DataTable – page8table1, page8table2, page8table3,

Obr. 1 Proces web scrapingu

4. implementovali web scraping v rámci callback funkcie update_page8read(v,url):

- v úvode získavame RAW údaje = kód zvolenej webovej stránky prostredníctvom funkcie requests.get(),

- následne pomocou funkcie BeautifulSoup() vytvárame DOM (Document Object Model) objekt obsahujúci stromovú štruktúru, ktorá je analyzovateľná jednotlivými funkciami BS, využívame pri tom parser html.parser (okrem toho možno využiť parsery lxml, lxml-xml, alebo html5lib),

- prostredníctvom funkcie find_all() získavame požadované údaje – obsah značiek a, h1, h2 a img,

- v závere získané údaje zapisujeme do DataFrames a pravidelne zobrazujeme v tabuľkách v rámci aplikácie GUI.

Ako obyčajne neriešime detekciu chybových stavov a reakciu na ne, kód je písaný veľmi jednoducho, bez využitia zložitejších programovacích štruktúr. Každopádne prezentujeme tu možnosť, ako jednoducho a efektívne pomocou veľmi jednoduchých konštrukcií jazyka Python získať požadované údaje, ktoré dokážeme ďalej využiť, ale aj zneužiť...

Obr. 2 GUI aplikácie WebScraping – zoznam anchors, headings, images

Poznámka: Všetky zdrojové kódy možno stiahnuť zo stránky softengine.sk.

Zobrazit Galériu

Marek Sopko

Všetky autorove články

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať