今天使用scrapy爬取图片时,发现这个错误:
raise ValueError('Missing scheme in request url: %s' % self._url)
ValueError: Missing scheme in request url: //images2015.cnblogs.com/news_topic/20161020185521154-1185360701.png
显然,scrapy中pipeline在下载图片的过程中,无法识别该目标url。
web中以//
开头的目标链接为“相对协议”,也就是前面省去了 http: 或 https: 字样,这样做的好处是浏览器能够根据你的网站所采用的协议来自动加载 CDN 上托管的文件。
爬取链接文件过程中,应该通过正则表达式将相对协议改为正确的目标url
修改前:
front_image = response.meta.get("front_image_url", "")
article_item["front_image_url"] = [front_image] # pipeline下载图片一定要传list
修改后:
import re
front_image = response.meta.get("front_image_url", "")
if re.match("^(//).*", front_image):
front_image = "https:" + front_image
article_item["front_image_url"] = [front_image] # pipeline下载图片一定要传list