Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #81107
| From | Stefan Behnel <stefan_ml@behnel.de> |
|---|---|
| Subject | Re: Working with HTML5 documents |
| Date | 2014-11-20 20:02 +0100 |
| References | <m4j0rj$vis$1@dont-email.me> <ab8be359-503f-4e0b-b157-66815687923b@googlegroups.com> <m4l6te$vvt$1@dont-email.me> <69c8db11-5928-4978-a0ca-0cd042f0febb@googlegroups.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.16041.1416510142.18130.python-list@python.org> (permalink) |
Tim schrieb am 20.11.2014 um 18:31:
> On Thursday, November 20, 2014 12:04:09 PM UTC-5, Denis McMahon wrote:
>>> On Wednesday, November 19, 2014 2:08:27 PM UTC-7, Denis McMahon wrote:
>>>> So what I'm looking for is a method to create an html5 document using
>>>> "dom manipulation", ie:
>>>>
>>>> doc = new htmldocument(doctype="HTML")
>>>> html = new html5element("html")
>>>> doc.appendChild(html)
>>>> head = new html5element("body")
>>>> html.appendChild(head)
>>>> body = new html5element("body")
>>>> html.appendChild(body)
>>>> title = new html5element("title")
>>>> txt = new textnode("This Is The Title")
>>>> title.appendChild(txt)
>>>> head.appendChild(title)
>>>> para = new html5element("p")
>>>> txt = new textnode("This is some text.")
>>>> para.appendChild(txt)
>>>> body.appendChild(para)
>>>>
>>>> print(doc.serialise())
>>>>
>>>> generates:
>>>>
>>>> <!doctype HTML><html><head><title>This Is The Title</title></
>>>> head><body><p>This is some text.</p></body></html>
>>>>
>>>> I'm finding various mechanisms to generate the structure from an
>>>> existing piece of html (eg html5lib, beautifulsoup etc) but I can't
>>>> seem to find any mechanism to generate, manipulate and produce html5
>>>> documents using this dom manipulation approach. Where should I be
>>>> looking?
>>
>> Everything there seems to assume I'll be creating a document serially, eg
>> that I won't get to some point in the document and decide that I want to
>> add an element earlier.
>>
>> bs4 and html5lib will parse a document into a tree structure, but they're
>> not so hot on manipulating the tree structure, eg adding and moving nodes.
>>
>> Actually it looks like bs4 is going to be my best bet, although limited
>> it does have most of what I'm looking for. I just need to start by giving
>> it "<html></html>" to parse.
>
> I believe lxml should work for this. Here's a snippet that I have used to create an HTML document:
>
> from lxml import etree
> page = etree.Element('html')
> doc = etree.ElementTree(page)
>
> head = etree.SubElement(page, 'head')
> body = etree.SubElement(page, 'body')
> table = etree.SubElement(body, 'table')
>
> etc etc
>
> with open('mynewfile.html', 'wb') as f:
> doc.write(f, pretty_print=True, method='html')
>
> (you can leave out the method= option to get xhtml).
There's also the E-factory for creating (sub-)trees and a nicely objectish way:
http://lxml.de/lxmlhtml.html#creating-html-with-the-e-factory
and the just released lxml 3.4.1 has an "htmlfile" context manager that
allows you to generate HTML incrementally:
http://lxml.de/api.html#incremental-xml-generation
Obviously, you can combine both, so you can create a subtree in memory and
write it into an incrementally built HTML stream. Pretty versatile.
Stefan
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Working with HTML5 documents Denis McMahon <denismfmcmahon@gmail.com> - 2014-11-19 21:08 +0000
Re: Working with HTML5 documents Novocastrian_Nomad <gregory.j.baker@gmail.com> - 2014-11-19 13:43 -0800
Re: Working with HTML5 documents Denis McMahon <denismfmcmahon@gmail.com> - 2014-11-20 17:03 +0000
Re: Working with HTML5 documents Tim <jtim.arnold@gmail.com> - 2014-11-20 09:31 -0800
Re: Working with HTML5 documents Stefan Behnel <stefan_ml@behnel.de> - 2014-11-20 20:02 +0100
Re: Working with HTML5 documents Ian Kelly <ian.g.kelly@gmail.com> - 2014-11-20 12:44 -0700
Re: Working with HTML5 documents Stefan Behnel <stefan_ml@behnel.de> - 2014-11-20 21:10 +0100
Re: Working with HTML5 documents Ian Kelly <ian.g.kelly@gmail.com> - 2014-11-20 14:15 -0700
csiph-web