所以,我正在尝试建立一个程序,通过使用雅虎的RSS源来检索NHL赛季的分数。
我不是一个经验丰富的程序员,所以有些事情还没有完全进入我的脑海。但是,到目前为止,这是我的代码:
from urllib.request import urlopen
import xml.etree.cElementTree as ET
YAHOO_NHL_URL = 'http://sports.yahoo.com/nhl/rss'
def retrievalyahoo():
nhl_site = urlopen('http://sports.yahoo.com/nhl/rss')
tree = ET.parse(urlopen(nhl_site))
retrievalyahoo()
上面的标题说明了我在测试上述代码后得到的错误。
编辑:好的,在修复之后,回溯错误就像这一样,我感到困惑:Traceback (most recent call last):
File "C:/Nathaniel's Folder/Website Scores.py", line 12, in <module>
retrievalyahoo()
File "C:/Nathaniel's Folder/Website Scores.py", line 10, in retrievalyahoo
tree = ET.parse(nhl_site)
File "C:\Python33\lib\xml\etree\ElementTree.py", line 1242, in parse
tree.parse(source, parser)
File "C:\Python33\lib\xml\etree\ElementTree.py", line 1730, in parse
self._root = parser._parse(source)
File "<string>", line None
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 17, column 291
答案 0 :(得分:4)
问题是您尝试在urlopen
的结果上致电urlopen
。
只需拨打一次,就像这样:
nhl_site = urlopen('http://sports.yahoo.com/nhl/rss')
tree = ET.parse(nhl_site)
错误消息可能更好。如果您查看urlopen
的文档:
打开网址网址,可以是字符串或
Request
对象。
显然,它返回的http.client.HTTPResponse
对象既不是字符串也不是Request
对象。这里发生的是urlopen
看到它不是一个字符串,因此假设它是Request
,并开始尝试访问Request
个对象所具有的方法和属性。这种设计通常是一件好事,因为它可以让你传递像Request
一样的东西而且它们只会起作用......但它确实意味着如果你传递的东西不能< / em>表现得像Request
,错误信息可能很神秘。