2016-11-18 159 views
1

我使用lxml來清理html數據,但在某些情況下,lxml也刪除了有效標記。它刪除具有有效的主機的iframe標籤,但雙斜槓(//)lxml刪除雙斜槓iframe

代碼示例啓動:

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

但是對於普通的URL(不含雙斜線),它工作正常

>>> 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>' 

我需要做什麼,使lxml瞭解它是有效的URL?

感謝。

回答

0

如果你看一下文檔的清潔(http://lxml.de/3.4/api/lxml.html.clean.Cleaner-class.html),它似乎在默認情況下,這些參數被設置爲True:

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

所以,我的第一本能會嘗試cleaner = Cleaner(host_whitelist=['www.youtube.com'], embedded=False)

+0

你可以看到有「whitelist_tags: host_whitelist可以包含的一組標籤**默認是iframe並嵌入**您可能希望包含腳本等其他標籤,或者您可能想實現allow_embedded_url以獲得更多控制。包括所有標籤「。 您也可以在我的示例中看到,當提供給主機(https)的模式正在工作時,它與「嵌入」參數無關 – user3164429