用scrapy下载图片时遇到的坑--Missing scheme in request url: %s'' % self._url
raise ValueError('Missing scheme in request url: %s' % self._url)
对!还是爬博客园时出现的事情。。。
提示信息说了在请求url中缺失了scheme,吃了语言的亏。嘛是scheme,赶紧谷歌翻译一哈。。。好多意思来着,方案、格式、图、阴谋(这个是真滴-_-||)···有点不靠谱 - -
转念一想不对,完整的url应该是像 "http://www.xxx.com/index.html;user?id=1#comment"。
from urllib.parse import urlparse
url = 'http://www.xxx.com/index.html;user?id=1#comment'
urlparse(url)
# 在ipython中结果为:
# ParseResult(scheme='http', netloc='www.xxx.com', path='/index.html', params='user', query='id=1', fragment='comment')
嗖嘎,原来scheme代表的就是协议,出个表记录一下,算备忘了
| English | Chinese |
|---|---|
| scheme | 协议名 |
| netloc | 域名 |
| path | 路径 |
| params | 参数 |
| query | 查询条件 |
| fragment | 锚点(这个不大确定来着,不过url中#后面跟的应该是锚点叭) |
好了,问题找到鸟,去网页里头翻翻是不是有这种不完整的url

果然是不完整的url。。。
那咋弄呢,做个拼接就ok了嘛

上面简单试了一下,a是完整的url(至少包含协议和域名),b缺失了scheme,c只有路径。通过urljoin这个方法能够补全url,完成网络请求。
对需要下载的图片的url这么加工哈子,就不再raise ValueError('Missing scheme in request url: %s' % self._url)了。。。亲测有效,顺利爬完100页。。。\(o)/
其实urllib.parse里头还挺多好用的函数来着,个人常用的就是urljoin和urlparse了。别的用到时看看源码或者文档就ok了。。。
浙公网安备 33010602011771号