誤差

2010-06-25 30 views
12

我已經安裝在Windows平臺上lxml2.2.2(即時通訊使用Python版本2.6.5)在LXML解析功能。我想這簡單的命令:誤差

from lxml.html import parse 
p= parse(‘http://www.google.com’).getroot() 

,但我得到以下錯誤:

Traceback (most recent call last): 
File 「」, line 1, in p=parse(‘http://www.google.com’).getroot() 
File 「C:\Python26\lib\site-packages\lxml-2.2.2-py2.6-win32.egg\lxml\html_init_.py」, line 661, in parse return etree.parse(filenameorurl, parser, baseurl=baseurl, **kw) 
File 「lxml.etree.pyx」, line 2698, in lxml.etree.parse (src/lxml/lxml.etree.c:49590) 
File 「parser.pxi」, line 1491, in lxml.etree.parseDocument (src/lxml/lxml.etree.c:71205) File 「parser.pxi」, line 1520, in lxml.etree.parseDocumentFromURL (src/lxml/lxml.etree.c:71488) 
File 「parser.pxi」, line 1420, in lxml.etree.parseDocFromFile (src/lxml/lxml.etree.c:70583) 
File 「parser.pxi」, line 975, in lxml.etree.BaseParser.parseDocFrom 
File (src/lxml/lxml.etree.c:67736) 
File 「parser.pxi」, line 539, in lxml.etree.ParserContext.handleParseResultDoc (src/lxml/lxml.etree.c:63820) 
File 「parser.pxi」, line 625, in lxml.etree.handleParseResult (src/lxml/lxml.etree.c:64741) 
File 「parser.pxi」, line 563, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:64056) 
IOError: Error reading file ‘http://www.google.com’: failed to load external entity 「http://www.google.com」 

我不知道下一步該做什麼,因爲我是python的新手。請指導我解決這個錯誤。提前致謝!! :)

回答

12

lxml.html.parse不提取URL。

這裏是如何用的urllib2做到這一點:

>>> from urllib2 import urlopen 
>>> from lxml.html import parse 
>>> page = urlopen('http://www.google.com') 
>>> p = parse(page) 
>>> p.getroot() 
<Element html at 1304050> 

更新
史蒂芬是正確的。 lxml.etree.parse應該接受並加載網址。我錯過了。我試過刪除這個答案,但我不被允許。

我收回我的聲明,不提取URL。

+0

非常感謝你澄清!這個偉大的工程: ) – silentNinJa 2010-06-25 09:50:14

+0

非常歡迎! – MattH 2010-06-25 10:36:11

+1

對不起,但它確實(或至少應該)抓取網址。必須有其他原因。也許先嚐試升級到最新的lxml版本。 – Steven 2011-06-30 18:52:23

4

根據API文檔它應該工作:http://lxml.de/api/lxml.html-module.html#parse

這似乎是在LXML 2.2.2的錯誤。我剛剛在python 2.6和2.7上測試了窗口,它在2.3.0下工作。

所以:升級你的lxml,你會沒事的。

我不知道在哪個版本的lxml中發生問題,但我相信問題不在於使用lxml本身,而是使用用於構建windows二進制文件的libxml2版本。 (libxml2的某些版本有Windows上使用http的問題)

+0

你確實意識到一年前問過這個問題,是嗎?並找到了解決方法? – MattH 2011-06-30 21:08:13

+0

@MattH:呃,不,我沒有。感謝提及。不知何故,它顯示爲我的谷歌閱讀器提供的新功能(仍顯示「2011年6月30日」),而且我沒有仔細觀察...... – Steven 2011-07-01 08:21:55

+0

因此,如果我仍然有這個錯誤,並且'yolk -l | grep lxml'返回'lxml - 2.3 - active'這是什麼意思? – 2011-08-04 18:14:09

3

由於換行符不允許在評論中,這是我實現的MattH's answer

from urllib2 import urlopen 
from lxml.html import parse 

site_url = ('http://www.google.com') 

try: 
    page = parse(site_url).getroot() 
except IOError: 
    page = parse(urlopen(site_url)).getroot()