#! /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/
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.
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
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.