Python 将带有反斜杠字符的变量添加到 URL 字符串时出错

Python error when adding variable with backslash character to URL string

我正在尝试从分配会话 cookie 并生成 HTML 的网站抓取一些数据,其中包含我需要附加到 URL 以获取数据的碎屑代码。当 crumb 变量包含反斜杠时,我 运行 遇到问题(HTTP 401 未经授权)...由于 crumb 是一个变量,我无法弄清楚如何将 r' 添加到开头。我尝试将 .encode('string-escape') 和 .replace('\\','\\\\') 添加到 crumb 变量,但我无法让它工作。

我的代码在 python 2.7 中看起来像这样:

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))    
opener.open('http://www.sample.com')

#Some code here that looks for crumb code in HTML

crumb = 'abc\xyz'

#This line fails when crumb contains a backslash
opener.open('http://www.sample.com/data=' + crumb)

cj.clear()

有谁知道我在尝试打开包含反斜杠的 URL 字符串时如何避免 401 错误?

此外,如果我循环浏览多个面包屑,是否需要每次都清除会话 cookie?

更新:事实证明,反斜杠是从 HTML 中的 \u002F 引入的。我相信如果我在将字符串添加到 URL 之前将它们转换为正斜杠,它会起作用。如何将字符串中的 \u002F 转换为 /?

这里的问题是“\”是 python 中的转义字符,因此要使其成为不包含任何特殊字符的原始字符串,您必须在字符串前添加 "r"。您的代码应如下所示

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))    
opener.open('http://www.sample.com')

#I'm adding a 'r' before the string

crumb = r'abc\xyz'

opener.open('http://www.sample.com/data=' + crumb)

cj.clear()

编辑:您可能必须对“\”进行编码才能使 url 请求的格式正确。所以“\”将是“%5C”。

因为您不能使用 crumb = r'abc\xyz'。我相信 str.encode('string-escape') 功能可能会有所帮助。尝试:

crumb = 'abc\xyz'
crumb.encode('string-escape')