wyszukiwanie w tekście, html'u i xml'u
TRANSCRIPT
![Page 1: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/1.jpg)
Kurs rozszerzony języka PythonWykład 5.
Marcin Młotkowski
3 listopada 2017
![Page 2: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/2.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Plan wykładu
1 Wyrażenia regularneWprowadzenieGrupowanie wyrażeń
2 Przetwarzanie html’a
3 Przetwarzanie XML’a
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 3: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/3.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Plan wykładu
1 Wyrażenia regularneWprowadzenieGrupowanie wyrażeń
2 Przetwarzanie html’a
3 Przetwarzanie XML’a
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 4: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/4.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Przykłady wyrażeń regularnych
W systemie windows
c:\WINDOWS\system32> dir *.exe
Wynik
accwiz.exeactmovie.exeahui.exealg.exeappend.exearp.exeasr fmt.exe,asr ldm.exe...
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 5: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/5.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Przykłady, cd
?N*X, *BSD
$ rm *.tmp
Przykłady wyrażeń regularnych
wyr. reg. zbiór słów”alamakota” { ’alamakota’ }”(hop!)*” { ”, ’hop!’, ’hop!hop!’, ’hop!hop!hop!’, ...}”br+um” { ’brum’, ’brrum’, ’brrrum’, ... }
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 6: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/6.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Wyszukwanie a dopasowywanie
biblioteka reimport re
dopasowanie od początku tekstu
if re.match(”brr+um”, ”brrrrum!!!”): print(”pasuje”)
Niepasujący suffiks może być zignorowany.
wyszukiwanie
if re.search(”brr+um”, ”Autko robi brrrrum!!!”): print(”jest”)
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 7: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/7.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Kompilowanie wyrażeń regularnych
import reautomat = re.compile(”brr+um”)automat.search(”brrrrum”)automat.match(’’brrrrum”)
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 8: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/8.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Interpretacja wyniku
>>> re.search(”brr+um”, ”brrrum!!!”)
MatchObject
.group(): dopasowany tekst
.start(): początek dopasowanego tekstu
.end(): koniec dopasowanego tekstu
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 9: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/9.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Większy przykład
Zadanie
Znaleźć na stronie html’owej wszystkie odwołania do innych stron
przykłady
www.ii.uni.wroc.plii.yebood.com
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 10: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/10.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Rozwiązanie zadania
Implementacja
adres = ”([a-zA-Z]+\.)*[a-zA-Z]+”automat = re.compile(”http://” + adres)tekst = fh.read()
[ url.group() for url in automat.finditer(tekst) ]
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 11: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/11.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Rozwiązanie zadania
Implementacja
adres = ”([a-zA-Z]+\.)*[a-zA-Z]+”automat = re.compile(”http://” + adres)tekst = fh.read()
[ url.group() for url in automat.finditer(tekst) ]
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 12: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/12.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Podręczne zestawienie metaznaków
znak opisw* wystąpienie 0 lub więcej razy ww+ wystąpienie co najmniej raz ww{m, n} w występuje przynajmniej m razy, a co najwyżej
n razyw? 0 lub 1 wystąpienie ww1|w2 alternatywa znaków w1 i w2. dowolny znak oprócz znaku nowego wiersza[aeiouy ] pojedyncza samogłoska[A− Z ] wielka litera
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 13: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/13.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Popularne skróty
znak opis\d dowolna cyfra\w znak alfanumeryczny (zależy od LOCALE)\Z koniec napisu
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 14: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/14.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Problem z ukośnikiem
Rola ukośnika w Pythonie
”Imię\tNazwisko\n”print(”Tabulator to znak \\t”)”c:\\WINDOWS\\win.ini”
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 15: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/15.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Ukośnik a wyrażenia regularne
Wyszukiwanie ’[’
re.match(”\[”, ”[”)
Zagadka
Jak znaleźć w tekście ”\[”?
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 16: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/16.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Ukośnik a wyrażenia regularne
Wyszukiwanie ’[’
re.match(”\[”, ”[”)
Zagadka
Jak znaleźć w tekście ”\[”?
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 17: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/17.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Próby rozwiązania
’\[’re.match(’\[’, ’\[’) # błąd kompilacji wyrażenia regularnego
re.match(”\[”, ”[”) # wynik: None
’\\[’re.match(’\\[’, ’\[’) # błąd kompilacji wyrażenia regularnegore.match(”\\[”, ”[”) # wynik: None
re.match(’\\\[’, ’\[’) # wynik: Nonere.match(’\\\\[’, ’\[’) # wynik: None
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 18: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/18.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Próby rozwiązania
’\[’re.match(’\[’, ’\[’) # błąd kompilacji wyrażenia regularnegore.match(”\[”, ”[”) # wynik: None
’\\[’re.match(’\\[’, ’\[’) # błąd kompilacji wyrażenia regularnegore.match(”\\[”, ”[”) # wynik: None
re.match(’\\\[’, ’\[’) # wynik: Nonere.match(’\\\\[’, ’\[’) # wynik: None
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 19: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/19.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Próby rozwiązania
’\[’re.match(’\[’, ’\[’) # błąd kompilacji wyrażenia regularnegore.match(”\[”, ”[”) # wynik: None
’\\[’re.match(’\\[’, ’\[’) # błąd kompilacji wyrażenia regularnego
re.match(”\\[”, ”[”) # wynik: None
re.match(’\\\[’, ’\[’) # wynik: Nonere.match(’\\\\[’, ’\[’) # wynik: None
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 20: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/20.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Próby rozwiązania
’\[’re.match(’\[’, ’\[’) # błąd kompilacji wyrażenia regularnegore.match(”\[”, ”[”) # wynik: None
’\\[’re.match(’\\[’, ’\[’) # błąd kompilacji wyrażenia regularnegore.match(”\\[”, ”[”) # wynik: None
re.match(’\\\[’, ’\[’) # wynik: Nonere.match(’\\\\[’, ’\[’) # wynik: None
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 21: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/21.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Próby rozwiązania
’\[’re.match(’\[’, ’\[’) # błąd kompilacji wyrażenia regularnegore.match(”\[”, ”[”) # wynik: None
’\\[’re.match(’\\[’, ’\[’) # błąd kompilacji wyrażenia regularnegore.match(”\\[”, ”[”) # wynik: None
re.match(’\\\[’, ’\[’) # wynik: Nonere.match(’\\\\[’, ’\[’) # wynik: None
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 22: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/22.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Poprawne rozwiązanie
Rozwiązanie
re.match(’\\\\\[’, ’\[’)re.match(r’\\\[’, ’\[’)
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 23: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/23.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Przetwarzanie znaków
Przetwarzanie stringów na poziomie Pythona
string w Pythonie znak ’prawdziwy’’\n’ 0x0A’\t’ 0x0B’\\’ 0x5C
Przetwarzanie stringów na poziomie wyrażeń regularnych
string w wyrażeniu regularnym znak ’prawdziwy’’\[’ 0x5B
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 24: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/24.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Trochę o grupach
res = re.match(”a(b*)a.*(a)”, ”abbabbba”)print(res.groups())
Wynik
(’bb’, ’a’)
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 25: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/25.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Wyrażenia grupujące
(?P<nazwa>regexp)
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 26: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/26.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Zadanie
Z daty w formacie ’20171103’ wyciągnąć dzień, miesiąc i rok.
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 27: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/27.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Rozwiązanie
Wyrażenie regularne
wzor = ’(?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2})’
res = re.search(wzor, ”W dniu 20171103 jest wykład z Pythona”)
print(res.group(”rok”), res.group(”mies”))
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 28: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/28.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Rozwiązanie
Wyrażenie regularne
wzor = ’(?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2})’
res = re.search(wzor, ”W dniu 20171103 jest wykład z Pythona”)
print(res.group(”rok”), res.group(”mies”))
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 29: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/29.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Rozwiązanie
Wyrażenie regularne
wzor = ’(?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2})’
res = re.search(wzor, ”W dniu 20171103 jest wykład z Pythona”)
print(res.group(”rok”), res.group(”mies”))
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 30: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/30.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Rozwiązanie
Wyrażenie regularne
wzor = ’(?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2})’
res = re.search(wzor, ”W dniu 20171103 jest wykład z Pythona”)
print(res.group(”rok”), res.group(”mies”))
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 31: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/31.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Rozwiązanie
Wyrażenie regularne
wzor = ’(?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2})’
res = re.search(wzor, ”W dniu 20171103 jest wykład z Pythona”)
print(res.group(”rok”), res.group(”mies”))
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 32: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/32.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Rozwiązanie
Wyrażenie regularne
wzor = ’(?P<rok>\d{4})(?P<mies>\d{2})(?P<dzien>\d{2})’
res = re.search(wzor, ”W dniu 20171103 jest wykład z Pythona”)
print(res.group(”rok”), res.group(”mies”))
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 33: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/33.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Zamiana tekstu
Zadanie: zamienić daty w formacie yyyy–mm–dd na dd–mm–yyyy
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 34: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/34.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
WprowadzenieGrupowanie wyrażeń
Rozwiazanie
import re
wzor = ’(?P<rok>\d{4})-(?P<mies>\d{2})-(?P<dzien>\d{2})’def zamieniacz(match):
return match.group(’dzien’) + ’-’ + match.group(’mies’)+ ’-’ + match.group(’rok’)
tekst = ”Bitwa pod Grunwaldem miała miejsce 1410-07-15”dmr = re.sub(wzor, zamieniacz, tekst)’Bitwa pod Grunwaldem miała miejsce 15-07-1410’
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 35: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/35.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Plan wykładu
1 Wyrażenia regularneWprowadzenieGrupowanie wyrażeń
2 Przetwarzanie html’a
3 Przetwarzanie XML’a
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 36: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/36.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Przetwarzanie html’a
Plik html to ciąg znaczników
<html><title>Tytuł</title><body bgcolor=”red”><div align=”center”>Tekst</div></body></html>
Tagi otwierające
<html>, <body>, <div>
Tagi zamykające
</body>, </div>, </html>
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 37: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/37.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Klasa html.parser.HTMLParser
class html.parser.HTMLParser:def handle starttag(self, tag, attrs):def handle startendtag(self, tag, attrs):def handle endtag(self, tag):def handle data(self, dane):...
Do uruchomienia parsera służy metoda feed:
def handle endtag(self, data)
Lista attrs jest listą krotek (nazwa atrybutu, wartość atrybutu).
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 38: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/38.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Klasa html.parser.HTMLParser
class html.parser.HTMLParser:def handle starttag(self, tag, attrs):def handle startendtag(self, tag, attrs):def handle endtag(self, tag):def handle data(self, dane):...
Do uruchomienia parsera służy metoda feed:
def handle endtag(self, data)
Lista attrs jest listą krotek (nazwa atrybutu, wartość atrybutu).
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 39: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/39.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Przykład
Wypisać wszystkie odwołania ’href’<a href="adres">Tekst</a>
import html.parser
class MyHTMLParser(html.parser.HTMLParser):
def handle starttag(self, tag, attrs):if tag == ’a’:
for (atr, val) in attrs:if atr == ’href’: print(val)
myparser = MyHTMLParser()with open(”python.html”) as data:
myparser.feed(data.read())
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 40: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/40.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Przykład
Wypisać wszystkie odwołania ’href’<a href="adres">Tekst</a>
import html.parser
class MyHTMLParser(html.parser.HTMLParser):
def handle starttag(self, tag, attrs):if tag == ’a’:
for (atr, val) in attrs:if atr == ’href’: print(val)
myparser = MyHTMLParser()with open(”python.html”) as data:
myparser.feed(data.read())
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 41: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/41.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Plan wykładu
1 Wyrażenia regularneWprowadzenieGrupowanie wyrażeń
2 Przetwarzanie html’a
3 Przetwarzanie XML’a
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 42: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/42.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
XML
Przykład<?xml version="1.0" encoding="UTF-8"?><biblioteka><ksiazka egzemplarze="3"><autor>Ascher, Martelli, Ravenscroft</autor><tytul>Python. Receptury</tytul></ksiazka><ksiazka><autor/><tytul>Python. Od podstaw</tytul></ksiazka></biblioteka>
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 43: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/43.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Przetwarzanie XML
przetwarzanie kolejnych znaczników (saxutils)
utworzenie drzewa (DOM) odpowiadającego xml’owi (xml)
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 44: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/44.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
SAX — Simple Api for XML
elementy dokumentu są stopniowo wczytywane
dla każdego elementu wywoływana jest odpowiednia metodaparsera
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 45: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/45.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Implementacja parsera
Domyślny parser
from xml.sax import *
class handle.ContentHandler:def startDocument(self): passdef endDocument(self): passdef startElement(self, name, attrs): passdef endElement(self, name): passdef characters(self, value): pass
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 46: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/46.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Implementacja własnego parsera
class SaxReader(handler.ContentHandler):
def characters(self, value):print(value)
def startElement(self, name, attrs):for x in attrs:
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 47: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/47.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Wykorzystanie parsera
from xml.sax import make parserfrom xml.sax.handler import feature namespacesfrom xml.sax import saxutils
parser = make parser()parser.setFeature(feature namespaces, 0)dh = SaxReader()parser.setContentHandler(dh)parser.parse(fh)
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 48: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/48.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
SAX: podsumowanie
Przetwarzanie w trybie ’do odczytu’;
przetwarzanie porcjami;
SAX jest szybki, nie wymaga dużej pamięci.
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 49: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/49.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
DOM: Document Object Model
Dokument jest pamiętany w całości jako drzewo
Dokument (drzewo) można modyfikować;
Przetwarzanie wymaga sporo czasu i pamięci, całe drzewo jestprzechowywane w pamięci;
Specyfikacją zarządza W3C.
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 50: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/50.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Przypomnienie
Przykład<?xml version="1.0" encoding="UTF-8"?><biblioteka><ksiazka egzemplarze="3"><autor>Ascher, Martelli, Ravenscroft</autor><tytul>Python. Receptury</tytul></ksiazka><ksiazka><autor/><tytul>Python. Od podstaw</tytul></ksiazka></biblioteka>
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 51: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/51.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Ilustracja
Document
<?xml version="1.0" encoding="UTF-8"?>
Element Text Element
""Text""
Text""
Element<biblioteka>
<ksiazka> <ksiazka>
Element
<autor>
Element
<tytul>
Text
Asher, ...
Text
Python. Od ...
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 52: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/52.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Biblioteki
xml.dom: DOM Level 2
xml.dom.minidom: Lightweight DOM implementation, DOMLevel 1
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 53: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/53.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Implementacja minidom
Klasa Node
atrybut klasy przykład.nodeName biblioteka, ksiazka, autor.nodeValue ”Python. Receptury”.attributes <ksiazka egzemplarze=”3”>.childNodes lista podwęzłów
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 54: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/54.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Tworzenie drzewa
Przeglądanie pliku XML
import xml
def wezel(node):print(node.nodeName)for n in node.childNodes:
wezel(n)
doc = xml.dom.minidom.parse(’content.xml’)wezel(doc)
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 55: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/55.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Manipulacja drzewem DOM
Manipulacja węzłami
appendChild(newChild)removeChild(oldChild)replaceChild(newChild, oldChild)
Tworzenie nowych węzłów
new = document.createElement(’chapter’)new.setAttribute(’number’, ’5’)document.documentElement.appendChild(new)
print(document.toxml())
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 56: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/56.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Manipulacja drzewem DOM
Manipulacja węzłami
appendChild(newChild)removeChild(oldChild)replaceChild(newChild, oldChild)
Tworzenie nowych węzłów
new = document.createElement(’chapter’)new.setAttribute(’number’, ’5’)document.documentElement.appendChild(new)
print(document.toxml())
Marcin Młotkowski Kurs rozszerzony języka Python
![Page 57: Wyszukiwanie w tekście, html'u i xml'u](https://reader034.vdocuments.mx/reader034/viewer/2022042611/587600571a28abd8348b68cf/html5/thumbnails/57.jpg)
Wyrażenia regularnePrzetwarzanie html’aPrzetwarzanie XML’a
Podsumowanie: DOM
umożliwia manipulowanie całym drzewem
wymaga wiele czasu i pamięci dla dużych plików
Marcin Młotkowski Kurs rozszerzony języka Python