Python语言基础——Python 请求模块

Posted 玄链教育

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python语言基础——Python 请求模块相关的知识,希望对你有一定的参考价值。

Python语言基础——Python 请求模块

文章目录

一、Python 请求模块

实例
向网页发出请求,并打印响应文本:
import requests
x = requests.get(‘https://w3school.com.cn/python/demopage.htm’)
print(x.text)
定义和用法
requests 模块允许您使用 Python 发送 HTTP 请求。
HTTP 请求返回响应对象,其中包含所有响应数据(内容、编码、状态等)。
下载并安装请求模块
将命令行导航到 PIP 的位置,然后键入以下内容:
C:\\Users\\Your Name\\AppData\\Local\\Programs\\Python\\Python36-32\\Scripts>pip install requests
语法
requests.methodname(params)
方法
方法 描述
delete(url, args) 向指定的 URL 发送 DELETE 请求。
get(url, params, args) 向指定的 URL 发送 GET 请求。
head(url, args) 向指定的 URL 发送 HEAD 请求。
patch(url, data, args) 向指定的 URL 发送 PATCH 请求。
post(url, data, json, args) 向指定的 URL 发送 POST 请求。
put(url, data, args) 向指定的 URL 发送 PUT 请求。
request(method, url, args) 将指定方法的请求发送到指定的 URL。

尝试/除了使用Python请求模块的正确方法?

try:
    r = requests.get(url, params={'s': thing})
except requests.ConnectionError, e:
    print e #should I also sys.exit(1) after this?

它是否正确?有没有更好的方法来构建它?这会涵盖我的所有基础吗?

答案

看看请求exception docs。简而言之:

如果出现网络问题(例如DNS失败,拒绝连接等),请求将引发ConnectionError异常。

如果罕见的无效HTTP响应,请求将引发HTTPError异常。

如果请求超时,则会引发Timeout异常。

如果请求超过配置的最大重定向数,则会引发TooManyRedirects异常。

请求显式引发的所有异常都继承自requests.exceptions.RequestException

要回答您的问题,您展示的内容不会涵盖您的所有基础。您只会捕获与连接相关的错误,而不是那些超时的错误。

捕获异常时要做的事情取决于脚本/程序的设计。退出是否可以接受?你能继续再试一次吗?如果错误是灾难性的,你不能继续,那么是的,调用sys.exit()是有序的。

您可以捕获基类异常,它将处理所有情况:

try:
    r = requests.get(url, params={'s': thing})
except requests.exceptions.RequestException as e:  # This is the correct syntax
    print e
    sys.exit(1)

或者你可以单独捕捉它们并做不同的事情。

try:
    r = requests.get(url, params={'s': thing})
except requests.exceptions.Timeout:
    # Maybe set up for a retry, or continue in a retry loop
except requests.exceptions.TooManyRedirects:
    # Tell the user their URL was bad and try a different one
except requests.exceptions.RequestException as e:
    # catastrophic error. bail.
    print e
    sys.exit(1)

正如Christian指出:

如果您想要http错误(例如401 Unauthorized)引发异常,您可以调用Response.raise_for_status。如果响应是http错误,那将引发HTTPError

一个例子:

try:
    r = requests.get('http://www.google.com/nothere')
    r.raise_for_status()
except requests.exceptions.HTTPError as err:
    print err
    sys.exit(1)

将打印:

404 Client Error: Not Found for url: http://www.google.com/nothere
另一答案

另外一个明确的建议。似乎最好从特定的一般到一般的错误堆栈来获得所需的错误,因此特定的错误不会被一般错误掩盖。

url='http://www.google.com/blahblah'

try:
    r = requests.get(url,timeout=3)
    r.raise_for_status()
except requests.exceptions.HTTPError as errh:
    print ("Http Error:",errh)
except requests.exceptions.ConnectionError as errc:
    print ("Error Connecting:",errc)
except requests.exceptions.Timeout as errt:
    print ("Timeout Error:",errt)
except requests.exceptions.RequestException as err:
    print ("OOps: Something Else",err)

Http Error: 404 Client Error: Not Found for url: http://www.google.com/blahblah

VS

url='http://www.google.com/blahblah'

try:
    r = requests.get(url,timeout=3)
    r.raise_for_status()
except requests.exceptions.RequestException as err:
    print ("OOps: Something Else",err)
except requests.exceptions.HTTPError as errh:
    print ("Http Error:",errh)
except requests.exceptions.ConnectionError as errc:
    print ("Error Connecting:",errc)
except requests.exceptions.Timeout as errt:
    print ("Timeout Error:",errt)     

OOps: Something Else 404 Client Error: Not Found for url: http://www.google.com/blahblah

以上是关于Python语言基础——Python 请求模块的主要内容,如果未能解决你的问题,请参考以下文章

python2学习------基础语法4(模块)

python基础07

python基础18——模块

python基础学习-python模块的使用

py爬虫资料

Python基础5 常用模块