用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

pic5

果然是不完整的url。。。

那咋弄呢,做个拼接就ok了嘛

pic6

上面简单试了一下,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了。。。

posted on 2021-03-16 15:13  Acjm  阅读(244)  评论(0)    收藏  举报

导航