Python模块-requests模块使用

Posted smoke-star

tags:

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

写在前面

这篇文章是我照着廖雪峰python网站学习的,大致内容差不多,多了我一丢丢的自己的想法。如果发现有什么不对的话请及时联系我。qq:472668561
参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1183249464292448

介绍

这个模块是python的‘必用’模块,用来处理HTTP请求的请求和响应。在这里只介绍一些基本的。
通过pip install requests来安装。

使用版本

我学习时使用的python版本是3.7.4,requests版本2.22.0,算是比较新的版本了,可能不同版本会有差异。

开始

    >url = "http://www.baidu.com"
    >r = requests.get(url)
    >r.status_code
    200

status_code用来显示服务器响应状态码,感兴趣的可以自行百度。

    >r.txt
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'Response' object has no attribute 'txt'
    >r.content
    b'<!DOCTYPE html>
~~~~~~</html>
'

txt参考网站提示显示内容,但是我这提示没有这个属性,可能随着版本更新,已经停止使用了;但是content是可以使用的,不过查看的内容是以‘b’开头,说明以二进制的方式读取,则文件io操作的时候也要以二进制方式进行。

    > with open('./test.txt','w') as f:
    >    f.write(r.content)
    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
    TypeError: write() argument must be str, not bytes
    >with open('./test.txt','wb') as f:
    >    f.write(r.content)
    2381

params参数,适用于带参数的url。

    >r = requests.get(url,params={'wd':'requests','tn':'monline_4_dg','ie':'utf-8'})
    >r.url
    'http://www.baidu.com/?wd=requests&tn=monline_4_dg&ie=utf-8'

url属性用来显示该次请求的url。
reuqests可以对特定类型响应,例如JSON;注意,返回的如果不是JSON格式会报错。

    >r.json()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module> 
        ···   
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

可以将url修改为返回格式是json格式的链接,如Github的API,https://api.github.com/search/repositories?q=language:python&sort=stars
需要传入HTTP Header时,需要传入一个字典作为headers参数,但时一行写难免不直观,多数都是给定headers变量。请求时使用headers=headers。

    >headers = {'User-Agent':'test'}
    >r = requests.get(url,headers=headers)

要使用POST方式请求,把get()改为post(),然后传入data参数作为POST请求的数据。
data跟headers参数用法差不多。

    >data = {'test':'test'}
    > r = requests.post(url,data=data)

requests模块默认使用application/x-www-form-urlencoded对POST数据编码,如果传递JSON数据,可以直接写入JSON参数。内部自动序列化为JSON。

    >params = {'key':'value'}
    >r = requests.post(url,json=params)

如果上传的文件是其他的文件类型,比如excel表格,requests可以把它简化成files参数,注意是files不是file。

    >upload_file = {'file':open('./read.txt','rb')}
    >r = requests.post(url,files=upload_file)

注意:读取时务必使用‘rb‘即二进制读取模式,这样获取的bytes长度才是文件的长度。
可以把post()修改为其他的HTTP请求方式,delete(),put(),head()等。
通过使用headers属性,获取HTTP响应头内容。

    >r.headers
    {'Connection': 'Keep-Alive', 'Content-Length': '17931', 'Content-Type': 'text/html', 'Date': 'Wed, 27 Nov 2019 09:42:22 GMT', 'Etag': '"54d97487-460b"', 'Server': 'bfe/1.0.8.18'}

r.cookies,requests对cookie做了特殊处理,使我们不必解析cookie就可以轻松获取指定的cookie。

    >r.cookies
    <RequestsCookieJar[]>#中括号里显示cookie内容
    <RequestsCookieJar[Cookie(version=0,name='BDORZ', value='27315',~~~~~~rest={}, rfc2109=False)]>

要传入cookie参数时,使用字典作为一个cookies参数。

    >r = requests.post(url,cookies=data)

要指定超时时间时,传入以秒为单位的timeout参数

    >r = requests.post(url,timeout=1)

requests

['ConnectTimeout', 'ConnectionError', 'DependencyWarning', 'FileModeWarning', 'HTTPError', 'NullHandler', 'PreparedRequest', 'ReadTimeout', 'Request', 'RequestException', 'RequestsDependencyWarning', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__author_email__', '__build__', '__builtins__', '__cached__', '__cake__', '__copyright__', '__description__', '__doc__', '__file__', '__license__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__title__', '__url__', '__version__', '_check_cryptography', '_internal_utils', 'adapters', 'api', 'auth', 'certs', 'chardet', 'check_compatibility', 'codes', 'compat', 'cookies', 'delete', 'exceptions', 'get', 'head', 'hooks', 'logging', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'session', 'sessions', 'status_codes', 'structures', 'urllib3', 'utils', 'warnings']

以上是关于Python模块-requests模块使用的主要内容,如果未能解决你的问题,请参考以下文章

你还不会Python网络爬虫中的requests模块使用《一》

request模块

python笔记8:requests模块

Python爬虫:requests模块使用

requests和BeautifulSoup模块的使用

Python接口测试-使用requests模块发送GET请求