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进行请求。 “missing schema” 意味着你的URL缺少HTTP协议、HTTPS协议或其他协议的前缀。

举个例子,如果你使用 requests.get('google.com'),就会抛出这个异常,因为此URL缺少协议前缀。

解决办法

一般而言,解决这个问题非常简单:

  1. 为URL添加协议前缀,通常是 http://https://
  2. 确保你的URL正确格式化,包括协议前缀、域名、路径等组成部分。
  3. 确认你没有使用类似 variables = { 'url': 'example.com' } 的字典作为URL参数,这会导致请求错误。

下面是一些常见的方法来避免这个错误:

方法1:检查URL地址

确保你的URL开头以 http://https:// 开头。例如,google.com 需要改成 https://google.com

方法2:使用合法的URL字符串

使用一个合法的URL字符串作为参数,如 https://google.com

方法3:使用urllib.parse.urljoin方法

urllib.parse.urljoin 方法可以帮助你构建正确格式的URL。

from urllib.parse import urljoin

base_url = 'https://example.com'
path = 'search'
full_url = urljoin(base_url, path)

response = requests.get(full_url)

方法4:确认没有使用变量

如果你使用变量来表示URL,请确保你将变量名正确传递给函数。

url = 'https://example.com'
response = requests.get(url)

# 错误的用法
response = requests.get({ 'url': url }) 

# 正确的用法
response = requests.get(url) 

综上,requests.exceptions.MissingSchema: Invalid URL {url}: No schema supplied. Perhaps you meant http://{url}? 这个错误意味着你需要检查URL地址是否正确,是否缺少协议前缀,或者使用正确的API来解决问题。