2010-10-20 13 views
1

Quelqu'un pourrait-il me dire comment extraire et supprimer toutes les balises <script> dans un document HTML et les ajouter à la fin du document, juste avant le début du document? </body></html>? Je voudrais essayer et éviter d'utiliser lxml s'il vous plaît.Extraire tous les tags <script> dans une page HTML et ajouter au bas du document

Merci.

+0

Pendant que vous y êtes, faites les charger asyncrounous. Donnera un avantage de performance encore plus grand. –

Répondre

4

La réponse est simple et peut manquer de nombreuses nuances. Cependant, cela devrait vous donner une idée de la façon de le faire, en l'améliorant en général. Je suis sûr que cela peut être amélioré, mais vous devriez être en mesure de le faire rapidement avec l'aide de la documentation.

Référence doc: http://www.crummy.com/software/BeautifulSoup/documentation.html

from bs4 import BeautifulSoup 

doc = ['<html><script type="text/javascript">document.write("Hello World!")', 
     '</script><head><title>Page title</title></head>', 
     '<body><p id="firstpara" align="center">This is paragraph <b>one</b>.', 
     '<p id="secondpara" align="blah">This is paragraph <b>two</b>.', 
     '</html>'] 
soup = BeautifulSoup(''.join(doc)) 


for tag in soup.findAll('script'): 
    # Use extract to remove the tag 
    tag.extract() 
    # use simple insert 
    soup.body.insert(len(soup.body.contents), tag) 

print soup.prettify() 

Sortie:

<html> 
<head> 
    <title> 
    Page title 
    </title> 
</head> 
<body> 
    <p id="firstpara" align="center"> 
    This is paragraph 
    <b> 
    one 
    </b> 
    . 
    </p> 
    <p id="secondpara" align="blah"> 
    This is paragraph 
    <b> 
    two 
    </b> 
    . 
    </p> 
    <script type="text/javascript"> 
    document.write("Hello World!") 
    </script> 
</body> 
</html>