0

我正在寻找一个值“未找到”,但我的代码没有找到它。相反,如果该值未找到,它只会崩溃

这是代码

for key, value in productLinks.iteritems():
        if value is "Not Found":
                 print value
        else:
                 print value
                 html = urllib2.urlopen(value)
                 soup = BS(html)
                 foundPrice = soup.find('s')
                 if found is not None:
                        print "found a price"
                 else:
                        print" No Lunk"

这是错误

Traceback (most recent call last):
  File "asimsScrapper.py", line 28, in <module>
    html = urllib2.urlopen(value)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 386, in open
    protocol = req.get_type()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 248, in get_type
    raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type: Not found
4

3 回答 3

4

is关键字用于身份比较、类型检查。

您可能想使用==

if value == "Not Found"

此外,您可以验证 url,而不是检查Not Found(或)字符串,如下所示:Not found

for key, value in productLinks.iteritems():
    if value.startswith('http'):
         print value
         html = urllib2.urlopen(value)
         ...

或者,甚至更好地使用urlparse来验证 url。

也可以看看:

于 2013-09-13T08:05:45.347 回答
1

错误:

html = urllib2.urlopen(value),
unknown url type: Not found

您正在尝试打开一个url = "Not found"

根本原因是:value is "Not found",请使用:value == "Not found"

于 2013-09-13T08:08:41.143 回答
0

alecxe 是正确的,您应该使用它==来检查值等价,但他的理由是错误的。如有疑问,请始终使用==--is简单地测试身份来测试等价,这与等价不同。身份更多地与存储在内存中的位置有关,而不是与内存中的值有关。在 SO 和其他地方有很多地方可以读到这一点,但要点is是不是==.

您的错误似乎与此无关。如果你尝试urllib2.urlopen("not found")它肯定会给你这个错误。您想在将其传递给urllib2.

于 2013-09-13T08:11:46.770 回答