如何在Scrapy中使用方括号的url创建请求?

时间:2015-12-08 21:35:30

标签: python http scrapy

我正在尝试抓一个启动网址的页面

'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的请求?

2 个答案:

答案 0 :(得分:0)

google for&#34; 百分比编码&#34;。 网址中不允许使用方括号,因此Request方法会自动对您的网址进行编码。

答案 1 :(得分:0)

url = 'ARTICLE#D[A:ARTICLE]'
url = urllib.quote(url)

然后你可以urlparse.urljoin(example_url, url)