Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML



Podobne dokumenty
Zaawansowany kurs języka Python

Kurs rozszerzony języka Python

XML w.net. Dominik Baś nr alb Wrocław, 29 maja 2007

Kurs języka Python Wykład 6. Pliki tekstowe Pliki rekordów Pliki CSV Strumienie

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

Zaawansowany kurs języka Python

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

XML extensible Markup Language. część 5

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Perl a XML. Narzędzia informatyczne w językoznawstwie. Generowanie danych XML - Przykład. Generowanie danych XML. Perl - Przetwarzanie XML

Zaawansowane aplikacje WWW - laboratorium

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 05

XML extensible Markup Language 6

Drzewa DOM. Maciej Zakrzewicz.

Obiektowy model dokumentu. Katedra Mikroelektroniki i Technik Informatycznych

Zaawansowany kurs języka Python

WYKŁAD 3 XML DOM XML DOCUMENT OBJECT MODEL CZĘŚĆ 1

Kurs rozszerzony języka Python

Model semistrukturalny

Dokumentacja Użytkownika Systemu

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python

Kurs języka Python. Wątki

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

SAX i DOM wykorzystanie XML-a we własnych aplikacjach. Simple API for XML Parsing Document Object Model

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Location paths. Osie (axes)

XML i nowoczesne technologie zarządzania treścią

Zaawansowany kurs języka Python

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

XML extensible Markup Language. część 6

Kurs rozszerzony języka Python

Język XSLT. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

Kurs rozszerzony języka Python

MINISTERSTWO SPRAW WEWNĘTRZNYCH I ADMINISTRACJI DEPARTAMENT INFORMATYZACJI

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Zaawansowany kurs języka Python

Ajax. Æwiczenia IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA. SPIS TREœCI KATALOG ONLINE

Podstawy języka XML. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

Wybrane działy Informatyki Stosowanej

PHP. Tematyka wykładów: Język PHP PHP i bazy danych Rozszerzenia PHP

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Pakiet XML Czym jest i z czym się je?

Programowanie obiektowe

Podstawy XML-a. Zaawansowane techniki programowania

Kurs rozszerzony języka Python

XML Path Language (XPath)

Zasady Nazewnictwa. Dokumentów XML Strona 1 z 9

Metody Kompilacji Wykład 3

5.14 JSP - Przykład z obiektami sesji Podsumowanie Słownik Zadanie... 86

XHTML - Extensible Hypertext Markup Language, czyli Rozszerzalny Hipertekstowy Język Oznaczania.

Plan dzisiejszego wykładu. Narzędzia informatyczne w językoznawstwie. XML - Definicja. Zalety XML

akademia androida Składowanie danych część VI

Format plików do importu INF-U 18 do e-pfron2

Język Python. Język Python 1/35

libxml2 parser DOM dla C++ czwartek, 8 grudnia 11

XML extensible Markup Language. Paweł Chodkiewicz

Programowanie obiektowe

Przetwarzanie dokumentów XML za pomocą XSLT ( r.)

Zaawansowany kurs języka Python

XML i nowoczesne technologie zarządzania treścią 2007/08


XML extensible Markup Language 7

HTML DOM, XHTML cel, charakterystyka

Przykładowy dokument XML

Zaawansowane aplikacje internetowe. Wykład 2. Komunikacja XML. wykład prowadzi: Maciej Zakrzewicz. Komunikacja XML

Programowanie obiektowe

CouchDB. Michał Nowikowski

XML w bazach danych, standardy wiążące dokumenty XML

Programowanie obiektowe

GML w praktyce geodezyjnej

XML - wprowadzenie. <message> <text> Dobrze </text> </message> <message> <text> Źle </message> </text> <message> <message> <text> Źle.

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Przetwarzanie dokumentów XML za pomocą procesora XSLT (Zajęcia r.

Programowanie w Ruby

Komunikacja i wymiana danych

Metody Kompilacji Wykład 13

Informację na temat struktury pliku XML

znaleźć wszystkie rekordy dotyczące adresów przy ulicy Hożej (dowolnego miasta!);

Kurs języka Python. Wykład 13. Marcin Młotkowski. 18 stycznia Rozszerzenia Pythona w C Python/C API. 2 Osadzanie Pythona w C

Informatyka (10) dr inż. Katarzyna Palikowska Katedra Transportu Szynowego i Mostów p. 4 Hydro

WYKŁAD 1 METAJĘZYK SGML CZĘŚĆ 1

Języki formatowania dokumentów strukturalnych. XSL przekształcenia XML-a. XSL a XSLT. XSL części składowe. Zasada działania przekształcenia XSLT

XML extensible Markup Language. część 6

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Katalog książek cz. 2

Przygotował: Jacek Sroka. PO* - Scala (iteratory, leniwość, view bounds i konwersje)

Prezentacja i transformacja

Zaawansowany kurs języka Python

Definicja. Not Only SQL

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie obiektowe

Wprowadzenie do arkuszy stylistycznych XSL i transformacji XSLT

Wykład 8 - Drzewa i algorytmy ich przetwarzania

JAVA I XML ZAGADNIENIA: DOM, SAX, JAXB, XMLDecoder i XMLEncoder, ANT.

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Aplikacje WWW - laboratorium

Dokumenty SEDU składają się z dwóch części: Opisu sprawy Formularza elektronicznego

Ogólne wiadomości o grafach

Transkrypt:

Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML

Wyrażenia regularne c:\> dir *.exe $ rm *.tmp

Wyrażenia regularne 'alamakota' '(hop!)*' { '', 'hop!', 'hop!hop!',... } 'br+um' { 'brum', 'brrum', 'brrrum' }

Algorytm rozpoznawania wyrażenia regularnego Automat

Wyszukiwanie a dopasowanie import re automat = re.compile('brr+um') if automat.match('brrrrum!!!'): print 'pasuje' if automat.search('autko robi brrrrum!!!'): print 'pasuje'

Klasa MatchObject res = automat.search('brrrum!!!') res.group() # dopasowany tekst res.span() # para (początek, koniec)

Większe zadanie Znaleźć na stronie html'owej wszystkie odwołania do innych stron

Wyrażenie opisujące odwołanie www.ii.uni.wroc.pl adres = '([a-za-z]+\.)*[a-za-z]+'

Pełne (prawie) wyrażenie http = 'http:\\' + adres automat = re.compile(http) tekst = fh.read()

Lista wszystkich odwołań [ url.group() for url in automat.finditer(tekst) ]

Przegląd metaznaków {m,n} {m}.? ^

Skróty \d dowolna cyfra \w znak alfanumeryczny (zależy od ustawień LOCALE) \Z koniec napisu

Problem z ukośnikiem \ 'Imię\tNazwisko\n' print 'Tabulator to znak \\t' 'c:\\windows\\win.ini'

\ w wyrażeniach regularnych Zagadka: Jak znaleźć w tekście '\['

re.match('\[', '\[') re.match('\\[', '\[') re.match('\\\[', '\[') re.match('\\\\[', '\[') re.match('\\\\\[', '\[') Próby rozwiązania

Inne rozwiązanie Raw tekst: re.match(r'\\\[', '\[')

Grupowanie wyrażeń Zadanie: z daty w formacie '20061204' wyciągnąć dzień, miesiąc i rok.

Wyrażenie grupujące (?P<nazwa>regexp)

Trochę więcej o grupach tekst = 'abbabbba' wzor = 'a(b*)a.*(a)' aut = re.compile(wzor) res = aut.match(tekst) print res.groups() Wynik: ('bb', 'a')

Rozwiązanie tekst = '20061204' wzor = r'(?p<rok>\d{4})(?p<mies>\d{2})(? P<dzien>\d{2})' aut = re.compile(wzor) res = aut.search(tekst) print res.group('rok'), res.group('mies')

Ściąganie stron przez http i https import urllib in_stream = urllib.urlopen('http://www.python.org') doc = f.read() f.close()

Strumień in_stream.readlines() for line in in_stream: print line,

Parsowanie html import sgmllib class sgmllib.sgmlparser: def start_tag(self, attrs): def end_tag(self): def handle_data(self, data)

Przykładowa implementacja class MyParser(sgmllib.SGMLParser): def start_a(self, attrs): for (atr, val) in attrs: if atr == 'href': print val

p = MyParser() p.feed(doc) p1.close() Uruchomienie

XML Extensible Markup Language

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>

SAX - Simple API for XML Schemat przetwarzania: Elementy pliku są kolejno wczytywane Dla każdego elementu wywoływana jest odpowiednia funkcja

From xml.sax import * class saxutils.defaulthandler: def startelement(self, name, attrs): pass def startdocument(self): pass def endelement(self, name): pass def enddocument(self): pass def characters(self, value): pass

Schemat programu class SaxReader(saxutils.DefaultHandler): def characters(self, value): print value

Start element def startelement(self, name, attrs): for x in attrs.keys(): print x, '=', attrs[x]

Inicjowanie from xml.sax import make_parser from xml.sax.handler import feature_namespaces from xml.sax import saxutils parser = make_parser() parser.setfeature(feature_namespaces, 0) dh = SaxReader() parser.setcontenthandler(dh) parser.parse(fh)

Cechy SAX Przetwarzanie w trybie 'do odczytu' Przetwarzanie liniowe SAX jest szybki, nie wymaga dużej pamięci

Document Object Model (DOM) Dokument jest pamiętany w całości jako drzewo Dokument (drzewo) można modyfikować Przetwarzanie sporo czasu i pamięci, całe drzewo jest przechowywane w pamięci

Utworzenie drzewa import xml doc = xml.dom.minidom.parse('content.xml')

nodetype nodename nodevalue parentnode childnodes firstchild lastchild previoussibling nextsibling attributes Klasa Node - atrybuty

Modyfikacja drzewa appendchild(newchild) removechild(oldchild) replacechild(newchild, oldchild)

Tworzenie nowych węzłów new = document.createelement('chapter') new.setattribute('number', '5') document.documentelement.appendchild(new)

Iterator po drzewie from xml.dom.nodefilter import NodeFilter reader = Sax2.Reader() doc = reader.fromstream(open('plik.xml', 'r'))

Iterator po drzewie walker = doc.createtreewalker(doc.documentelement, NodeFilter.SHOW_ALL, None, 0) while 1: print walker.currentnode.nodename next = walker.nextnode() if next is None: break

XPath Selekcja ścieżek w drzewie

Xpath - przykład from xml import xpath nodes = xpath.evaluate('ksiazka/autor', doc.documentelement)

KONIEC