我正在嘗試運行此程序。直到今天,它一切正常。代碼中的任何內容都沒有改變。lxml etree解析失敗(IOError)
import lxml.etree
import urlparse
import re
def parse_url(url):
return lxml.etree.parse(url, lxml.etree.HTMLParser())
urlivv = "http://finance.yahoo.com/q?s=IVV"
docivv = parse_url(urlivv)
這是我的錯誤信息:
IOError: Error reading file 'http://finance.yahoo.com/q?s=IVV': failed to load external entity "http://finance.yahoo.com/q?s=IVV"
有大約增加StringIO
的說法在網站上的一些文件(見下文)。但我覺得很奇怪,我從來沒有這樣做過。
tree = etree.parse(StringIO(myString))
編輯:更完整的堆棧跟蹤。
>>> import lxml.etree
>>> tree = lxml.etree.parse('http://finance.yahoo.com/q?s=IVV', parser=lxml.etree.HTMLParser())
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "src\lxml\lxml.etree.pyx", line 3427, in lxml.etree.parse (src\lxml\lxml.etree.c:81100)
File "src\lxml\parser.pxi", line 1811, in lxml.etree._parseDocument (src\lxml\lxml.etree.c:117831)
File "src\lxml\parser.pxi", line 1837, in lxml.etree._parseDocumentFromURL (src\lxml\lxml.etree.c:118178)
File "src\lxml\parser.pxi", line 1741, in lxml.etree._parseDocFromFile (src\lxml\lxml.etree.c:117090)
File "src\lxml\parser.pxi", line 1138, in lxml.etree._BaseParser._parseDocFromFile (src\lxml\lxml.etree.c:111636)
File "src\lxml\parser.pxi", line 595, in lxml.etree._ParserContext._handleParseResultDoc (src\lxml\lxml.etree.c:105092)
File "src\lxml\parser.pxi", line 706, in lxml.etree._handleParseResult (src\lxml\lxml.etree.c:106800)
File "src\lxml\parser.pxi", line 633, in lxml.etree._raiseParseError (src\lxml\lxml.etree.c:105611)
OSError: Error reading file 'http://finance.yahoo.com/q?s=IVV': failed to load external entity "http://finance.yahoo.com/q?s=IVV"
你說「這工作正常,直到今天。代碼中沒有任何內容改變了,「但是你從一個你不能控制的web服務器上下載文件。看起來很可能在服務器端發生了一些變化,現在您需要更新代碼來處理更改。 – bdesham
@bdesham感謝您的回覆。我還是比較新的,所以請耐心等待。這個問題似乎出現在幾個不同的網站上,這些網站大概是由不同的網絡服務器控制的(或者我在這裏是無知的)。由於在幾個網址上出現同樣的原因,我認爲這是一個代碼問題。無論我不確定如何更新代碼來處理更改,歡迎提供任何反饋意見。 – GC123
添加'StringIO'是否改變結果?如果您嘗試在運行Python代碼的同一臺計算機上的Web瀏覽器中加載該雅虎URL,您是否能夠看到該網頁? – bdesham