我收到了一个网址:https : //www.packtpub.com/virtualization-and-cloud/citrix-xenapp®-75-desktop-virtualization-solutions;它来自BeautifulSoup。
url=u'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp\xae-75-desktop-virtualization-solutions'
我想再次反馈到urllib2.urlopen。
import urllib2
source = urllib2.urlopen(url).read()
我得到的错误:
UnicodeEncodeError: 'gbk' codec can't encode character u'\xae' in position 43: illegal multibyte sequence
因此,我尝试:
source = urllib2.urlopen(url.encode("utf-8")).read()
它具有页面源,但是与原始URL有所不同。
originalUrl = 'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp®-75-desktop-virtualization-solutions'
originalSource = urllib2.urlopen(originalUrl).read()
originalSource == source
结果为False。有什么想法可以解决这个网址吗?怎么把u'\ xae'转换成原始图片®
?
URL必须是有效的字节串,并且正确编码了非ASCII码点。您需要编码为UTF-8,然后用url引用URL的路径:
import urllib
import urllib2
import urlparse
originalUrl = u'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp\xae-75-desktop-virtualization-solutions'
parsed_link = urlparse.urlsplit(originalUrl.encode('utf8'))
parsed_link = parsed_link._replace(path=urllib.quote(parsed_link.path))
encoded_link = parsed_link.geturl()
source = urllib2.urlopen(encoded_link).read()
演示:
>>> import urllib
>>> import urllib2
>>> import urlparse
>>> originalUrl = u'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp\xae-75-desktop-virtualization-solutions'
>>> parsed_link = urlparse.urlsplit(originalUrl.encode('utf8'))
>>> parsed_link = parsed_link._replace(path=urllib.quote(parsed_link.path))
>>> encoded_link = parsed_link.geturl()
>>> encoded_link
'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp%C2%AE-75-desktop-virtualization-solutions'
>>> source = urllib2.urlopen(encoded_link).read()
>>> len(source)
68758
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句