4

因此,我正在尝试构建一个程序,该程序将通过使用 yahoo 的 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
4

1 回答 1

5

问题是您试图调用urlopen.urlopen

只需调用一次,如下所示:

nhl_site = urlopen('http://sports.yahoo.com/nhl/rss')
tree = ET.parse(nhl_site)

错误消息可能会更好。如果您查看以下文档urlopen

打开 URL url,它可以是字符串或Request对象。

显然http.client.HTTPResponse,它返回的对象既不是字符串也不是Request对象。这里发生的是它urlopen看到它不是一个字符串,因此假设它是 a Request,并开始尝试访问Request对象具有的方法和属性。这种设计通常是一件好事,因为它可以让你传递像 a 一样的东西Request并且它们会正常工作......但这确实意味着如果你传递的东西不像a Request,错误消息可能是神秘。

于 2013-08-06T02:03:04.143 回答