用scrapy写的爬虫把抓到的图片下载下来时,报了这个错,从字面上看使我们的url除了问题,那究竟是什么错误呢?下面是错误的代码:
item['image_urls'] = sel.xpath('.//*[@class="postmessage defaultpost"]//img/@src').extract()[0]
我们可以在shell里面试一下,这句代码是能够提取出正确的url的。但是提取出来的url却不是item需要的格式。stackoverflow上有关于这个问题的回答,正确的写法应该是这个样子的:
item['image_urls'] = [sel.xpath('.//*[@class="postmessage defaultpost"]//img/@src').extract()[0]]
解释一下,item的image_urls是一个字典,错误的代码中,它把图片的链接http://*****.jpg
当作了一个字典,第一个元素自然是h
,而它真实想要的是http一样的协议名,所以报错如上。只要在url外面加[],整个url就会被当成整体,就能正常运行了