Python 2.7 刮痧罐头';不要在url后面加逗号,而不进行编码
我是否可以强制scrapy请求包含逗号的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是主题号 我试图
%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)]