暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python编程requests库的部分使用与说明

猿农圈 2022-09-10
193

Python urllib库使用起来很麻烦,尤其是在进行网络爬取时。比如在处理网页验证和cookies的时候,需要编写Opener和Handler来处理。为了更方便地实现这些操作,有一个更强大的Requests库。

安装requests

requests是第三方库,不是Python内置库,需要手动安装。

相关链接

  • GitHubHTTPS://github.com/psf/requests
  • PyPI:https ://pypi.org/project/requests/
  • 官方文档:https ://docs.python-requests.org/en/latest/

通过 pip 安装

可以通过pip来安装requests,在命令行界面运行以下命令,完成requests库的安装:

pip install requests

requests的基本用法

下面的代码示例使用requests中的 get ()方法发送一个 get 请求。

import requests 
# 发送 get 请求
r = requests.get('https://www.baidu.com')
# 检查响应类型
print(type(r))
# 检查状态码
print(r.status_code)
# 检查响应内容类型
print(type(r.text))
# 检查响应内容
print(r.text)
# 检查 cookie
print(r.cookies)

这里get()调用该方法实现与urllib库中的urlopen()一致,结果返回一个响应对象,然后分别输出响应对象类型、状态码、响应体内容类型、响应体内容、Cookies。

从运行结果可以知道,响应对象requests.models.Response的类型,响应体内容str的类型,Cookies的类型是RequestCookieJar。如果要发送其他类型的请求,可以直接调用其对应的方法:

r = requests.post('https://www.baidu.com') 
r = requests.put('https://www.baidu.com')
r = requests.delete('https://www.baidu.com')
r = requests.head('https://www.baidu.com')
r = requests.options('https://www.baidu.com')

获取请求

构建一个GET请求,请求https://www.baidu.com(网站会判断如果客户端发起GET请求,会返回相应的信息)

import requests

r = requests.get('http://httpbin.org/get')
print(r.text)

输出将如下所示:

  • 如果要添加请求参数,例如添加两个请求参数,其中name值为jack,age值为20。可以写成:
r = requests.get(' http://httpbin.org/get?name=jack&age=20' )

但是推荐最佳的写法如下:

import requests
data = {
'name':'jack',
'age':20,
}
r = requests.get(' http://httpbin.org/get',params=data )
print(r.text)

输出将如下所示:

网页返回内容的类型为 type str。如果符合 json 格式,可以使用json()方法将其转为字典类型,方便解析。

import requests

r = requests.get('http://httpbin.org/get' ) 

# str type 

print(type(r.text))# 以字典形式返回

print(r.json()) 

print(type(r.json()))

输出:

POST 请求

发送 POST 请求

import requests

r = requests.post(' http://httpbin.org/post' ) 

print(r.text)

输出:

POST 请求

发送 POST 请求

import requests
r = requests.post(' http://httpbin.org/post' )
print(r.text)

输出:

Prepared封装请求头

有时如果需要设置请求头,需要用一个Request对象来表示。在 requests 库中,有一个类似的类,叫做 Prepared Request。


from requests import Request,Session

url = 'http://httpbin.org/post'

data = {

 'name':'jack'

}

headers = {

 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0'

}

s = Session()

req = Request('POST',url,data=data, headers=headers)

prepped = s.prepare_request(req)

r = s.send(prepped)

print(r.text)

Request这里引入,然后Request用url、data和headers参数构造一个对象。这时候就需要调用prepare_request()Session的方法将其转化为Prepared Request对象,然后调用该send()方法发送。

这样做的好处是可以使用Request把请求当成一个独立的对象,这样对于队列调度非常方便,后面会用来构造一个Request队列。

文章转载自猿农圈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论