Python爬虫1.4 — requests高级用法教程
Python爬虫1.4 — requests高级用法教程
- 综述
- 设置请求头(headers)
- 设置代理服务器IP(proxy)
- Cookies(Session)
- requests.Session()
- 处理不信任的SSL证书
- 其他博文链接
综述
本系列文档用于对Python爬虫技术的学习进行简单的教程讲解,巩固自己技术知识的同时,万一一不小心又正好对你有用那就更好了。
Python 版本是3.7.4
在上篇文章记录了requests库的基本用法,本篇文章就来讲一下requests库的高级用法,一共包含四个部分:
- 动态设置请求头
- 设置代理服务器IP
- 处理cookie
- 处理不信任的ssl证书
设置请求头(headers)
在爬虫操作中,经常需要携带请求头信息(比如User-Agent、Referer、Host、Origin、Cookie)才能正常访问。
- User-Agent : 浏览器名称,服务器可以知道该请求是从哪个浏览器过来的,在爬虫中经常需要设置这个参数来伪装我们的请求是从浏览器中过来的,这个值也是我们最经常应用的;
- Referer : 表示当前请求是从哪个url过来的,在有些反爬虫请求中,如果不是从指定页面访问该请求,就不会有相关响应;
- Host : 标识请求将要达到那台主机,并会在服务端被验证,如果不符合,就不能正确处理客户端的请求;
- Origin : 说明最初请求是从哪里发起的。Referer显示来源页面的完整地址,而Origin显示来源页面的Origin:
protocal+host
,不包含路径等信息,也就不会包含含有用户信息的敏感内容,跟Referer相似,但是Origin只能用于post请求。Referer适用于所有请求;因此Origin较Referer更安全,多用于防范CSRF攻击; - Cookie : http协议是无状态的, 服务器无法区分多个请求是否来自同一个人,因此需要用cookie来进行标识,一般如果需要登录才能访问的网站就需要发送cookie信息。
GET
请求代码示例
# 引入requests库import requests# 声明定义请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',}# 向指定的url发送请求,并返回url = 'https://www.baidu.com/s'# 传入参数data = {'wd': '中国'}r = requests.get(url=url, params=data, headers=headers)print(r.text)
POST
请求代码示例
# 引入requests库import requests# 声明定义请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',}# 请求地址post_url = 'https://fanyi.baidu.com/sug'# 参数form_data = {'kw': 'baby'}# 进行post请求req = requests.post(url=post_url, data=form_data, headers=headers)print('json:', req.json())
设置代理服务器IP(proxy)
关于代理的一些知识我已经在《Python爬虫 — urllib高级用法教程》这篇文章中已经有讲解,在这里就不再赘述。
使用requests
添加代理也是非常简单,只要在请求方法中(例如requests.get()
或者requests.post()
)传递proxies
参数就可以了,示例代码如下:
GET
请求代码示例
# 引入requests库import randomimport requests# 声明定义代理服务器列表proxy_list = [{"http": "58.21.202.124:8080"},{"http": "58.21.202.39:8080"},{"http": "39.107.232.194:8080"}]# 随机选择一个代理proxy = random.choice(proxy_list)# 声明定义请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',}# 请求地址url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'# 进行GET请求,打印响应结果try:req = requests.get(url=url, headers=headers, proxies=proxy)print(req.text)except requests.exceptions.ConnectionError as e:print(e)
POST
请求代码示例
# 引入requests库import randomimport requests# 声明定义代理服务器列表proxy_list = [{"http": "58.21.202.124:8080"},{"http": "58.21.202.39:8080"},{"http": "39.107.232.194:8080"}]# 随机选择一个代理proxy = random.choice(proxy_list)# 声明定义请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',}# 请求地址url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'# 进行POST请求,打印响应结果try:req = requests.post(url=url, headers=headers, proxies=proxy)print(req.text)except requests.exceptions.ConnectionError as e:print(e)
Cookies(Session)
如果在一个相应中包含了cookie
,那么可以利用cookies
属性拿到这个返返回的cookie
值,例如:
# 引入requests库import requests# GET访问# 向指定的url发送请求,并返回url = 'https://www.baidu.com/'# 发送get请求req = requests.get(url=url)# 响应内容print('Cookies信息:', req.cookies)print(req.cookies.get_dict())
requests.Session()
上面那个不是重点,重点的是requests.Session()
;之前使用urllib
库的时候是可以使用opener
发送多个请求,多个请求之间是可以共享cookie
的。那么如果使用requests
,也要达到共享cookie
的目的,那么可以使用requests
库给我们提供的session
对象。注意,这里的session
不是web开发中的那个session
,这个地方只是一个会话的对象而已。还是以人人网登陆为例,使用requests
来实现,示例代码如下:
# 引入requests库import requests# 声明定义headerheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}# 创建session对象session = requests.Session()# 人人网登陆地址post_uel = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2019621044248'# 参数form_data = {'email': '188****7357', # 这是手机号,我隐藏掉中间四位'icode': '','origURL': 'http://www.renren.com/home','domain': 'renren.com','key_id': '1','captcha_type': 'web_login','password': '01cb55635986f56265d3b55aaddaa79337d094cb56d6cf7724343a93ad586fe7','rkey': 'd5ff51375d8eb17a011cad5622d835fd','f': 'http%3A%2F%2Fwww.renren.com%2F971686685%2Fprofile'}ret1 = session.post(url=post_uel, headers=headers, data=form_data)print('登陆结果:', ret1.json())print('*' * 50)# 人人网个人中心地址get_url = 'http://www.renren.com/971686685/profile'ret2 = session.get(url=get_url)print(ret2.content.decode())
处理不信任的SSL证书
对于那些已经被信任的SSL证书的网站,例如http://www.baidu.com/
,那么使用requests
库直接就可以正常的返回响应。请求可以为HTTPS请求验证SSL证书,就像web浏览器一样,SSL验证默认是开启的,如果证书验证失败,请求会抛出SSLError遇到请求的SSL验证,可以直接跳过不验证,将verify=False设置一下即可示例代码:
# 引入requests库import requests# 向指定的url发送请求,并返回url = 'https://www.12306.cn/'# 发送get请求req = requests.get(url=url, verify=False)print(req.content)
其他博文链接
- Python爬虫1.1 — urllib基础用法教程
- Python爬虫1.2 — urllib高级用法教程
- Python爬虫1.3 — requests基础用法教程
Python爬虫1.4 — requests高级用法教程相关推荐
- Python爬虫4.4 — selenium高级用法教程
Python爬虫4.4 - selenium高级用法教程 综述 Headless Chrome 设置请求头 设置代理IP 常用启动项参数options设置 Cookie操作 selenium设置coo ...
- (转)python requests 高级用法 -- 包括SSL 证书错误的解决方案
(转)python requests 高级用法 -- 包括SSL 证书错误的解决方案 参考文章: (1)(转)python requests 高级用法 -- 包括SSL 证书错误的解决方案 (2)ht ...
- 爬虫—Requests高级用法
Requests高级用法 1.文件上传 我们知道requests可以模拟提交一些数据.假如有的网站需要上传文件,我们也可以用requests来实现. import requestsfiles = {' ...
- Python 爬虫 xpath 数据解析基本用法
Python 爬虫 xpath 数据解析基本用法 1. 基本语法 1.1 解析 html 语法 1.2 获取标签 1.3 获取标签中的内容 1.4 获取标签中的属性 1.5 通过内容寻找结点 2. 实 ...
- python爬虫之PyQuery的常用用法
安装依旧很简单pip install pyquery,对于pycharm的安装看这篇pycharm安装第三方库 首先我们定义一个HTML文本段作为下边的例子 <html><head& ...
- 【Python爬虫系列教程 5-100】 Requests高级用法:文件上传,如何设置SSL证书验证、处理超时设置 、身份认证和代理设置
文章目录 高级用法 文件上传 Cookies Session维持 SSL证书验证 超时设置 身份认证 代理设置 Prepared Request 高级用法 上篇,我们了解了requests的基本用法, ...
- python requests 高级用法
转自 http://www.myvary.cn/index.php/2017/04/29/python-requests/ 高级用法 本篇文档涵盖了 Requests 的一些高级特性. 北上广深杭 交 ...
- 爬虫:Requests高级用法
目录 1.文件上传 2.Cookies cookies的遍历解析 构造cookies 3.会话维持 4.SSL证书认证 一.忽略警告 二.捕获警告到日志的方式或略告警 三.指定对应的客户端证书 5.代 ...
- Python 爬虫利器之 Pyppeteer 的用法
如果大家对 Python 爬虫有所了解的话,想必你应该听说过 Selenium 这个库,这实际上是一个自动化测试工具,现在已经被广泛用于网络爬虫中来应对 JavaScript 渲染的页面的抓取. 很多 ...
最新文章
- Linux启动检测内存条错误,linux检测程序内存泄漏和内存错误
- python3 str bytes bytearray 互相转换
- Jobs(三) HTML的form表单提交中文后,后台取出乱码的问题
- 让LoadRunner再次走下神坛
- 面试精讲之面试考点及大厂真题 - 分布式专栏 22 分布式系统下调用链追踪技术
- The use specified as definer('root'@'%') does not exist的解决办法
- 【Flink】Flink 源码阅读笔记(15)- Flink SQL 整体执行框架
- 目标反射回波检测算法及其FPGA实现 之二:互相关/卷积/FIR电路的实现
- Kubernetes Node Controller源码分析之配置篇
- Bailian4122 切割回文【DP】
- 苹果计算机音乐谱大全,macOS乐谱制作软件大全推荐~
- 将R Markdown文档变成互动体验
- 计算机操作系统核心知识点总结面试笔试要点
- Excel教程:从头认识Excel数据透视表【网盘分享108集教程】
- 2021年度国内网络安全事件总结
- 统计检验方法 大全,t -test 检验,Anova 检验,卡方检验,Kolmogorov–Smirnov 检验
- 关于深度学习人工智能模型的探讨(一)(1)
- 小米5测试机软件,小米手机硬件检测软件
- Tableau实战 Tableau官网各版块访问情况(三)页面停留访问人数交叉分析
- 数字音频总线A2B开发详解十一(A2B一Slave板做音效处理-31段EQ,高中低音分频,延时,3D音效等)
热门文章
- 奇点云数据中台技术汇 | 数据智能模型——数据中台航母的作战集群
- matlab绘制系统函数频率特性,实验七用MATLAB进行系统频率特性曲线绘制
- Window XP驱动开发(十三) 芯片功能驱动端 (代码实现,针对USB2.0 芯片CY7C68013A)
- 网络协议 P2p 学习 - Shareaza
- ESP8266实现在线升级OTA
- 【论文合集】Awesome Backdoor Learning
- SOLIDWORKS和CATIA两款三维设计软件区别
- el-table动态渲染表格列el-table-column且里边嵌套el-popover弹出框语法
- elements-Plus Popover 弹出框自定义样式
- 理解binder--内核层.pdf