Python3爬虫之requests库

本文详细介绍了Python3的requests库,从基础的get和post请求,到高级操作如文件上传、Cookies处理、会话维持、SSL证书验证、设置代理、超时设置和身份认证。文中通过实例演示了如何使用requests进行网络请求,并展示了如何处理各种响应内容,包括二进制数据和JSON格式的解析。requests库提供了便捷的方式来处理HTTP请求,使Python爬虫更加高效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实例引入

import requests

r = requests.get('http://www.baidu.com/')
print(type(r))
print(r.status_code)
print(type(r.text))
print(r.text)
print(r.cookies)

运行结果:

 

    urllib库中的urlopen()方法实际上是以Get方式请求网页,而request中相应的方法就是get()方法。我们通过调用get()方法实现与urlopen()相同的操作得到了一个r对象,然后分别输出了r的类型、状态码、响应体的类型、内容、以及Cookies。通过运行可以发现,它的返回类型是requests.models.Response,响应体的类型是str(字符串),Cookies的类型是RequestsCookieJar。requests更方便之处在与其他的请求类型依旧可以用一句话完成。

实例:

import requests

r = requests.post('http://httpbin.org/post')
r = requests.put('http://httpbin.org/put')
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/put')
r = requests.options('http://httpbin.org/put')

 

二、get请求

1.基本写法:

import requests

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

运行结果:我们成功发起了Get请求,返回结果中包含请求头、URL、IP等信息

 

2.带参数的Get请求

对于Get请求如果要附加额外的信息。如:现在要添加两个参数,其中Name是germey,age是22.

实例1:

import requests

r = requests.get('http://httpbin.org/get?name=germy&age=22')
print(r.text)

运行结果:

但是一般情况下,这种信息会用字典来存储,因此我们也可以用params这个参数来构造

import requests
data = {
    'name':"germey",
    'age':22
}
response = requests.get("http://httpbin.org/get", params=data)
print(response.text)

运行结果:

另外,网页的返回类型实际上是str类型,但是它很特殊,是JSON格式的.所以,若要直接解析返回结果,得到一个字典格式的话可以直接调用Json()方法

实例:

import requests

r = requests.get("http://httpbin.org/get")
print(type(r.text))
print(r.json())
print(type(r.json()))

运行结果:可以发现,调用Json()方法,就可以将返回结果是json格式的字符串转化为字典。但是如果返回结果不是JSON格式的时候便会出现解析错误,如:json.decoder.JSONDecodeError异常

3.抓取二进制数据:

实例:

import requests

r = requests.get("https://github.com/favicon.ico")
# Response对象的两个属性
print(type(r.text),type(r.content))
print(r.text)
print(r.content)
# 它的第一个参数是文件名称,第二个参数代表以二进制写的形式打开,可以向文件里写入二进制数据。

运行结果:可以注意到前者出现了乱码,后者结果前带有一个b,这代表是bytes类型的数据。由于图片是二进制数据,所以前者在打印时转化为str(字符串)类型,也就是图片直接转化为字符串,这理所当然会出现乱码。

接着我们将提取的图片保存下来:

import requests
 
r = requests.get("https://github.com/favicon.ico")
with open('favicon.ico','wb')as f:
#利用了Open()方法,它的第一个参数是文件名称,第二个参数代表以二进制写的形式打开
#可以向文件里写入二进制数据
	f.write(r.content)
	f.close()

运行结束可以发现项目文件夹出现了名为favicon.ico的图标。同样的我们可以保存视频和音频。

 

4.添加headers

知乎对网站有着特殊的限制,我们如果不传递headers就不能正常的请求。

实例:

import requests
 
r = requests.get("https://www.zhihu.com/explore")
print(r.text)

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值