Dane są dosłownie wszędzie, we wszystkich dokumentach. Ale nie wszystko jest przydatne, stąd potrzeba przeanalizowania go, aby uzyskać potrzebne części. Dokumenty XML są jednym z takich dokumentów, które przechowują dane. Są bardzo podobne do plików HTML, ponieważ mają prawie ten sam rodzaj struktury. Dlatego musisz je przeanalizować, aby uzyskać niezbędne informacje, tak jak podczas pracy z HTML.Istnieją dwa główne aspekty analizowania plików XML. Oni są:
Musisz znaleźć znacznik, który zawiera żądane informacje, a następnie wyodrębnić te informacje. Dowiesz się, jak robić zarówno podczas pracy z plikami XML przed końcem tego artykułu.
BeautifulSoup to jedna z najczęściej używanych bibliotek, jeśli chodzi o skrobanie internetowe z Pythonem. Ponieważ pliki XML są podobne do plików HTML, jest również w stanie je analizować. Aby parsować pliki XML za pomocą BeautifulSoup, najlepiej jest korzystać z Pythona lxml Parser.
Możesz zainstalować obie biblioteki za pomocą pypeć Narzędzie instalacyjne, za pośrednictwem poniższego polecenia:
instaluj PIP BS4 LXMLAby potwierdzić, że obie biblioteki są pomyślnie zainstalowane, możesz aktywować interaktywną powłokę i spróbować zaimportować oba. Jeśli nie pojawi się błąd, jesteś gotowy do reszty artykułu.
Oto przykład:
$ PythonPrzed przejściem należy utworzyć plik XML z fragmentu kodu poniżej. To dość proste i powinno pasować do przypadków użycia, o których poznasz w pozostałej części artykułu. Po prostu skopiuj, wklej w edytorze i zapisz; nazwa jak próbka.XML powinien wystarczyć.
Teraz w twoim skrypcie Pythona; Musisz odczytać plik XML jak normalny plik, a następnie przekazać go do BeautifulSoup. Pozostała część tego artykułu będzie korzystać z BS_Content zmienne, więc ważne jest, aby zrobić ten krok.
# Importuj BeautifulSoupPróbka kodu powyżej importu Piękna grupa, Następnie odczytuje plik XML jak zwykły plik. Następnie przekazuje treść do importowanego Piękna grupa Biblioteka, a także parser wyboru.
Zauważysz, że kod się nie importuje lxml. To nie musi Piękna grupa wybierze lxml parser w wyniku przejścia „LXML” do obiektu.
Teraz możesz kontynuować resztę artykułu.
Znalezienie tagów
Jednym z najważniejszych etapów analizowania plików XML jest wyszukiwanie tagów. Istnieją różne sposoby, aby to zrobić podczas korzystania z BeautifulSoup; Musisz więc wiedzieć o garstce z nich, aby mieć najlepsze narzędzia do odpowiedniej sytuacji.
Tagi można znaleźć w dokumentach XML przez:
Znalezienie tagów według nazwisk
Istnieją dwie metody pięknej grupy, których można użyć, znajdując tagi według nazwisk. Jednak przypadki użycia różnią się; Rzućmy na nich okiem.
Z osobistego doświadczenia użyjesz znajdować metoda częściej niż inne metody znajdowania tagów w tym artykule. Tag Find otrzymuje nazwę znacznika, który chcesz uzyskać, i zwraca obiekt pięknego tagu, jeśli go znajdzie; W przeciwnym razie wraca Nic.
Oto przykład:
>>> wynik = bs_content.Znajdź („Dane”)Jeśli spojrzysz na przykład, zobaczysz, że znajdować Metoda zwraca znacznik, jeśli pasuje do nazwy, w przeciwnym razie nie zwraca. Jeśli jednak przyjrzysz się temu bliżej, zobaczysz, że zwraca tylko jeden znacznik.
Na przykład, kiedy Znajdź („Dane”) został wezwany, zwrócił tylko pierwszy znacznik danych, ale nie zwrócił pozostałych.
GOTCHA: znajdować Metoda zwróci tylko pierwszy znacznik, który pasuje do jego zapytania.
Jak możesz też znaleźć inne tagi? To prowadzi nas do następnej metody.
Znajdź wszystko
Znajdź wszystko Metoda jest dość podobna do znajdować metoda. Jedyną różnicą jest to, że zwraca listę tagów, które pasują do jego zapytania. Gdy nie znajdzie żadnego znacznika, po prostu zwraca pustą listę. Stąd, Znajdź wszystko Zawsze zwraca listę.
Oto przykład:
>>> wynik = bs_content.Find_All („Data”)Teraz, gdy wiesz, jak korzystać z znajdować I Znajdź wszystko Metody, możesz wyszukać tagi w dowolnym miejscu w dokumencie XML. Jednak możesz uczynić swoje wyszukiwania mocniejsze.
Oto jak:
Niektóre tagi mogą mieć tę samą nazwę, ale różne atrybuty. Na przykład dziecko Tagi mają nazwa atrybut i różne wartości. Możesz przeprowadzić konkretne wyszukiwania na podstawie tych.
Spójrz na to:
>>> wynik = bs_content.Znajdź („dziecko”, „nazwa”: „Rose”)Zobaczysz, że w użyciu jest coś innego znajdować I Znajdź wszystko Metody tutaj: oba mają drugi parametr.
Kiedy przechodzisz w słowniku jako drugi parametr, znajdować I Znajdź wszystko Metody dalsze wyszukiwanie w celu uzyskania tagów, które mają atrybuty i wartości, które pasują do dostarczonego klucza: Para wartości.
Na przykład, pomimo użycia znajdować Metoda w pierwszym przykładzie zwróciła drugą dziecko tag (zamiast pierwszego dziecko tag), ponieważ to pierwszy tag pasujący do zapytania. Znajdź wszystko Tag podąża za tą samą zasadą, z tym wyjątkiem, że zwraca wszystkie tagi, które pasują do zapytania, a nie tylko pierwsze.
Znalezienie tagów według relacji
Chociaż mniej popularne niż wyszukiwanie według nazw tagów, możesz również wyszukiwać tagi według relacji. W prawdziwym sensie jest to bardziej nawigacja niż przeszukiwanie.
Istnieją trzy kluczowe relacje w dokumentach XML:
Z powyższego wyjaśnienia możesz wywnioskować, że znacznik referencyjny jest najważniejszym czynnikiem w poszukiwaniu znaczników według relacji. Dlatego poszukajmy znacznika referencyjnego i kontynuuj artykuł.
Popatrz na to:
>>> trzeci_child = bs_content.Znajdź („dziecko”, „nazwa”: „Blue Ivy”)Z powyższego przykładu kodu znacznik odniesienia dla reszty tego rozdziału będzie trzecim dziecko tag, przechowywany w trzeci_child zmienny. W poniższych podsekcjach zobaczysz, jak szukać tagów w oparciu o relacje ich rodzica, rodzeństwa i dzieci z tagiem referencyjnym.
Znalezienie rodziców
Aby znaleźć nadrzędny tag znacznika odniesienia, użyjesz z rodzic atrybut. W ten sposób zwraca znacznik nadrzędny, a także tagi pod nim. To zachowanie jest dość zrozumiałe, ponieważ znaczniki dzieci są częścią znacznika nadrzędnego.
Oto przykład:
>>> wynik = trzeci_child.rodzicZnalezienie dzieci
Aby znaleźć znaczniki dla dzieci znacznika referencyjnego, skorzystasz z dzieci atrybut. Wykonanie tego zwraca tagi dzieci, a także podgapiaty pod każdym z nich. To zachowanie jest również zrozumiałe, ponieważ tagi dzieci często mają również własne tagi dzieci.
Należy zauważyć, że dzieci atrybut zwraca tagi dzieci jako generator. Więc jeśli potrzebujesz listy tagów dla dzieci, musisz przekonwertować generator na listę.
Oto przykład:
>>> Wynik = lista (trzeci_child.dzieci)Jeśli przyjrzysz się bliżej powyższego przykładu, zauważysz, że niektóre wartości na liście nie są tagami. To jest coś, na co musisz uważać.
GOTCHA: dzieci Atrybut nie tylko zwraca znaczniki dla dzieci, ale także zwraca tekst w znaczniku referencyjnym.
Znalezienie rodzeństwa
Ostatnią w tej sekcji jest znalezienie tagów, które są rodzeństwem do znacznika referencyjnego. Dla każdego znacznika referencyjnego mogą istnieć tagi rodzeństwa przed i po nim. Poprzednie_siblings atrybut zwróci tagi rodzeństwa przed znacznikiem odniesienia i Next_siblings atrybut zwróci po nim tagi rodzeństwa.
Tak jak dzieci atrybut, Poprzednie_siblings I Next_siblings Atrybuty zwrócą generatory. Musisz więc przekonwertować na listę, jeśli potrzebujesz listy rodzeństwa.
Popatrz na to:
>>> Lista poprzednich_siblingów (trzeci_child.poprzednie_siblings)Pierwszy przykład pokazuje poprzednie rodzeństwo, drugie pokazuje następne rodzeństwo; Następnie oba wyniki są łączone w celu wygenerowania listy wszystkich rodzeństwa dla znacznika referencyjnego.
Podczas analizowania dokumentów XML wiele prac polega na znalezieniu odpowiednich tagów. Jednak kiedy je znajdziesz, możesz również chcieć wyodrębnić pewne informacje z tych tagów i tego właśnie nauczy się ta sekcja.
Zobaczysz, jak wyodrębnić następujące czynności:
Wyodrębnienie wartości atrybutów znacznika
Czasami możesz mieć powód do wyodrębnienia wartości atrybutów w znaczniku. Na przykład w następującym parowaniu wartości atrybutów: name = ”Rose”, Możesz chcieć wydobyć „Rose."
Aby to zrobić, możesz skorzystać z Dostawać Metoda lub dostęp do nazwy atrybutu za pomocą [] [] Jak indeks, tak jak podczas pracy ze słownikiem.
Oto przykład:
>>> wynik = trzeci_child.Get („Nazwa”)Wyodrębnienie tekstu znacznika
Gdy chcesz uzyskać dostęp do wartości tekstowych tagu, możesz użyć tekst Lub smyczki atrybut. Oba zwrócą tekst w znaczniku, a nawet znaczniki dzieci. Jednakże tekst Atrybut zwróci je jako pojedynczy ciąg, połączony; podczas smyczki Atrybut zwróci je jako generator, który można przekonwertować na listę.
Oto przykład:
>>> wynik = trzeci_child.tekstWyodrębnienie zawartości znacznika
Od pomocy wyodrębniające wartości atrybutu i tekst tagów, możesz również wyodrębnić całą zawartość tagów. Aby to zrobić, możesz użyć zawartość atrybut; Jest trochę podobny do dzieci atrybut i da te same wyniki. Jednak podczas gdy dzieci atrybut zwraca generator, zawartość Atrybut zwraca listę.
Oto przykład:
>>> wynik = trzeci_child.zawartośćDrukowanie pięknego
Jak dotąd widziałeś kilka ważnych metod i atrybutów, które są przydatne podczas analizowania dokumentów XML za pomocą pięknej grupy. Ale jeśli zauważysz, gdy drukujesz znaczniki na ekranie, mają one jakiś klastrowy wygląd. Chociaż wygląd może nie mieć bezpośredniego wpływu na Twoją wydajność, może pomóc ci bardziej skutecznie i sprawić, że praca jest mniej żmudna.
Oto przykład drukowania normalnego sposobu:
>>> drukuj (trzeci_child)Możesz jednak poprawić jego wygląd, używając upiększać metoda. Po prostu zadzwoń upiększać metoda na tagu podczas drukowania, a dostaniesz coś przyjemnego wizualnie.
Popatrz na to:
Parsowanie dokumentów jest ważnym aspektem pozyskiwania danych. Dokumenty XML są dość popularne i miejmy nadzieję, że lepiej jest je przyjmować i wyodrębnić żądane dane.
Z tego artykułu możesz teraz:
Jeśli czujesz się dość zagubiony i jesteś całkiem nowy w bibliotece Pięknej, możesz sprawdzić samouczek Pięknych.