2016-11-18 3 views
1

Ich verwende Lxml, um HTML-Daten zu bereinigen, aber in einigen Fällen entfernt Lxml auch die gültigen Tags. Es entfernt iframe-Tags, die einen gültigen Host haben, sondern beginnt mit Doppelschrägstriche (//)lxml entfernt doppelten Schrägstrich iframe

Codebeispiel:

>>> cleaner = Cleaner(host_whitelist=['www.youtube.com']) 
>>> iframe = '<iframe src="//www.youtube.com/embed/S2S5I5GHkDQ"></iframe>' 
>>> cleaner.clean_html(iframe) 
'<div></div>' 

aber für den normalen Urls (ohne doppelte Schrägstriche) es fein

>>> cleaner = Cleaner(host_whitelist=['www.youtube.com']) 
>>> iframe = '<iframe src="https://www.youtube.com/embed/S2S5I5GHkDQ"></iframe>' 
>>> cleaner.clean_html(iframe) 
'<iframe src="https://www.youtube.com/embed/S2S5I5GHkDQ"></iframe>' 
arbeitet

Was muss ich tun, um lxml zu verstehen, dass es eine gültige URL ist?

Danke.

Antwort

0

Wenn man sich die Dokumentation für Reiniger aussehen (http://lxml.de/3.4/api/lxml.html.clean.Cleaner-class.html), scheint es, dass diese Parameter sind standardmäßig auf True gesetzt:

embedded: 
    Removes any embedded objects (flash, iframes) 
frames: 
    Removes any frame-related tags 

Also mein erster Instinkt cleaner = Cleaner(host_whitelist=['www.youtube.com'], embedded=False)

+0

Sie sehen können, um zu versuchen, wäre there "whitelist_tags: Eine Reihe von Tags, die in host_whitelist enthalten sein können. ** Der Standard ist iframe und embed ** Sie möchten vielleicht andere Tags wie script hinzufügen, oder Sie möchten allow_embedded_url für mehr Kontrolle implementieren. Setzen Sie auf Keine um alle Tags einzuschließen. " Auch Sie können in meinem Beispiel sehen, dass, wenn das Schema für den Host (https) zur Verfügung gestellt wird, es funktioniert, so ist es nicht mit dem "Embedded" -Argument verbunden – user3164429

Verwandte Themen