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 选项,用来保存请求日志.这时我们来先用我们的账号密码登陆 ...
随机推荐
- 20170907wdVBA_ImportPicturesBaseOnExcel
Public Sub ImportPicturesBaseOnExcel() Dim shp As Object Dim xlApp As Object Dim Wb As Object Dim Rn ...
- 浅谈微服务架构、容器技术与K8S
关注嘉为科技,获取运维新知 企业应用系统:从单体应用走向微服务架构:从裸金属走向容器. 如果在诸多热门云计算技术诸如容器.微服务.DevOps.OpenStack等之中,找出一个最火的方向,那么可能非 ...
- Web版记账本开发记录(二)
第二天又开始了,继续开始编辑之路. 今天在弄用户登录,也不知道为什么, 挺简单的一个程序耗时还挺多,在编程的过程中我发现昨天的思路有一些问题, 今天又重新理了一下思路. 还将昨天的表格给完善了一些,自 ...
- 深刻理解Web标准,对可用性、可访问性、可维护性等相关知识有实际的了解和实践经验
WEB标准不是某一个标准,而是一系列标准的集合.网页主要由三部分组成:结构(Structure).表现(Presentation)和行为(Behavior).对应的标准也分三方面:结构化标准语言主要包 ...
- CentOS7 下源代码安装apache2.4
Apache httpd 2.4 源代码安装 https://httpd.apache.org/docs/2.4/install.html 这里选用Apache2.4版本. wget http ...
- 【其他】【服务器】【2】把jar包做成服务,在Service中管理
三个文件:service_install.xml,service_install.exe,install-service.bat: 和xx.jar放在同一个目录下 service_install.xm ...
- Leetcode 1008. 先序遍历构造二叉树
1008. 先序遍历构造二叉树 显示英文描述 我的提交返回竞赛 用户通过次数169 用户尝试次数183 通过次数171 提交次数247 题目难度Medium 返回与给定先序遍历 preorder ...
- 改写了禁用或启用oracle数据库的约束的存储过程
改写了网上某位大侠(最开始的源头是哪位没记住)写的禁用或启用oracle数据库所有约束的存储过程,增加了异常控制,以使发生异常时也可以执行下去. –调用过程: 执行前先 set serveroutpu ...
- [luogu P3216] [HNOI2011]数学作业
[luogu P3216] [HNOI2011]数学作业 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 ...
- python 豆瓣验证码识别总结
总结: pytesseract 识别比较标准的图片 识别成功率 还是不错的. 验证码的图片识别 需要先处理好 再用pytesseract 识别 from PIL import Image ...