我正在尝试抓一个启动网址的页面
'http:listado.example.com.ar/ARTICLE#D[A:ARTICLE]'
其中ARTICLE是蜘蛛电话的参数。 问题是,当我运行我的蜘蛛时,我从服务器获得111连接拒绝。看着scrapy的日志,我看到了下一个:
2015-12-08 17:50:06 [scrapy] DEBUG: Retrying <GET http:listado.example.com.ar/guitarra#D%5BA:guitarra%5D> (failed 1 times): Connection was refused by other side: 111: Connection refused.
蜘蛛发送的请求分别改变了'%5B'和'%5D'的字符'['和']'。
查询start_request方法,我发现Request实例化会更改字符。这是我重写的start_request:
def start_requests(self):
dareq = Request(url='http:listado.example.com.ar/%s#D[A:%s]' % (self.article_name,self.article_name), callback=self.parse_entry)
self.logger.info('REQUEST TO: %s' % dareq.url)
yield dareq
运行蜘蛛我得到下一个日志:
2015-12-08 17:50:06 [merclib] INFO: REQUEST TO: http:listado.example.com.ar/guitarra#D%5BA:guitarra%5D
使用replace方法不起作用,字段dareq.url是只读的,因此无法修复手动修改字段。
如何创建一个有效地正确发送带有方括号的ulr的请求?
答案 0 :(得分:0)
google for&#34; 百分比编码&#34;。 网址中不允许使用方括号,因此Request方法会自动对您的网址进行编码。
答案 1 :(得分:0)
url = 'ARTICLE#D[A:ARTICLE]'
url = urllib.quote(url)
然后你可以urlparse.urljoin(example_url, url)