我试图弄清楚如何在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
有什么想法吗?
答案 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