Pěkný komplexní článek, ale chybí mi tam bezpečnostní hledisko. Pokud někdo použije uvedené příklady parsování XML, tak si do aplikace může zavést nepříjemnou zranitelnost XXE - XML External Entity Processing (už jsem o tom mluvil: https://www.slideshare.net/vsmitka/drobn-chyby-kter-vm-mohou-zlomit-vaz/19).
Myslím, že nejjednodušší by bylo místo "čistého" lxml použvat wrapper https://pypi.org/project/defusedxml/.
Samozřejmě to lze řešit i nastavením parseru, ale to se pak musí všude ohlídat:
parser = ET.XMLParser(resolve_entities=False)
tree = ET.parse(xml, parser)
Dobrý den,
jak je to s rychlostí zpracování DOMu? (o SAX mi teď nejde, máme aplikaci napsanou jinak :-).
Máme XMLka s řádově tisíci elementy v ploché struktuře. V podstatě root element a pod ním tisíce databázových záznamů. My to takto nevymysleli, jen konzumujeme :-). Bude na tom lxml výkonnostně porovnatelný s libxml nebo máme čekat nějaké zásadní záseky. V podstatě by například zpomalení o 10% nevadilo, pokud bude kód lepší a čitelnější i pro mladší kolegy :-)
jasne to udelam. jen by me zajimalo, jestli treba nejaky dlouhodobejsi uzivatel neprisel na to, ze se kazdou sudou stredu v mesici import zpomali nebo neco takoveho :) Nebo ze je tam exponencialni slozitost v zavislosti na poctu vnorenych uzlu, ja nevim.
v příštím článku o Beautiful Soup byste se mohl zmínit i o html-requests, který staví na pyppeteer (python rozhraní pro headless chrome). U stránek tahajících data ajaxem je to nejpřímočařejší způsob získání html. Je to nový projekt, zatím asi ne úplně stabilní.
Podívám se na to a moc děkuji za informaci. O requests-html jsem nevěděl, používáme tady Beautiful Soup (ten název si někdo zkracuje, to vůbec není pěkné :-)
"koncový uzel (list) nemá žádné potomky"
než jsem plně přepnul do češtiny, dvě vteřiny jsem dumal, proč by leaf element měl být typu list :-D
Jinak samozřejmě děkuji za vynikající článek.
Ha, tak to se omlouvám za chvilku překvapení :-) I proto se záměrně snažím psát anglické termity kurzívou. Zrovna tady je to dobře matoucí.
Opravdu tato knihovna bez reptani vygeneruje nevalidni XML?
Tento priklad neni validni XML:
<root>any text<left>ěščř</left><middle><&></middle><right></right></root>
Bud melo dojit k prepsani znaku < a & na jejich kody a nebo mel byt textovy retezec zabalen do CDATA.
Ale ne, to zkazil redakční systém tady na Rootu :(
Moc se omlouvám, on je tam samozřejmě dvojí quotování a evidentně to nezvládá.
Správné verze jsou na Gitu:
https://github.com/tisnik/lxml-examples/blob/master/test2.xml
https://github.com/tisnik/lxml-examples/blob/master/test3.xml
Díky za upozornění a popravdě nevím, jak to v redakčním systému opravit. Nicméně zkusím.