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()来发起请求,他可以模拟浏览器对服务器进行请求,维持了登录会话