Python 2.7 刮痧罐头';不要在url后面加逗号,而不进行编码

Python 2.7 刮痧罐头';不要在url后面加逗号,而不进行编码,python-2.7,scrapy,Python 2.7,Scrapy,我是否可以强制scrapy请求包含逗号的URL,而不将其编码为%2C?我要爬网的站点(phorum)不接受编码的URL并将我重定向到根目录 例如,我要解析一个站点:example.phorum.com/read.php?12,8 url被编码为:example.phorum.com/read.php?12%2C8= 但每次尝试请求此url时,我都会被重定向到包含主题列表的页面: example.phorum.com/list.php?12 在这些示例中,URL 12是类别号,8是主题号 我试图

我是否可以强制scrapy请求包含逗号的URL,而不将其编码为
%2C
?我要爬网的站点(phorum)不接受编码的URL并将我重定向到根目录

例如,我要解析一个站点:
example.phorum.com/read.php?12,8

url被编码为:example.phorum.com/read.php?12%2C8=

但每次尝试请求此url时,我都会被重定向到包含主题列表的页面:

example.phorum.com/list.php?12
在这些示例中,URL 12是类别号,8是主题号

我试图通过禁用重定向中间件来禁用重定向:

    DOWNLOADER_MIDDLEWARES = {
        'scrapy.contrib.downloadermiddleware.redirect.RedirectMiddleware': None,
    }
在蜘蛛中:

handle_httpstatus_list = [302, 403]
此外,我尝试重写此URL并通过子解析器请求它:

    Rules = [Rule(RegexLinkExtractor(allow=[r'(.*%2C.*)']), follow=True, callback='prepare_url')]
    def prepare_url(self, response):
        url = response.url
        url = re.sub(r'%2C', ',', url)
        if "=" in url[-1]:
            url = url[:-1]
        yield Request(urllib.unquote(url), callback = self.parse_site)
其中parse_site是目标解析器,它仍然使用编码的URL调用


提前感谢您的反馈

您可以尝试
canonicalize=False
。iPython会话示例:

In [1]: import scrapy
In [2]: from scrapy.contrib.linkextractors.regex import RegexLinkExtractor   
In [3]: hr = scrapy.http.HtmlResponse(url="http://example.phorum.com", body="""<a href="http://example.phorum.com/list.php?1,2">link</a>""")
In [4]: lx = RegexLinkExtractor(canonicalize=False)
In [5]: lx.extract_links(hr)
Out[5]: [Link(url='http://example.phorum.com/list.php?1,2', text=u'link', fragment='', nofollow=False)]
[1]中的
:导入刮屑
在[2]中:从scrapy.contrib.linkextractors.regex导入RegexLinkExtractor
在[3]中:hr=scrapy.http.HtmlResponse(url=”http://example.phorum.com,正文=“”)
在[4]中:lx=RegexLinkExtractor(canonicalize=False)
[5]:lx.提取链接(hr)
Out[5]:[Link(url='1]http://example.phorum.com/list.php?1,2',text=u'link',fragment='',nofollow=False)]