9.Python爬虫利器一之Requests库的用法(一)
requests 官方文档:
http://cn.python-requests.org/zh_CN/latest/user/quickstart.html
request 是一个第三方的HTTP库
1.发起请求
发起GET请求非常简单,直接使用requests的get方法即可。比方说下面的代码获取百度首页的信息。
import requests baidu_url = 'https://www.baidu.com' response = requests.get(baidu_url)
print(response.content.decode())
#基本Get请求
r = requests.get('http://httpbin.org/get')
#如果要加参数,可以利用params参数
payload = {'key1':'values','key2':'valus'}
r = requests.get('http://httpbin.org/get',params=payload)
print r.url
其他常用的HTTP操作例如PUT、DELETE、HEAD、OPTIONS等也支持,调用相应方法即可。
获取结果
发起请求之后,返回值是一个Response对象,利用它我们可以方便的获取结果。
响应对象的常用属性和方法如下。
| 属性名 | 结果 |
|---|---|
| text | HTTP字符 |
| encoding | 响应编码,这个值可以改变,改变之后text属性也会根据编码而变化 |
| content | 未编码的二进制数据 |
| json() | 返回JSON数据 |
| raw | 结果的原始字节流 |
| url | 请求的URL |
| status_code | 状态码 |
| headers | 请求头字典 |
| cookies | cookies字典 |
| history | 如果发生重定向,所有请求对象都会保存到这里 |
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常
自定义header
如果要在请求上添加请求头,也非常简单。有些网站对客户端的限制比较严格,所以我们必须伪装header。
#如果想添加headers 可以传入headers参数
2 headers = {'content-type':'application/jason'}
3 r = requests.get('http://httpbin.org/get',headers = headers)
4 print r.url
假如使用自带的urllib标准库,那么代码就比较复杂了。从这里我们可以看到requests确实非常方便。
headers = {'content-type':'application/jason'}
r = urllib2.request(url,headers = headers)
response = urllib2.urlopen(r)
print response.read().decode()
POST数据
如果我们要发送复杂的表单,就需要POST数据了。和GET传送数据一样,想方法中额外添加一个data参数的事儿。这种方式相当于你在表单中填写这些数据,然后点击表单的提交。
data = {
'name': 'yitian',
'age': 22,
'friends': ['zhang3', 'li4']
}
response = requests.post(f'{base_url}post', data=data)
print(response.text)
有时候POST数据不是使用表单方式,而是直接在请求体中附加参数。那么我们在发送参数的时候不能向data参数添加字典了,而应该传递字符串。
import json
data = {
'name': 'yitian',
'age': 22,
'friends': ['zhang3', 'li4']
}
response = requests.post(f'{base_url}post', data=json.dumps(data))
print(response.text)
备注: json的几个常用方法 json.load(), json.dump() ,json.loads(), json.dumps()
json.loads() : 将json结构转变成Python数据结构
json.dumps():将Python数据结构转变成json结构
json.load(): 读取json文件转成Python数据结构
json.dumps():写入jason文件
参考自: https://python3-cookbook.readthedocs.io/zh_CN/latest/c06/p02_read-write_json_data.html
有些程序(例如Github的API)需要将JSON字符串直接当做请求体发送,比如说上面这种将字典转换为JSON的例子。在这种情况下,我们可以直接将字典的引用传递给方法的json参数,这样就不需要我们手动转换,requests会自动转换。
response = requests.post(f'{base_url}post', json=data)
上传文件
在网页上,上传头像等操作都需要上传multipart/form-data类型的表单。使用requests也非常简单。需要注意打开文件的时候最好使用二进制模式,使用文本模式打开文件可能导致requests不能正确计算文件的大小。
file = open(r'c:\Windows\System32\drivers\etc\hosts', mode='rb')
data = {
'file': file
}
response = requests.post(f'{base_url}post', files=data)
print(response.text)
#requests 支持流失上传的,允许发送大的数据流或文件而无需先把他读入内存。需使用流式上传
with open('massive-body') as f:
requests.post('http://some.url/streamed',data=f)
cookies
如果要获取响应的cookies,调用cookies属性即可,它会返回一个RequestsCookieJar对象,它实现了标准库的http.cookiejar。所以我们可以按照cookiejar的方法来使用RequestsCookieJar。比如说访问百度的时候,它会分配一个cookie,所以我们可以使用下面的代码获取Cookie。
response = requests.get(baidu_url)
print(response.cookies)
如果要在发送数据的时候向服务器传递cookie,需要实例化一个RequestsCookieJar,然后传递给发送方法的cookies参数。
import requests.cookies cookies = requests.cookies.RequestsCookieJar()
cookies.set('name', 'yitian')
response = requests.get(f'{base_url}cookies', cookies=cookies)
print(response.text)
以上就是requests的快速入门。具体的高级应用可以参考官方文档。
9.Python爬虫利器一之Requests库的用法(一)的更多相关文章
- (转)Python爬虫利器一之Requests库的用法
官方文档 以下内容大多来自于官方文档,本文进行了一些修改和总结.要了解更多可以参考 官方文档 安装 利用 pip 安装 $ pip install requests 或者利用 easy_install ...
- Python爬虫利器一之Requests库的用法
前言 之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助.入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取.那么这一节来 ...
- python爬虫(6)--Requests库的用法
1.安装 利用pip来安装reques库,进入pip的下载位置,打开cmd,默认地址为 C:\Python27\Scripts 可以看到文件中有pip.exe,直接在上面输入cmd回车,进入命令行界面 ...
- Python爬虫利器二之Beautiful Soup的用法
上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Be ...
- python爬虫入门三:requests库
urllib库在很多时候都比较繁琐,比如处理Cookies.因此,我们选择学习另一个更为简单易用的HTTP库:Requests. requests官方文档 1. 什么是Requests Request ...
- python爬虫(八) requests库之 get请求
requests库比urllib库更加方便,包含了很多功能. 1.在使用之前需要先安装pip,在pycharm中打开: 写入pip install requests命令,即可下载 在github中有关 ...
- Python爬虫学习笔记-2.Requests库
Requests是Python的一个优雅而简单的HTTP库,它比Pyhton内置的urllib库,更加强大. 0X01 基本使用 安装 Requests,只要在你的终端中运行这个简单命令即可: pip ...
- python爬虫(九) requests库之post请求
1.方法: response=requests.post("https://www.baidu.com/s",data=data) 2.拉勾网职位信息获取 因为拉勾网设置了反爬虫机 ...
- python爬虫学习,使用requests库来实现模拟登录4399小游戏网站。
1.首先分析请求,打开4399网站. 右键检查元素或者F12打开开发者工具.然后找到network选项, 这里最好勾选perserve log 选项,用来保存请求日志.这时我们来先用我们的账号密码登陆 ...
随机推荐
- 20171024xlVBA批量获取PPT\WORD\PDF页数
Public Sub ModifyFileNames() Dim FolderPath As String Dim FileNames As Variant Dim dotPos As Long Di ...
- centOS 6.5采用python+nginx+uwsgi实现爬金十财经日历
上一篇中有关于安装nginx.python.uwsgi的过程,这里不再重述.下面是有关在具体布署中的一些过程和问题处理 一.因为用到了bs4(BeautifulSoup)\paste\lxml所以这些 ...
- 求[1,n]中与m互素的个数
void dfs(int d, ll num, int z) { if (d>cnt) { if (num!=1) ans+=z*n/num; } else { dfs(d+1,num*p[d] ...
- 20165309 实验三 敏捷开发与XP实践
2017-2018-2 20165309实验三<Java面向对象程序设计>实验报告 一.实验内容 1. XP基础 2. XP核心实践 3. 相关工具 二.实验步骤 (一)代码规范 1.在I ...
- h5网页跳转到app,若未安装app,则跳转app下载页面
if(isAndroid){ android(); function android(){ var ifr = document.createElement("iframe"); ...
- java的同步实现
在java编程中,经常需要用到同步,而同步的实现使用最多的就是synchronized关键字了. synchronized关键字涉及到“锁”的概念,首先先了解一下相关锁的知识. java的内置锁:每个 ...
- C# 语法特性 - 匿名方法(C#2.0)
概述 匿名方法的本质其实就是委托. 编译后会生成委托对象,生成方法,然后把方法装入委托对象,最后赋值给声明的委托变量. (匿名方法可以省略参数:编译的时候会自动为这个方法按照委托签名的参数添加参数) ...
- object对象转string字符串
var obj = {}; obj=new Array; obj.name='小王'; obj.sex='男'; var str=JSON.string(obj)
- OGG文件获取创建日期
转载:http://blog.sina.com.cn/s/blog_b0ed98070102v1tr.html 搜索关键字: OGG文件的数据结构以及读取其注释信息的代码 实例说明: "DA ...
- mysql查看和修改密码策略
8.X版本: #查看密码策略 show variables like '%validate_password.policy%'; show variables like '%validate_pass ...