Python web scraper navrhnutý na extrakciu dát z týchto všetkých verejných zákaziek. Scraper získava údaje o zákazkách, ich dokumentoch a oznámeniach, ukladá tieto informácie do dictionaries/JSON súborov a tie konvertuje do dokumentu v Google Sheets.
Scraper používa nasledovné externé knižnice, ktoré by mali byť nainštalované:
aiohttp
BeautifulSoup4
lxml
Scraper vyžaduje Python vo verzii 3.9.0 alebo vyššej. Pred spustením scraperu sa uistite, že máte nainštalované všetky potrebné knižnice:
pip install -r requirements.txt
Pre integráciu vášho scraperu s Google Sheets je potrebné najprv nastaviť prístup k Google API a stiahnuť potrebné konfiguračné súbory. Postupujte podľa týchto krokov alebo na tomto odkaze:
-
Vytvorenie projektu v Google Cloud Console:
- Navštívte Google Cloud Console.
- Kliknite na 'Vytvoriť projekt', zadajte názov projektu a potvrďte vytvorenie.
-
Povolenie Google Sheets API:
- V dashboardu vášho projektu kliknite na 'Povoliť API a služby'.
- Vyhľadajte 'Google Sheets API', kliknite na výsledok a potom kliknite na 'Povoliť'.
-
Vytvorenie poverení:
- Po povolení API prejdite do časti 'Poverenia' v ľavom menu.
- Kliknite na 'Vytvoriť poverenia' a vyberte 'ID klienta OAuth'.
- Ak ešte nemáte nastavený súhlas užívateľa, systém vás vyzve k jeho konfigurácii. Vyplňte potrebné informácie.
- Pre typ aplikácie vyberte 'Desktopová aplikácia', zadajte názov a potvrďte vytvorenie.
- Po vytvorení ID klienta kliknite na 'Stiahnuť JSON' na stránke poverení, čím získate súbor s povereniami, ktorý potrebujete pre svoj projekt.
-
Nastavenie
client_secret.json
v projekte:- Súbor, ktorý ste stiahli, premenujte na
client_secret.json
(alebo akýkoľvek názov, ktorý používate vo svojom kóde) a umiestnite ho do adresára vášho projektu.
- Súbor, ktorý ste stiahli, premenujte na
-
Prvé spustenie a autorizácia:
- Pri prvom spustení scraperu budete vyzvaní k prihláseniu cez prehliadač.
- Prihláste sa do Google účtu, ktorý chcete používať pre Sheets API.
- Google vás požiada o schválenie prístupu vašej aplikácie k údajom. Po schválení bude môcť aplikácia interagovať s Google Sheets podľa konfigurovaných oprávnení.
Dodržaním týchto krokov získate potrebné poverenia a nastavíte prístup k Google Sheets pre Python scraper.
Pre odosielanie dát do Google Sheets je potrebné nastaviť niekoľko konfiguračných premenných a autorizačných súborov:
-
Google Client Secret JSON: Uložte súbor s klientskými tajomstvami od Google (JSON súbor), ktorý obsahuje potrebné informácie pre autorizáciu. Meno tohto súboru je špecifikované v konfiguračnej premennej
GOOGLE_CLIENT_SECRET_JSON
. -
Scopes: Uistite sa, že v premennej
SCOPES
sú definované všetky potrebné oprávnenia pre prístup k vašim Google Sheets. Pre tento scraper je potrebné povolenie'https://www.googleapis.com/auth/spreadsheets'
. -
Spreadsheet ID a Range Name: Uveďte ID a rozsah tabuľky, do ktorej chcete dáta ukladať. Tieto hodnoty sú definované v premenných
SPREADSHEET_ID
aRANGE_NAME
.
Pri prvom spustení skriptu sa automaticky vytvorí súbor token.pickle
, ktorý obsahuje tokeny pre prístup. Ak je tento súbor už existujúci ale jeho tokeny expirovali alebo nie sú platné, skript sa pokúsi token obnoviť, prípadne vyzve na nové prihlásenie.
Po predošlých ktokoch, pre spustenie scraperu použite nasledovný príkaz:
python main.py
Logy sú generované počas procesu scrapovania pre lepšie sledovanie chýb a priebehu operácií. Všetky logy sú ukladané do súboru scraper.log
. Po každom spustení scraperu sa logy prepisujú!
Pri používaní tohto scraperu je dôležité mať na pamäti niekoľko kľúčových obmedzení:
-
Počet Requestov: Scraper vykonáva viac ako 22,000 HTTP requestov. Toto môže mať vplyv na čas potrebný na kompletné spracovanie a získavanie dát.
-
IP a zariadenie: Všetky requesty sú vykonávané z jednej IP adresy/zariadenia, čo môže viesť k potenciálnym problémom s rate limitami alebo dokonca k dočasnému alebo trvalému blokovaniu IP adresy zo strany servera.
-
Rýchlosť Requestov: Rýchlosť vykonávania requestov je obmedzená serverom, aby nedošlo k preťaženiu cieľovej stránky. Je dôležité zachovať slušné intervaly medzi requestmi, aby sme predišli blokovaniu a zároveň zabezpečili bezpečnosť dát.
-
Celkový čas: V dôsledku vyššie uvedených obmedzení a potreby dodržiavania slušných intervalov medzi requestmi môže trvanie celého procesu scrapovania dosiahnuť približne 2555 sekúnd (43 minút).
Aj keď aktuálna verzia scraperu funguje efektívne v rámci daných obmedzení, existuje niekoľko možných zlepšení, ktoré by mohli zvýšiť výkon a efektívnosť:
-
Použitie Proxy Serverov:
- Implementácia proxy serverov by mohla pomôcť zvýšiť rýchlosť requestov tým, že by sa obchádzali prípadné rate limity a obmedzenia IP adresy.
-
Odstránenie Duplikátov:
- Na zdrojovej stránke sú zákazky často duplikované. Implementácia kontroly duplikátov pred ich spracovaním by mohla výrazne znížiť počet vykonaných requestov a tým aj celkovú záťaž na server a dĺžku trvania scrapovania.
-
Ošetrenie nečakaných chýb/situácií: