requests 库的使用

Python requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。

requests 模块比 urllib 模块更简洁。

使用 requests 发送 HTTP 请求需要先导入 requests 模块:

import requests

请求

GET 请求

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

运行结果如下:
在这里插入图片描述

利用 params 参数自动构建 URL 地址

params = {
    'name': 'chenqimiao',
    'age': 25
}
r = requests.get('http://httpbin.org/get', params=params)
print(r.json())

运行结果如下:

在这里插入图片描述

添加 headers

在发起一个 HTTP 请求的时候,会有一个请求头 Request Headers,通过 headers 参数就可以设置了。如果不设置,某些网站会发现这不是一个正常的浏览器发起的请求,网站就会返回异常的结果,导致网页抓取失败。

要添加 Headers 信息,比如这里想添加一个 User-Agent 字段,可以这样写:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50'
}
r = requests.get('http://httpbin.org/get', headers=headers)
print(r.json())

运行结果如下:
在这里插入图片描述

POST 请求

data = {
    'name': 'chenqimiao',
    'age': 25
}
r = requests.post('http://httpbin.org/post', data=data)
print(r.json())

运行结果如下:
在这里插入图片描述

响应

每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息,如状态码、响应头、响应内容等:

print(r.status_code) # 获取响应状态码
print(r.headers) # 获取响应头
print(r.content) # 获取响应内容

更多响应信息如下:

属性或方法说明
close()关闭与服务器的连接
cookies返回一个 CookieJar 对象,包含了从服务器发回的 cookie
encoding解码 r.text 的编码方式
history返回包含请求历史的响应对象列表
json()返回结果的 JSON 对象
next返回重定向链中下一个请求的 PreparedRequest 对象
ok检查 status_code 的值,如果小于 400,则返回 True,否则,则返回 False
reason响应状态的描述,比如 Not Found 或者 OK
text返回响应的内容,Unicode 类型的数据
url返回响应的 URL

文件上传

files = {'file': open('jd.png', 'rb')}

r = requests.post('http://httpbin.org/post', files=files)
print(r.json())

Session 维持

在 requests 中,如果直接利用 get 或 post 等方法的确可以做到模拟网页的请求,但是这实际上是相当于不同的 Session,相当于你用两个浏览器打开了不同的页面。

通过维护一个 Session 就不用担心 Cookies 的问题了。

s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.json())

运行结果如下:
在这里插入图片描述

SSL 证书验证

现在很多网站都要求使用 HTTPS 协议,但是有些网站可能并没有设置好 HTTPS 证书,或者网站的 HTTPS 证书不被 CA 机构认可,这时候,这些网站可能就会出现 SSL 证书错误的提示。

如果要爬这些网站,可以使用 verify 参数控制是否检验证书,如果将其设置为 False,在请求时就不会再验证证书是否有效。

r = requests.get('https://static2.scrape.center/', verify=False)
print(r.status_code)

运行结果如下:
在这里插入图片描述

超时设置

在本机网络状况不好或者服务器网络响应延迟甚至无响应时,可能需要等待很久才能收到响应,甚至到最后会因为收不到响应而报错。为了防止服务器不能及时响应,应该设置一个超时时间,即超过了这个时间还没有得到响应,那就报错。可以使用 timeout 参数实现这一功能。这个时间的计算是发出请求到服务器返回响应的时间。

r = requests.get('https://httpbin.org/get', timeout=2)

print(r.status_code)

运行结果如下:
在这里插入图片描述

代理设置

某些网站在测试的时候请求几次,能正常获取内容。但是对于大规模且频繁的请求,网站可能会弹出验证码,或者跳转到登录认证页面,甚至可能会直接封禁客户端的 IP,导致一定时间段内无法访问。

为了防止这种情况的发生,可以通过设置代理来解决这个问题。

import requests
proxies = {
  'http': 'http://10.10.10.10:1080',
  'https': 'http://10.10.10.10:1080',
}
requests.get('https://httpbin.org/get', proxies=proxies)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值