语法
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] 行试图连接到URL和
key_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.