python urllib.quote()报错 Invalid percent-escape sequence?

2015-10-25 16:06:05 +08:00
 theohateonion

背景:在写一个自动去射手网爬字幕的字幕搜索脚本

代码如下

import sys                                                                                               
import urllib2                                                                                           
import requests                                                                                          
import re                                                                                                
reload(sys)                                                                                              
sys.setdefaultencoding("utf-8")                                                                          

def download(searchname):                                                                                
    header = {                                                                                           
            'Host':'sub.makedie.me',                                                                     
            'Pragma':'no-cache',                                                                         
            'Referer':'http://sub.makedie.me/',                                                          
            'Upgrade-Insecure-Requests':'1',                                                             
            'User-Agent':'Mozilla/5.0 (X11; Linux x86_64)     AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36'}
    payload = {'searchword' : searchname}                                                                
    url = 'http://sub.makedie.me/sub/'                                                                      
    s = requests.Session()                                                                                  
    response = s.get(url,params=payload,headers=header)                                                     
    if response.status_code == requests.codes.ok:                                                           
        file = response.text                                                                                
    return file                                                                                             



file_temp = open('filetemp.txt','w')                                                                        
file_temp.write(download(urllib2.quote("绿箭侠 第三季 第 13 集 /Arrow.S03E13.720p.HDTV.X264-DIMENSION.chn")))

出现问题:

raise InvalidURL("Invalid percent-escape sequence: '%s'" % h)
 requests.exceptions.InvalidURL: Invalid percent-escape sequence: 'DI'

检查之后去掉绿箭侠 第三季 第 13 集 /Arrow.S03E13.720p.HDTV.X264-DIMENSION.chn中'DI'前面的-后报错消失.

求教产生这种错误的原因,或者有什么比较好的替代方法,新人第一次提问,有什么问题大家指出,虚心接受大家的批评~

2291 次点击
所在节点    Python
6 条回复
lxy42
2015-10-25 16:25:23 +08:00
试试 quote_all()
Sylv
2015-10-25 17:24:37 +08:00
脚本在我的 Mac 环境下并没有报这个错,所以我觉得很有可能是你的编码问题导致的,请尝试下以下步骤看看是否有效:
1. 确保脚本文件是以 UTF-8 编码保存的。
2. 脚本头部有正确的编码声明:# -*- coding: utf-8 -*-
3. 去掉 reload(sys) 和 sys.setdefaultencoding("utf-8") 语句,这不是解决 Python 2 编码问题的正确方法,原因可见 /t/163786
4. 去掉 urllib2.quote , requests 会自动帮你将 url 里的参数进行 quote ,不需要多此一举手动 quote 一次。
5. 在中文字符串前加 u : u"绿箭侠 第三季 第 13 集 /Arrow.S03E13.720p.HDTV.X264-DIMENSION.chn"
theohateonion
2015-10-25 18:58:52 +08:00
@Sylv 我已经使用 request 自动传入成功了
关于编码坑的解决真是受教了~
theohateonion
2015-10-25 19:40:05 +08:00
@Sylv 现在求教在 vim 怎么设置 Python build system 的环境变量
Sylv
2015-10-26 04:16:09 +08:00
@theohateonion 你是什么系统?什么运行环境?我没用 vim ,你可以搜下对应环境下怎么设置 vin 的环境变量。
theohateonion
2015-10-26 07:38:33 +08:00
@Sylv h=好的 感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/230940

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX