gpt4 book ai didi

python - 如何防止 Scrapy 对请求 URL 进行 URL 编码

转载 作者:太空狗 更新时间:2023-10-29 21:11:06 25 4
gpt4 key购买 nike

我希望 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)

最佳答案

我不想对 [] 进行编码,所以我这样做了。

当创建一个 Request 对象时,scrapy 应用了一些 url 编码方法。要恢复这些,您可以使用自定义中间件并根据需要更改 url。

您可以像这样使用下载器中间件:

class MyCustomDownloaderMiddleware(object):

def process_request(self, request, spider):
request._url = request.url.replace("%5B", "[", 2)
request._url = request.url.replace("%5D", "]", 2)

不要忘记像这样“激活”settings.py 中的中间件:

DOWNLOADER_MIDDLEWARES = {
'so.middlewares.MyCustomDownloaderMiddleware': 900,
}

我的项目名为so,文件夹中有一个文件middlewares.py。您需要根据您的环境调整它们。

致谢:Frank Martin

关于python - 如何防止 Scrapy 对请求 URL 进行 URL 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24884011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com