Web Scraping – Řešení [5]
import time
import requests
from bs4 import BeautifulSoup
URL = "https://en.wikipedia.org"
START = "/wiki/Special:Random"
def odstran_zavorky(text):
# V kolika závorkách jsme vnoření. 0 = mimo závorky
hloubka = 0
# Jsme zrovna uvnitř nějakého HTML elementu?
v_tagu = False
vysledek = ""
for znak in text:
# Pokud jsme v nějakém elementu…
if v_tagu:
# …chceme zachovat veškerý text.
vysledek += znak
# Končí tady značka?
if znak == ">":
v_tagu = False
else:
if znak == "(":
# Pokud vstupujeme do uzávorkovaného výrazu, jsme o jednu
# úroveň hlouběji.
hloubka += 1
elif znak == ")":
# Pokud vystupujeme, úroveň o jedna zmenšíme.
hloubka -= 1
elif hloubka == 0:
# Jsme mimo závorky, chceme si znak nechat.
vysledek += znak
# Ale musíme zkontrolovat, jestli nevstupujeme do nějakého HTML
# elementu.
if znak == "<":
v_tagu = True
return vysledek
def najdi_titulek(soup):
return soup.find(id="firstHeading").text
def najdi_odkaz(soup):
hlavni_text = soup.find(class_="mw-parser-output")
for odstavec in hlavni_text.find_all("p"):
print(odstavec)
print(odstran_zavorky(str(odstavec)))
for odkaz in odstavec.find_all("a"):
print(odkaz)
return odkaz.get("href")
def stahuj(stranka):
navstivene = set()
while True:
if stranka in navstivene:
break
navstivene.add(stranka)
odpoved = requests.get(URL + stranka)
odpoved.raise_for_status()
soup = BeautifulSoup(odpoved.text, "html.parser")
print(najdi_titulek(soup))
stranka = najdi_odkaz(soup)
if not stranka:
break
time.sleep(1)
if __name__ == "__main__":
stahuj(START)
Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.