Requests报”requests.exceptions.MissingSchema: Invalid URL {url}: No schema supplied. Perhaps you meant http://{url}? “的原因以及解决办法

  • Post category:Python

问题原因

该问题的错误信息 “requests.exceptions.MissingSchema: Invalid URL {url}: No schema supplied. Perhaps you meant http://{url}?” 意味着请求的URL中没有标明协议,例如http或https等。这通常出现在以下两种情况下:

  1. 代码中没有给出正确的URL格式,缺失协议名称。
  2. URL 在输入的时候出现问题,缺少了协议前缀。

接下来会分别介绍这两种情况的解决办法。

解决办法

  1. 缺失协议名称

当代码中没有给出正确的URL格式,例如没有指定URL的协议名称时,就会出现 “requests.exceptions.MissingSchema” 的错误信息。在这种情况下,应该修改代码,添加正确的URL协议前缀,例如 http://https:// 等。以下是一个修改过的例子:

import requests

url = "http://example.com"
response = requests.get(url)

上述例子在URL前添加了 http:// 协议前缀,确保了请求可以正常发送到网站。

  1. URL 输入错误

当 URL 在输入的时候出现问题,例如没有给出正确的协议前缀,就会出现 “requests.exceptions.MissingSchema” 的错误信息。在这种情况下,应该检查输入的URL,确保它的协议前缀(或协议名称)正确。如果协议名称确实缺失,应该添加它的名称。

另外,也可以使用Python中urllib库中的urlparse函数来处理URL。该函数位于urllib库中,可以提取出URL中的各个组成部分,包括协议,主机名,端口号,路径名等。以下是一个使用 urlpsrse 的例子:

import requests
from urllib.parse import urlparse

url = "example.com"
parsed_url = urlparse(url)

if not parsed_url.scheme:
    url = "http://" + url
response = requests.get(url)

上述代码中, urlparse 函数可以从给出的URL中解析出协议前缀,并将其存储在URL对象的 scheme 属性中。如果 scheme 属性不存在,则表示缺失了协议名称,此时可以手动添加协议名称,然后使用修改过的 URL 发送请求。

通过以上两种方法可以解决 “requests.exceptions.MissingSchema” 的问题。