Zanurkuj w Pythonie/Wyciąganie danych z dokumentu HTML: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
mNie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 2:
== Wyciąganie danych z dokumentu HTML ==
Aby
Pierwszym krokiem do wydobycia danych z dokumentu HTML jest zdobycie jakiegoś dokumentu. Jeśli posiadasz jakiś dokument HTML na swoim twardym dysku, możesz wykorzystać funkcje
'''Przykład 8.5. Wprowadzenie do <tt>urllib</tt>'''
Linia 29:
[...ciach...]</nowiki>
# Moduł <tt>urllib</tt> jest częścią standardowej biblioteki Pythona. Zawiera on funkcje służące do pobierania informacji o danych, a także pobierania samych danych z internetu na podstawie adresu URL (głównie strony
# Najprostszym
# Najprostszą czynnością, którą możemy wykonać na obiekcie zwróconym przez <tt>urlopen</tt>, jest wywołanie <tt>read</tt>. Metoda ta odczyta cały HTML strony internetowej i zwróci go w postaci napisu, łańcucha znaków. Obiekt ten posiada także metodę <tt>readlines</tt>, która czyta tekst linia po linii, dodając kolejne linie do listy.
# Kiedy skończymy pracę na tym obiekcie, powinniśmy go jeszcze zamknąć za pomocą <tt>close</tt>, podobnie jak normalny plik.
# Mamy kompletny dokument HTML w postaci łańcucha znaków,
'''Przykład 8.6. Wprowadzenie do <tt>urllister.py</tt>'''
Linia 52:
# <tt>reset</tt> jest wywoływany przez metodę <tt>__init__</tt> <tt>SGMLParser</tt>-a, a także można go wywołać ręcznie już po utworzeniu instancji parsera. Zatem jeśli potrzebujesz powtórnie zainicjalizować instancję parsera, który był wcześniej używany, zrobisz to za pomocą <tt>reset</tt> (nie <tt>__init__</tt>). Nie ma potrzeby tworzenia nowego obiektu.
# Zawsze, kiedy parser odnajdzie znacznik <tt><nowiki><a></nowiki></tt>, wywoła metodę <tt>start_a</tt>. Znacznik może posiadać atrybut <tt>href</tt>, a także inne jak na przykład <tt>name</tt>, czy <tt>title</tt>. Parametr <tt>attrs</tt> jest listą krotek, <tt>[(atrybut, wartość), (atrybut, wartość), ...]</tt>. Znacznik ten może być także samym <tt><nowiki><a></nowiki></tt>, poprawnym (lecz bezużytecznym) znacznikiem HTML, a w tym przypadku <tt>attrs</tt> będzie pustą listą.
# Możemy stwierdzić, czy znacznik <tt><nowiki><a></nowiki></tt> posiada atrybut <tt>href</tt>, za pomocą prostego wielozmiennego wyrażenie listowego.
# Porównywanie napisów (np. <tt>k=='href'</tt>) jest zawsze wrażliwe na wielkość liter, lecz w tym przypadku jest to bezpieczne, ponieważ <tt>SGMLParser</tt> konwertuje podczas tworzenia <tt>attrs</tt> nazwy atrybutów na małe litery.
Linia 82:
# Wywołujemy metodę <tt>feed</tt> zdefiniowaną w <tt>SGMLParser</tt>, aby przekazać HTML do parsera <ref>
Technicznym określeniem parsera, takiego jak <tt>SGMLParser</tt>, jest konsument (ang. ''consumer''): konsumuje on HTML i rozkłada go. Przypuszczalnie nazwa <tt>feed</tt> (czyli ''karm'' w języku polskim) została wybrana, aby dopasować parser do takiego motywu „konsumenta”. W tym momencie, niektórym może przyjść na myśl zoo, w którym znajduje się ciemna klatka bez drzew, roślin i bez żadnych oznak życia. Jeśli będziesz bardzo cicho i przyglądniesz się bardzo dokładnie, to
</ref>. Metoda ta
# Podobnie jak pliki, powinieneś zamknąć swoje obiekty URL, kiedy już nie będą ci potrzebne.
# Powinieneś także zamknąć obiekt parsera, lecz z innego powodu. Podczas czytania danych przekazujemy je do parsera, lecz metoda <tt>feed</tt> nie gwarantuje, że wszystkie przekazane dane, zostały przetworzone. Parser może te dane zbuforować i czekać na dalszą porcję danych. Kiedy wywołamy <tt>close</tt>, mamy pewność, że bufor zostanie opróżniony i wszystko zostanie całkowicie sparsowane.
# Ponieważ parser został zamknięty, więc parsowanie zostało zakończone i <tt>parser.urls</tt> zawiera listę wszystkich URL-
'''Przypisy'''
|