Python requests.get() - The Ultimate Guide

544 阅读16分钟

语法

requests.get(url, args)

你可以用以下一个或多个参数代替args ,这些参数以逗号分隔。

参数说明
url需要的参数请求的URL
params可选的使用URL查询字符串发送数据。字典,图元组列表,或字节。
allow_redirects可选的默认情况下,True :允许重定向。如果False ,代码会阻止重定向到另一个网站或同一网站的另一个网页。
auth可选的通常被称为 基本认证.默认情况下,这个值是None :不需要认证。该格式是一个有两个元素的元组。
cert可选的默认情况下,cert 等于启用:检查是否有有效的SSL证书。如果SSL证书无效,将出现一个SSLError
cookies可选的发送到指定URL的cookies字典。默认情况下,该值为None :不发送cookies。
headers可选的默认情况下,该值为None 。如果True ,则向指定的URL发送HTTPS头文件的字典
proxies可选的如果你是一个狂热的WebScraper,或者需要保持你的在线存在的隐蔽性,使用代理是一个答案。 代理服务器将你的IP地址从外界隐藏起来。
stream可选的默认情况下,这个值是False 。如果是False ,响应传输表明文件应该立即下载。如果是True ,则流媒体文件。
timeout可选的
verify可选的

背景

请求库为Python程序员提供了对网站的简单访问。通过使用这个库,编码员可以连接、访问和执行各种数据操作任务。周围有许多库可以进行 HTTP 请求。然而,请求库似乎是最受欢迎的。

当该 请求库发送一个URL时,会发生以下情况。

  • DNS查询将URL转换为一个IP地址(例如:312.245.123.21 )。
  • request 库向这个IP地址发送一个请求。
  • 服务器试图验证这个请求。
  • 服务器返回一个状态代码,如下图所示。

如果requests 库在计算机上不存在,请在继续之前导航到 安装所需的库然后再继续。

注意:本文中的一些例子所使用的URLbooks.toscrape.com欢迎编码者,并鼓励搜刮

状态代码

直接引用自维基百科

HTTP响应状态代码分为五类或类别。状态代码的第一个数字定义了响应的类别。后面两个数字没有任何分类或归类的作用。这五个类别是。

1XX信息性响应收到请求后继续处理。
2XX成功请求被成功接收,理解并接受。
3XX重新定向需要进一步的行动来完成该请求。
4XX客户端错误请求包含无效的语法或不完整的数据。
5XX服务器错误服务器未能满足一个有效的请求。

安装所需的库

在任何请求发生之前,将需要安装一个新的库。请求库允许访问它的许多方法,并使数据操作变得轻而易举!

要安装这个库,请导航到一个IDE 终端。在命令提示符()下,执行下面的代码。对于本例中使用的终端,命令提示符是一个美元符号()下,执行下面的代码。对于本例中使用的终端,命令提示符是一个美元符号()。你的终端提示可能不同。

$ pip install requests

点击键盘上的键,开始安装过程。

如果安装成功,终端上会显示一条信息,表明这一点。

"获取 "请求。提出请求

这个方法使用GET请求来连接到一个网站。这个函数需要一个URL作为参数。在这个例子中,会返回一个状态码并显示连接的状态(成功/失败)。 如果无效,脚本会突然结束。

运行这个脚本。如果成功,一个以2XX开头的状态代码会输出到终端。

  • 第[1]行导入request 库。
  • 第[2]行试图连接到URL。
  • 第[3&4]行输出状态代码。这两行做的是同样的事情。
  • 第[5]行关闭打开的连接。
import requests
print(response.status_code)
response = requests.get('https://books.toscrape.com')

import requests
print(requests.codes.ok)
response.close()

输出

200
200

如上所述,如果你的状态代码不是200,很有可能脚本会失败。为了防止这种情况,可以用一个try/except语句来包装代码。

  • 第[1]行导入request 库。
  • 第[2]行初始化了try语句。这里的代码将首先运行。
  • 第[3]行执行一个GET请求,连接到URL。
  • 第[4]行如果成功,OK将输出到终端。
  • 第[5]行关闭打开的连接。
  • 第[6]行是except语句。如果try语句失败,代码就会落到这里。
  • 第[7]行向终端输出Error消息。脚本结束了。

代码。

import requests
try:
    response = requests.get('https://books.toscrape.com')
    print('OK')
    response.close()
except:
    print('Error')

"get "请求。响应内容

当下面的代码运行时,请求的网页上的HTML代码会输出到终端。

  • 第[1]行导入request 库。
  • 第[2]行初始化了try语句。这里的代码将首先运行。
  • 第[3]行执行一个GET请求,连接到URL。
  • 第[4]行如果成功,OK将输出到终端。
  • 第[5]行关闭打开的连接。
  • 第[6]行是except语句。如果try语句失败,代码就会落到这里。
  • 第[7]行将错误输出到终端。脚本结束了。

代码。

import requests
try:
    response = requests.get('https://books.toscrape.com')
    print(response.text)
    response.close()
except:
    print('Error')

输出

下面显示的是HTML代码的一小部分。

<article class="product_pod">
<div class="image_container">
<a href="catalogue/the-boys-in-the-boat-nine-americans-and-their-epic-quest-for-gold-at-the-1936-berlin-olympics_992/index.html"><img src="media/cache/66/88/66883b91f6804b2323c8369331cb7dd1.jpg" alt="The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics" class="thumbnail"></a>
</div>
...

使用 "timeout"

这个方法允许编码者设置代码在超时前等待多长时间。

  • 一个连接
  • 响应

在下面的例子中,连接时间等于2秒。响应时间等于4秒。

最好的做法是将超时参数添加到每个请求中。

注意:如果不输入,代码可以在崩溃前挂起两分钟。依赖于浏览器。

  • 第[1]行导入request 库。
  • 第[2]行初始化了try语句。这里的代码将首先运行。
  • 第[3]行执行一个GET请求以连接到URL,并设置一个超时
  • 第[4]行如果响应成功,URL的HTML代码将输出到终端。
  • 第[5]行关闭开放连接。
  • 第[6]行是except语句。如果try语句失败,代码就会落到这里。
  • 第[7]行输出Error到终端。脚本自动终止。

代码。

import requests
try:
    response = requests.get('https://books.toscrape.com', timeout=(2, 4))
    print(response.text)
    response.close()
except:
    print('Error')

输出。

见上文。

"get "的请求。"params"

在某些时候,你可能需要使用一个URL查询字符串来发送数据。如果查询是硬编码的,其格式将类似于下面。

例如 somewebsite.com?key1=val&key2=val

注意:第一个参数包含一个问号(?),表示一个单一的值。如果传递一个以上的值,在附加值之间使用安培号(&)。

请求库允许你轻松地将这些参数作为以下数据类型之一来传递。

对于这个例子,测试网站httpbin是URL。

  • 第[1]行导入requests 库。
  • 第 [2] 行将两个key:value对分配给一个 dictionary。
  • 第 [3] 行试图连接到URLkey_vals 字典到params
  • 第 [4] 行输出 附加了key_vals 内容的URL
  • 第[5]行关闭打开的连接。

代码。

import requests
key_vals  = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=key_vals)
print(response.url)
response.close()

输出。

https://httpbin.org/get?key1=value1&key2=value2

"get" 请求:"allow_redirects"

这个方法不是必须的,可以是True或False。默认情况下,这个值是True:允许重定向。如果是False,代码会阻止重定向到另一个网站或同一网站的另一个网页。

  • 第[1]行导入requests 库。
  • 第[2]行尝试连接到URL,并将allow_redirects 设置为False
  • 第[3]行输出响应代码到终端。
  • 第[4]行关闭开放连接。

代码。

import requests
response = requests.get('https://app.finxter.com', allow_redirects=False)
print(response.status_code)
response.close()

输出。

302

"get" 请求。"auth"

通常被称为 基本认证,这是最简单的使用方法之一。这个选项不是必须的。默认情况下,这个值是None :不需要认证。该格式是一个有两个元素的元组。

  • 第[1]行导入requests 库。
  • 第[2]行试图连接到并将auth ,以获得一个用户名和密码。
  • 第[3]行输出响应代码到终端。
  • 第[4]行关闭开放连接。

代码。

import requests
response = requests.get('https://www.facebook.com/', auth=('username', 'password'))
print(response.status_code)
response.close()

输出。

200

关于其他认证方法,请点击这里

"获取 "请求。"cert "和 "验证"

这个方法需要一个有效的SSL证书。该证书用于HTTPS请求。

SSL证书是一个小文件,将指定的证书连接到公司的详细信息。一个有SSL证书的网站被认为是安全的。默认情况下,cert 等于启用:检查是否有有效的SSL证书。如果SSL证书无效,将出现一个SSLError

  • 第[1]行导入requests 库。
  • 第[2]行尝试连接到URL并将cert设置为SSL证书的位置和文件名。
  • 第[3]行输出响应代码到终端。
  • 第[4]行关闭开放连接。

代码。

import requests
response = requests.get('https://somesite.com', cert='certs/my_cert.cert')
print(response.status_code)
response.close()

输出。

200

如果不成功,一个错误代码输出到终端,显示细节。也许SSL证书没有设置或设置不当。为了解决这个问题,使用验证并设置为False

代码。

response = requests.get('https://somesite.com', cert='certs/my_cert.cert', verify=False)
print(response.status_code)
response.close()

输出。

在这个例子中,似乎返回了`成功`的状态代码。然而,我们确实得到了一个关于验证的警告。

<Response [200]>
    ...
    Unverified HTTPS request is being made to host 'somesite.com'. Adding certificate verification is strongly advised. 
    ...

"get "请求。"cookies"

这个方法不是必须的,是一个发送到指定URL的cookie的字典。默认情况下,其值为None :没有发送cookies。

这个例子使用测试网站httpbin并向一个URL发出一个自定义的cookie。

  • 第[1]行创建一个cookie。
  • 第[2]行传递一个URL并将cookie设置为my_cookies
  • 第[3]行将内容输出到终端。
  • 第[4]行关闭开放连接。

代码。

my_cookies  = dict(cookies_are='working')
response = requests.get('http://httpbin.org/cookies', cookies=cookies)
print(response.text)
response.close()

输出。

{
  "cookies": {
    "cookies_are": "working"
  }
}

"get" 请求。"headers"

这个方法是不需要的。默认情况下,这个值是None 。如果True ,一个HTTPS头信息的字典 会传输到指定的URL。

当一个HTTP请求发起时,一个User-Agent字符串与请求一起传输。这个字符串包含你的系统的以下细节。

  • 应用程序类型。
  • 操作系统。
  • 软件供应商。
  • 请求的用户代理的软件版本。

该服务器使用这些细节来确定你的计算机的能力。

在这个例子中,这段代码将向服务器发送其头信息。

  • 第[1]行导入request 库。
  • 第[2]行将一个格式良好的User-Agent字符串保存到hdrs变量中。
  • 第[3]行尝试连接到URL,并将头信息设置为hdrs
  • 第[4]行将头信息响应输出到终端。
  • 第[5]行关闭打开的连接

代码。

import requests
hdrs = {
    "Connection": "keep-alive",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 
    like Gecko) Chrome/72.0.3626.121 Safari/537.36"}

response = requests.get('https://app.finxter.com', headers=hdrs)
print(response.headers)
response.close()

输出。

{'Server': 'nginx/1.14.0 (Ubuntu)', 'Date': 'Fri, 05 Nov 2021 16:59:19 GMT', 'Content-Type': 'text/html; charset=utf-8',
'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-Frame-Options': 'DENY', 'Vary': 'Cookie', 'X-Content-Type-Options': 'nosniff', 'Set-Cookie': 'sessionid=0fb6y6y5d8xoxacstf74ppvacpmt2tin; expires=Fri, 19 Nov 2021 16:59:19 GMT; HttpOnly; Max-Age=19600; Path=/; SameSite=Lax', 'Content-Encoding': 'gzip'}

注意:这是一个伟大的Python功能。如果你对Web Scraping感兴趣,你可能想进一步深入研究这个话题。

"get "请求。"代理机构"

如果你是一个狂热的网络搜刮者,或者需要保持你在网上的隐蔽性,使用代理就是答案。 代理将你的IP地址从外部世界隐藏起来。

有几个免费/付费的代理服务,其中有一个IP地址列表,并每天更新。

注意:Finxter学院不保证任何IP地址。你将需要自己寻找来源。

在这个例子中,我们从一个免费的代理服务中获得一个新的IP地址,并将其添加到一个字典中。

  • 第[1]行导入request 库。
  • 第[2]行设置一个URL到the_url 变量。
  • 第[3]行以字典的形式添加了一个新的代理,截至目前。
  • 第[4]行尝试连接到该URL,并将代理设置为my_proxy
  • 第[5]行将状态代码响应输出到终端。
  • 第[6]行关闭开放连接。

代码。

import requests
the_url  = 'https://somewebsite.com'
my_proxy = {"https": "https:157.245.222.225:3128"}
response = requests.get(the_url, proxies=my_proxy)
print(response.status_code)
response.close()

输出。

200

"get" 请求。"流"

这个方法是不需要的。默认情况下,该值为False 。如果False ,则传输响应,表明文件应立即下载。如果是True ,则将文件流化。

  • 第[1]行导入request 库。
  • 第[2]行将URL设置为logo位置,并将stream设置为True
  • 第[3]行输出状态代码响应到终端。
  • 第[4]行关闭开放连接。

代码

import requests
response = requests.get('https://app.finxter.com/static/favicon_coffee.png', stream=True)
print(response.status_code)
response.close()

输出。

200

异常处理

有大量的例外情况与request*s*库相关的大量例外。要查看详细的列表,请点击这里

有两种方法来处理这种情况。

分别是

在这个例子中,我们在 中添加了一个 超时requests.get() 。如果连接或服务器超时,就会发生异常。

  • 第[1]行导入request 库。
  • 第[2]行初始化了try语句。这里的代码将首先运行。
  • 第[3]行尝试连接到URL并设置超时。
  • 第[4]行将状态代码输出到终端。
  • 第[5]行关闭开放的连接。
  • 第[6]行是except语句。如果发生超时,代码会落到这里。
  • 第[7]行向终端输出信息*Timed Out!*脚本就结束了。

代码。

import requests
try:
   response = requests.get('https://app.finxter.com', timeout=(2,4))
   print(response.status_code)
   response.close()
except requests.ConnectTimeout():
    print('Timed Out!')

输出。

200

所有异常

请求库中的所有异常都继承自requests.exceptions.RequestException 。对于这个例子,这段代码捕获了所有的异常。

  • 第[1]行导入request 库。
  • 第[2]行初始化了try语句。这里的代码将首先运行。
  • 第[3]行尝试连接到URL并设置超时。
  • 第[4]行将状态代码输出到终端。
  • 第[5]行关闭打开的连接。
  • 第[6]行是except语句。如果有任何异常发生,代码会落到这里。
  • 第[7]行将异常信息(e)输出到终端。脚本结束了。

代码。

import requests
try:
   response = requests.get('https://app.finxter.com', timeout=(2,4))
   print(response.status_code)
   response.close()
except requests.exceptions.RequestException as e:
    print(e)

输出。

200

奖金

你也可以把上面的内容转换成一个可重用的函数。修改这段代码以满足你的要求。

代码。

def error_code(url):
    try:
        response = requests.get('https://app.finxter.c', timeout=(2,4))
    except requests.exceptions.RequestException as e:
        return e
       
nok = error_code('https://app.finxter.com')
print(nok)

"get "的请求。"headers"

这个方法是不需要的。默认情况下,这个值是None 。如果True ,一个HTTPS头信息的字典 会传输到指定的URL。

当一个HTTP请求发起时,一个User-Agent字符串与请求一起传输。这个字符串包含你的系统的以下细节。

  • 应用程序类型。
  • 操作系统。
  • 软件供应商。
  • 请求的用户代理的软件版本。

该服务器使用这些细节来确定你的计算机的能力。

在这个例子中,这段代码将向服务器发送其头信息。

  • 第[1]行导入request 库。
  • 第[2]行将一个格式良好的User-Agent字符串保存到hdrs变量中。
  • 第[3]行尝试连接到URL,并将头信息设置为hdrs
  • 第[4]行将头信息响应输出到终端。
  • 第[5]行关闭打开的连接

代码。

import requests
hdrs = {
    "Connection": "keep-alive",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 
    like Gecko) Chrome/72.0.3626.121 Safari/537.36"}

response = requests.get('https://app.finxter.com', headers=hdrs)
print(response.headers)
response.close()

输出。

{'Server': 'nginx/1.14.0 (Ubuntu)', 'Date': 'Fri, 05 Nov 2021 16:59:19 GMT', 'Content-Type': 'text/html; charset=utf-8',
'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-Frame-Options': 'DENY', 'Vary': 'Cookie', 'X-Content-Type-Options': 'nosniff', 'Set-Cookie': 'sessionid=0fb6y6y5d8xoxacstf74ppvacpmt2tin; expires=Fri, 19 Nov 2021 16:59:19 GMT; HttpOnly; Max-Age=19600; Path=/; SameSite=Lax', 'Content-Encoding': 'gzip'}

注意:这是一个伟大的Python功能。如果你对Web Scraping感兴趣,你可能想进一步深入研究这个话题。

"get "请求。"代理机构"

如果你是一个狂热的网络搜刮者,或者需要保持你在网上的隐蔽性,使用代理就是答案。 代理将你的IP地址从外部世界隐藏起来。

有几个免费/付费的代理服务,其中有一个IP地址列表,并每天更新。

注意:Finxter学院不保证任何IP地址。你将需要自己寻找来源。

在这个例子中,我们从一个免费的代理服务中获得一个新的IP地址,并将其添加到一个字典中。

  • 第[1]行导入request 库。
  • 第[2]行设置一个URL到the_url 变量。
  • 第[3]行以字典的形式添加了一个新的代理,截至目前。
  • 第[4]行尝试连接到该URL,并将代理设置为my_proxy
  • 第[5]行将状态代码响应输出到终端。
  • 第[6]行关闭开放连接。

代码。

import requests
the_url  = 'https://somewebsite.com'
my_proxy = {"https": "https:157.245.222.225:3128"}
response = requests.get(the_url, proxies=my_proxy)
print(response.status_code)
response.close()

输出。

200

"get" 请求。"流"

这个方法是不需要的。默认情况下,该值为False 。如果False ,则传输响应,表明文件应立即下载。如果是True ,则将文件流化。

  • 第[1]行导入request 库。
  • 第[2]行将URL设置为logo位置,并将stream设置为True
  • 第[3]行输出状态代码响应到终端。
  • 第[4]行关闭开放连接。

代码。

import requests
response = requests.get('https://app.finxter.com/static/favicon_coffee.png', stream=True)
print(response.status_code)
response.close()

输出。

200

异常处理

有大量与该库相关的异常。request*s*库相关的大量异常。要查看详细的列表,请点击这里

有两种方法来处理这种情况。

单独地

在这个例子中,我们在 中添加了一个 超时requests.get() 。如果连接或服务器超时,将发生异常。

  • 第[1]行导入request 库。
  • 第[2]行初始化了try语句。这里的代码将首先运行。
  • 第[3]行尝试连接到URL并设置超时。
  • 第[4]行将状态代码输出到终端。
  • 第[5]行关闭开放的连接。
  • 第[6]行是except语句。如果发生超时,代码会落到这里。
  • 第[7]行向终端输出信息*Timed Out!*脚本就结束了。

代码。

import requests
try:
   response = requests.get('https://app.finxter.com', timeout=(2,4))
   print(response.status_code)
   response.close()
except requests.ConnectTimeout():
    print('Timed Out!')

输出。

200

所有异常

请求库中的所有异常都继承自requests.exceptions.RequestException 。对于这个例子,这段代码捕获了所有的异常。

  • 第[1]行导入request 库。
  • 第[2]行初始化了try语句。这里的代码将首先运行。
  • 第[3]行尝试连接到URL并设置超时。
  • 第[4]行将状态代码输出到终端。
  • 第[5]行关闭开放的连接。
  • 第[6]行是except语句。如果有任何异常发生,代码会落到这里。
  • 第[7]行将异常信息(e)输出到终端。脚本结束了。

代码。

import requests
try:
   response = requests.get('https://app.finxter.com', timeout=(2,4))
   print(response.status_code)
   response.close()
except requests.exceptions.RequestException as e:
    print(e)

输出。

200

奖金

你也可以把上面的内容转换成一个可重用的函数。修改这段代码以满足你的要求。

代码。

def error_code(url):
    try:
        response = requests.get('https://app.finxter.c', timeout=(2,4))
    except requests.exceptions.RequestException as e:
        return e
       
nok = error_code('https://app.finxter.com')
print(nok)

总结

在这篇文章中,我们学习了如何。

  • 连接到一个URL
  • 检索和显示状态代码
  • 将HTML代码输出到终端
  • 使用try/except语句来捕捉错误
  • 设置一个超时
  • 关闭任何打开的连接
  • 通过一个URL发送数据
  • 允许或阻止重定向
  • 使用认证
  • 使用SSL证书并验证相同的内容
  • 使用cookies
  • 使用头文件
  • 使用代理机构
  • 使用流
  • 实施异常处理

The postPython requests.get() - The Ultimate Guidefirst appeared onFinxter.