python urllib2.quote()报错Invalid percent-escape sequence?
背景:在写一个自动去射手网爬字幕的字幕搜索脚本
代码如下
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'前面的
-
后报错消失.
求教产生这种错误的原因,或者有什么比较好的替代方法,新人第一次提问,有什么问题大家指出,虚心接受大家的批评~
Answers
这个问题应该是出在那个网站自己的跳转上
你的请求网址是这样的:
http://sub.makedie.me/sub/?searchword=%E7%BB%BF%E7%AE%AD%E4%BE%A0%20%E7%AC%AC%E4%B8%89%E5%AD%A3%20%E7%AC%AC13%E9%9B%86/Arrow.S03E13.720p.HDTV.X264-DIMENSION.chn
在浏览器打开后最终跳转成了:
http://sub.makedie.me/xml/sub/501/501261.xml?search_word=%E7%BB%BF%E7%AE%AD%E4%BE%A0%20%E7%AC%AC%E4%B8%89%E5%AD%A3%20%E7%AC%AC13%E9%9B%86%20Arrow.S03E13.720p.HDTV.X264%DIMENSION.chn&utm_source=search_detail&utm_medium=smart&utm_campaign=subtitle
可以看到网站把
-
变成了
%
,这就导致后面的DI出了问题。
解决方法是把所有的
-
符号变成
%25
response = s.get(url,params=payload,headers=header)
妀为:
response = s.get(url+params,headers=header)
概念混淆了。
看这个 url: http://www.baidu.com/bitches?action=fuckyou
其中action=fuckyou才是params,而/bitches则叫path,你提供的显然是path。
无意黑百毒。