【发布时间】:2014-09-13 01:47:44
【问题描述】:
我希望 Scrapy 不对我的请求进行 URL 编码。我看到scrapy.http.Request 正在导入scrapy.utils.url,它导入了包含变量_ALWAYS_SAFE_BYTES 的w3lib.url。我只需要向 _ALWAYS_SAFE_BYTES 添加一组字符,但我不确定如何在我的蜘蛛类中执行此操作。
scrapy.http.Request 相关行:
fp.update(canonicalize_url(request.url))
canonicalize_url 来自 scrapy.utils.url,scrapy.utils.url 中的相关行:
path = safe_url_string(_unquotepath(path)) or '/'
safe_url_string() 来自 w3lib.url,w3lib.url 中的相关行:
_ALWAYS_SAFE_BYTES = (b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-')
在 w3lib.url.safe_url_string() 内:
_safe_chars = _ALWAYS_SAFE_BYTES + b'%' + _reserved + _unreserved_marks
return moves.urllib.parse.quote(s, _safe_chars)
【问题讨论】:
-
我遇到了这个问题,因为 Web 服务器只接受未编码的逗号,但 Scrapy 将链接中的逗号转换为 %2C。
-
我需要快速解决这个问题,所以我将 self._url = self._url.replace('%2C', ',') 添加到 Request._set_url() 中。从同一个函数中删除 safe_url_string(url) 调用没有帮助。
-
有什么解决办法吗? ...我需要它
标签: python url scrapy url-encoding web-crawler