如何跳过URL中的Unicode错误

时间:2014-04-11 17:57:56

标签: python urllib python-unicode

我试图弄清楚如何在Python中处理Unicode错误并跳过它们。 我想我必须使用结构try,除了UnicodeError,但我不知道在UnicodeError条件中放置什么来跳过该URL并继续抓取。这是我的代码:

  File "imagescraper.py", line 24, in <module>
    urllib.urlretrieve(image, "image0"+str(page)+str(i)+".jpg")
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 94, in urlretrieve
    return _urlopener.retrieve(url, filename, reporthook, data)
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 228, in retrieve
    url = unwrap(toBytes(url))
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 1055, in toBytes
    " contains non-ASCII characters")
UnicodeError: URL u'http://blogging.com/wp-content/uploads/2013/11/design-p\xe1gina-de-fans.png' contains non-ASCII characters

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这样的事情似乎就是你想要的:

except UnicodeError:
    pass

pass基本上只是一个占位符,它什么都不做。该例外由except块处理,然后pass将允许您转到下一个网址。

请注意,如果您是在循环中执行此操作,请使用continue关键字 - 这会转到循环的下一个循环。

答案 1 :(得分:1)

不要跳过网址,只需将其编码为有效的网址:

import urllib, urlparse

parts = urlparse.urlsplit(image)
parts = parts._replace(path=urllib.quote(parts.path.encode('utf8')))
image = parts.geturl()

这转变:

http://blogging.com/wp-content/uploads/2013/11/design-página-de-fans.png

http://blogging.com/wp-content/uploads/2013/11/design-p%C3%A1gina-de-fans.png