首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理urllib2.urlopen的in?

如何处理urllib2.urlopen的in?
EN

Stack Overflow用户
提问于 2014-10-28 18:04:51
回答 1查看 803关注 0票数 2

我收到了一个网址:https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp®-75-desktop-virtualization-solutions;,这是来自BeautifulSoup的。

代码语言:javascript
复制
url=u'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp\xae-75-desktop-virtualization-solutions'

我想再回到urllib2. urllib2.urlopen。

代码语言:javascript
复制
import urllib2
source = urllib2.urlopen(url).read()

我所犯的错误:

代码语言:javascript
复制
UnicodeEncodeError: 'gbk' codec can't encode character u'\xae' in position 43: illegal multibyte sequence

因此,我尝试:

代码语言:javascript
复制
source = urllib2.urlopen(url.encode("utf-8")).read()

它有页面源,但是它不同于原始的url。

代码语言:javascript
复制
originalUrl = 'https://www.packtpub.com/virtualization-and-cloud/citrix-xenapp®-75-desktop-virtualization-solutions'
originalSource = urllib2.urlopen(originalUrl).read()
originalSource == source

结果是假的。有什么办法修复这个网址吗?如何将u'\xae‘转换为原始®

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-28 18:08:51

URL必须是有效的字节串,非ASCII码点必须正确编码.您需要将代码编码到UTF-8,然后url引用URL的路径:

代码语言:javascript
复制
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()

演示:

代码语言:javascript
复制
>>> 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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26615374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档