强制 Python Scrapy 不编码 URL

Force Python Scrapy not to encode URL

有一些URL里面有[]

http://www.website.com/CN.html?value_ids[]=33&value_ids[]=5007

但是当我尝试用 Scrapy 抓取这个 URL 时,它会请求这个 URL

http://www.website.com/CN.html?value_ids%5B%5D=33&value_ids%5B%5D=5007

如何强制 scrapy 不对我的 URL 进行 urlenccode?

创建 Request 对象时,scrapy 会应用一些 url 编码方法。要还原这些,您可以使用自定义中间件并将 url 更改为您的需要。

您可以像这样使用 Downloader Middleware

class MyCustomDownloaderMiddleware(object):

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

不要忘记 "activate" settings.py 中的中间件,像这样:

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

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