Python Request库的简单实用

1. request库介绍

2. 使用方法

2.1 发送请求

request库设置了不同的方法来发送不同的HTTP请求,如get、post等

2.1.1 关于Get请求的发送

简单的GET请求
get请求是request库最简单的请求,它的使用方法也很简单。

import request
response = request.get('url')

这样我们就得到了一个简单的get请求。


带参数的GET请求
我们在发送请求时,经常需要向服务端发送请求参数,通常参数都是以键/值对的形式置于 URL 中,跟在一个问号的后面。

import request
response = request.get('www.xxx.com/get?id=1')

在url后面加上参数我们就可发送一个带有参数的url。当然,如果你不想这么麻烦,每次都要自己附带参数,request库也提供了params参数来做字典使用。

import request
param = {'id':'1','page':'20'}
response = request.get('www.xxx.com/get',params=param)
print(response.url)

执行结果

www.xxx.com/get?id=1&page=20

2.1.2 其他请求的发送

关于request库还能发送以下请求:

import request
resp_1 = request.post('url')
resp_2 = request.put('url')
resp_3 = request.delete('url')
resp_4 = request.head('url')
resp_5 = request.options('url')

2.1.3 请求头设置方法

在我们执行爬虫程序的时候,我们爬取的页面一般会进行某些反爬的操作。最常见的就是对于header头的识别认证。对于这类反爬,我们可以将请求头进行修改保证爬虫正常执行。

import request
header = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"
}
response = request.get('url',headers=header)

这样我们就将header的内容修改成我们想要的值。

2.2 响应内容

2.2.1 常见相应内容

爬取的内容是我们最终的目的,而我们可以通过以下请求来获得我们想要的内容。

import request
response = request.get('url')

# 获取响应状态码
print(response.status_code)

# 获取响应头信息
print(response.headers)

# 获取响应内容
print(response.text)

#获取响应cookie
print(response.cookie)

#获取响应url
print(response.url)

关于response.text响应内容
执行结果

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8" />

通过text,我们可以直接爬取url的源代码,这里我们需要特别注意一下源代码的编码规则。爬虫在我们没有进行特殊设置时是不能自动识别源代码的编码格式,一般会出现乱码。
解决办法:如常见的utf-8格式,我们可以通过设置参数来让程序识别代码的编码格式。

import request
response = request.get('url')
response.encoding = 'utf-8'
print(response.text)

关于获取状态码和响应头信息

import request
response = request.get('url')

print(response.headers)# 获取响应头信息
print(response.text)# 获取响应内容

执行结果

200
{'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Origin': '*', 'Content-Encoding': 'gzip', 'Content-Type': 'application/json', 'Date': 'Fri, 28 Jun 2019 14:38:09 GMT', 'Referrer-Policy': 'no-referrer-when-downgrade', 'Server': 'nginx', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'Content-Length': '258', 'Connection': 'keep-alive'}
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "hero": "leesin"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "11", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Mozilla/5.0"
  }, 
  "json": null, 
  "origin": "61.144.173.21, 61.144.173.21", 
  "url": "https://httpbin.org/post"
}

2.2.2 二进制响应内容

对于非文本请求(例如图片),你也能以字节的方式访问请求响应体,Requests 会自动为你解码 gzip 和 deflate 传输编码的响应数据。

import requests

response = requests.get('http://xxx.com/3.jpg')
with open('1.jpg','wb') as f:
    f.write(response.content)
    f.close()

这里我们将网页的图片保存下来

2.2.3 JSON 响应内容

Requests 中有一个内置的 JSON 解码器,可以帮助你处理 JSON 数据:

import requests
r = requests.get('https://api.github.com/events')
print(r.json())

# 输出结果
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

2.3 参数传递

2.3.1 文件上传

import requests

file = {
    'file':open('文件名称','rb')
}
response = requests.post("url",file)
print(response.text)

注意要写明文件的位置

2.4 cookie

获取cookie

import requests
response = requests.get('https://www.baidu.com')
print(response.cookies)

会话维持
获取到cookie后,就可以进行模拟登陆操作了

import requests
session = requests.Session()
session.get('http://httpbin.org/cookies/set/number/123456789')
response = session.get('http://httpbin.org/cookies')
print(response.text)

这里我们使用session保存了当前的cookie,让服务器认为是一台浏览器发起的请求,就可以成功打印出cookie。
如果要模型登录验证时,就可以使用requests.Session()来发起请求,他可以模拟浏览器对服务器进行请求,维持了登录会话

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值