Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python / lxml / html5lib

Cartter [19.10.2009 01:54:51]

#

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import urllib2
import html5lib
from html5lib import treebuilders
from lxml import etree

parser = html5lib.XHTMLParser(tree=treebuilders.getTreeBuilder("lxml"))
etree_document = parser.parse(urllib2.urlopen("http://www.mozilla-europe.org/fi/firefox/").read())
/var/lib/python-support/python2.6/html5lib/inputstream.py:367: DeprecationWarning: object.__init__() takes no parameters
  str.__init__(self, value)
Traceback (most recent call last):
  File "tv3.py", line 10, in <module>
    etree_document = parser.parse(urllib2.urlopen("http://www.mozilla-europe.org/fi/firefox/").read())
...
AttributeError: 'NoneType' object has no attribute 'getroot'

Mikä tuossa mättää? Koodi on lähes identtinen html5lib:n (http://code.google.com/p/html5lib/wiki/UserDocumentation) dokumentaatiosta, mutta ei tunnu toimivan.

tsuriga [19.10.2009 14:23:00]

#

Vika taitaa olla itse paketissa. _elementTree alustetaan arvoon None ja XhmlRootPhase yrittää lisätä siihen lapsisolmua. Juurisolmu pitäisi ehkä appendChildin sijasta luoda käsin kuten etree_lxml.py:TreeBuilder::insertRoot sen tekee.

Cartter [19.10.2009 17:22:21]

#

Voitko hieman tarkentaa tuota juurisolmun luomista? En täysin ymmärrä tuota insertRoot metodia ja oikeastaan tuo kuulostaa aika pelottavalta tuo "Vika taitaa olla itse paketissa" :D

tsuriga [19.10.2009 19:25:52]

#

Pitäis tutustua paremmin ko. paketin sielunelämään, että osaisin sanoa, mitä tuolle pitäis tehdä. Nyt vain seurasin ja paikallistin virheen. Paketin mukana tulevassa esimerkissä xml-parserointi kyllä luonnistuu, mutta siinä käytetään oletusarvoisesti jotain muuta kuin lxml-kirjastoa. Jos toimivuus lxml:ää käyttäen on ehdottomuus niin suosittelen kääntymään authorin puoleen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta