Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyCode Conference :: https://pycode-conference.org/
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: parsing xml  (Przeczytany 3740 razy)
« : 16:58 09/08/18 »
m7g3 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 4


Koleżanki/koledzy
chcialbym z tego źródła wyciągnąć informacje o alertach pogodowych:
view-source:https://www.meteoalarm.eu/ATOM/PL.xml
Jednkaże nie mam pojęcia jak to zrobić:(
kod wygląda nastepująco:

Kod
import requests
import untangle
 
print "----------------------------------------"
#g = requests.get('https://www.meteoalarm.eu/ATOM/PL.xml')
#with open('feed.txt','w') as f:
#  f.write(g.text.encode('ISO-8859-1', 'ignore'))
 
obj = untangle.parse('feed.txt')
print obj.feed

czyli zapisałem dane do pliku (wiem ze nie muszę tego robić ale chciałem sprawdzić czy to działa w ogóle). I teraz staram się wyciągnąć entry gdzie <value>PL2809</value>.
Czy ktoś jest mi w stanie pomóc. Na tą chwilę wynik otrzymany jest niezrozumiały dla mnie. Feed powinno pokazać wszystko. Tak czy siak nie wiem jak wyjąć cały pojedyncze entry gdzie value ma jakąś konkretna wartość.
Będę wdzięczny za wszelką pomoc

Zapisane
« Odpowiedz #1 : 17:09 09/08/18 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 27
Wiadomości: 377


Może LXML Ci pomoże, jest naprawdę dobry. https://lxml.de/

Ma dobrą dokumentację, może zacznij od tutoriala:  https://lxml.de/tutorial.html
Zapisane
« Odpowiedz #2 : 12:30 10/08/18 »
m7g3 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 4


Próbowałem,
zarówno lxml jak i ten untangle ma jakis problem z przedmiotem kontentu jaki parsuje. Z racji mojego słabego obycia z xml nie potrafie tego rozkminić.
Czy ktoś może ten fragment kodu odtworzyc i zobaczyć dlaczego nie jest on poprawne parsowany?
Zapisane
« Odpowiedz #3 : 12:35 10/08/18 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 27
Wiadomości: 377


A dlaczego wykorzystujesz ISO-8859-1 a nie utf-8?
Zapisane
« Odpowiedz #4 : 12:43 10/08/18 »
m7g3 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 4


Sprawdziłem jaki encoding ma tekst po zapytaniu requestem:
Kod
g = requests.get('https://www.meteoalarm.eu/ATOM/PL.xml')
print g.encoding
 
wyszło właśnie ISO-8859-1
i teraz zapis do pliku w utf-8 powoduje cos takiego:
Cytuj
<title> Thunderstorms Warning issued from for Poland - BiaÅ^Âostocki </title>
zapisąłem w takim razie w ISO-8859-1 i jest z ogonkami wszystko w porządku.
Zapisane
« Odpowiedz #5 : 13:09 10/08/18 »
jell Offline
Administrator
Expert Python User

Zobacz profil
*****

Reputacja: 68
Płeć: Mężczyzna
Wiadomości: 601


no to przekoduj z 8859-1 (czy 8859-2 ktory w tym wypadku jest bardziej prawdopodobny) do utf-8. ten xml zaczyna sie od std naglowka
Kod
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
wiec nie dziwne ze te biblioteki sie na tym gubia.

cos czuje ze biblioteka requests gdzies po drodze musiala zmienic to kodowanie, bo w naglowkach http widze jedynie content type ustawiony na xml, ale juz brak info o kodowaniu (co zazwyczaj oznacza defaultowanie do utf-8), chociaz to jest serwowane z php, to chgw co jest ustawione na serwerze...

btw. polecam tak jak powyzej juz wspomniano lxml. to najlepsze (imo) rozwiazanie do xml pod pythona.
Zapisane

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2018 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot