基础爬虫系列课程授课内容1——requests库的使用
requests库的使用requests简介:Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,Requests它会比urllib更加方便,可以节约我们大量的工作。一、安装requests库非常简单,打开命令行,输入下面的安装命令:pip install requests二、基本使用我们先来看一个使用小例子:import re
requests库的使用
requests简介:
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,Requests它会比urllib更加方便,可以节约我们大量的工作。
一、安装requests库
非常简单,打开命令行,输入下面的安装命令:
pip install requests
二、基本使用
我们先来看一个使用小例子:
import requests
response = requests.get("https://www.baidu.com")
print(type(response))
print(response.status_code)
print(type(response.text))
#获得响应头内容
print(response.headers)
print(response.headers['content-type'])
#还可以用这种方式获取请求头内容
print(response.request.headers)
response.enconding = "utf-8'
print(response.text)
print(response.cookies)
print(response.content)
print(response.content.decode("utf-8"))
这里的response.text返回的是Unicode格式,通常需要转换为utf-8格式,否则就是乱码。response.content是二进制模式,可以下载视频之类的,如果想看的话需要decode成utf-8格式。
提醒一下,不管是通过response.content.decode("utf-8)的方式还是通过response.encoding="utf-8"的方式都可以避免乱码的问题发生。
在requests库中,有几种常见的方法(请求方式):
import requests
requests.post("http://httpbin.org/post") #post请求
requests.put("http://httpbin.org/put") #put请求
requests.delete("http://httpbin.org/delete") #delete请求
requests.head("http://httpbin.org/get") #head请求
requests.options("http://httpbin.org/get") #options请求
(1)我们先来学习get请求:
最基本的get请求:
import requests
url = 'https://www.baidu.com/'
response = requests.get(url)
print(response.text)
带参数的get请求:
如果想查询http://httpbin.org/get页面的具体参数,需要在url里面加上,例如我想看有没有Host=httpbin.org这条数据,url形式应该是http://httpbin.org/get?Host=httpbin.org
举个小例子(下面提交的数据是往这个地址传送data里面的数据):
import requests
url = 'http://httpbin.org/get'
data = {
'name':'zhangsan',
'age':'25'
}
response = requests.get(url,params=data)
print(response.url)
print(response.text)
我们来学习一下Json数据:
举个小例子:
import requests
import json
response = requests.get("http://httpbin.org/get")
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json())
print(response.json()['data'])
这里提醒大家:requests中**response.json()**方法等同于json.loads(response.text)方法。
接下来学习一下获取二进制数据:
在上面提到了response.content,这样获取的数据是二进制数据,用这个方法可以下载图片以及视频资源(图片和视频都是二进制流)。
现在我们要学习添加header
首先说,为什么要加header(头部信息)呢?例如下面,我们试图访问知乎的登录页面(当然大家都你要是不登录知乎,就看不到里面的内容),我们试试不加header信息会报什么错。
import requests
url = 'https://www.zhihu.com/'
response = requests.get(url)
response.encoding = "utf-8"
print(response.text)
结果:
提示发生内部服务器错误(也就说你连知乎登录页面的html都下载不下来)。
<html><body><h1>500 Server Error</h1>
An internal server error occured.
</body></html>
因此,如果想访问就必须得加headers信息!
在浏览器中打开网站页面;
右键点击“检查”
选择“Network”
刷新一下页面
随便点击一个数据包
拉到下面
即可看到user-agent(就是我们需要的头部)
从此以后,就要记得在get方法中加入头部信息啦。
import requests
url = 'https://www.zhihu.com/'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
}
response = requests.get(url,headers=headers)
print(response.text)
这样肯定就能请求到页面了。
(2)post请求:
使用post请求把数据提交到url地址,等同于一字典的形式提交form表单里面的数据。看个小例子:
import requests
url = 'http://httpbin.org/post'
data = {
'name':'jack',
'age':'23'
}
response = requests.post(url,data=data)
print(response.text)
看看响应的结果:
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "23",
"name": "jack"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Content-Length": "16",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.13.0"
},
"json": null,
"origin": "118.144.137.95",
"url": "http://httpbin.org/post"
}
(3)request的高级操作:
文件上传
看个简单的小例子:
import requests
url = "http://httpbin.org/post"
files= {"files":open("test.jpg","rb")}
response = requests.post(url,files=files)
print(response.text)
结果:
获取cookie
举个小例子:
import requests
response = requests.get('https://www.baidu.com')
print(response.cookies)
for key,value in response.cookies.items():
print(key,'==',value)
会话维持
cookie的一个作用就是可以用于模拟登陆,做会话维持。
import requests
session = requests.session()
session.get('http://httpbin.org/cookies/set/number/12456')
response = session.get('http://httpbin.org/cookies')
print(response.text)
好了,这里主要讲解了requests模块当中最常用的两种请求方式——get和post请求。还想要深入学习requests模块功能的小伙伴可以私聊我哦,谢谢。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)