×

requests用法基础-进阶
  

新手275718 2139

{{ttag.title}}
本节内容
  • 模块的安装 -----------------------基础用法---------------------
  • GET用法、POST用法 -----------------------进阶用法--------------------
  • cookie处理、代理ip、session

一 模块安装:1). 安装requests包还是很方便的,电脑中有python环境,打开cmd,输入pip install requests下载;
如果有同学使用pycharm的话,选择file–>setting–>Project interpreter–>右边"+"号点击—>输入模块名---->选中下载。
2). requests的作用、特点、以及使用流程
  • 作用:模拟用户使用浏览器上网
  • 特点:简单、高效
  • 使用流程:

    • 指定url;
    • 发起请求(requests.get/post);
    • 获取响应信息/数据(response);
    • 持久化存储(保存csv、MySQL、txt等);

二基本用法:1). get(url,headers,params):各用法
获取搜狗首页的页面数据:
import requests        #引包#1指定urlurl = 'https://www.sogou.com/'#2.发起请求response = requests.get(url=url)#3获取响应数据page_text = response.text #text返回的是字符串类型的数据#持久化存储with open('./sogou.html','w',encoding='utf-8') as fp:    fp.write(page_text)print('over!')#也可以直接打印print(page_text)   #这就是服务器给我们返回的数据信息(response)2). headers的使用:
如果没有伪装UA,你发送的请求中的UA是一个爬虫标识;而且现在大部分网站都是有UA检测(反爬机制),所以我们需要UA伪装(反反爬策略)骗过网站,
  • 我们可以打开网站,F12,随意点击一个信息,找到Headers这个标签,翻到最下面有一个 User-Agent ,在python中我们需要对他进行构造。

  • python中有一个随机生成UserAgent的包----fake-useragent,它的安装方法也很简单,pip install fake-useragent。

3). 下面实现上面headers的构造:
#第一种方法#user-agent放在字典中,不光useragent,后面我们讲到的cookie等都需要放入import requestsheaders== {    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}#调用方法,get(传入了两个参数,url,headers)response = requests.get("http://www.baidu.com",headers=headers)使用fake-useragent获取并构造UA:
import requestsfrom fake_useragent import UserAgentua = UserAgent()headers = {'User-Agent': ua.random}url = '待爬网页的url'resp = requests.get(url, headers=headers)4). params 参数
我们使用一个例子来融合headers与params,还是以搜狗为例:
import requestswd = input('enter a word:')url = 'https://www.sogou.com/web'#参数的封装param = {    'query':wd}#UA伪装headers = {    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}response = requests.get(url=url,params=param,headers=headers)#手动修改响应数据的编码response.encoding = 'utf-8'page_text = response.textfileName = wd + '.html'with open(fileName,'w',encoding='utf-8') as fp:    fp.write(page_text)print(fileName,'爬取成功!!!')上面的例子可以看出,如果需要将参数放在url中传递,可以利用 params 参数 。
5)post用法:我们访问网站的时候,有时候是需要提交数据给网页的,如果提交的数据中没有网站所认证的信息,那么网站将会返回给你错误或者其他信息。
最基本的POST请求:
response = requests.post("http://www.baidu.com/",data=data)传入数据的之后就不需要使用urlencode进行编码了。
实例(实现百度翻译):
import requests#破解百度翻译url = 'https://fanyi.baidu.com/sug'word = input('enter a English word:')#请求参数的封装data = {    'kw':word}#UA伪装headers = {    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}response = requests.post(url=url,data=data,headers=headers)#text:字符串  json():对象json_dict = response.json()print(json_dict)#返回是一个json列表,进行数据提取即可现在大部分的网站都是通过动态加载(Ajax)该技术加载信息,有的网站防止数据的泄露或者用户隐私安全,会设置js、css字体加密等等;后面有机会在介绍。再举个例子如下,爬取某公司餐厅位置:
#爬取任意城市对应的某公司餐厅的位置信息#动态加载的数据city = input('enter a cityName:')url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'#数据封装data = {    "cname": "",    "pid": "",    "keyword": city,    "pageIndex": "2",    "pageSize": "10",}#UA伪装headers = {    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}#返回的数据response = requests.post(url=url,headers=headers,data=data).textprint(response)#打印有人会问怎么看我们需要传输什么参数呢?我们打开网站币乎网站,点击登录,打开开发者模式(谷歌浏览器),输入账号密码后,在标签为Network中的Headers中最下面的Request payload中。如图所示:
我们可以使用模拟参数进行登录(大部分网站进行加密);在后面会讲解谷歌的一些操作以及加密的数据的解决方式,这里暂时略过。
三 cookie、代理ip、session(1). cookie的介绍:学习之前简单的了解一下cookie是做什么的,有什么作用;我们在百度上搜索一下,会出来很多的关于cookie的介绍,我截取了一段:
Cookie的作用:
cookie的用途是存储用户在特定网站上的密码和  ID。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将利用计算机硬驱上的少量空间来储存这些首选项。这样,每次登录该网站时,浏览器将检查是否有cookie。如果有,浏览器将此 cookie 随网页的请求一起发送给服务器 ,有一个基础的概念就行;
接下来我们获取一下cookies:
import requests#网址url ="http:///www.baidu。com”#返回响应response = requests.get(url)#获取请求网页的cookies#打印出cookiesprint(response.cookies)##RequestCookieJar类型,我们使用items方法将其转换成元组,遍历美每个cookie的的名称跟值。#第一种方法for k,v in response.cookies.items():    print(k +"="+ v)#第二种方法print(resp.cookies.get_dict())我们也可以使用cookie来维持我们在网站上的登录状态,以我学校的网站为例(可以自行找登录网站),首先登录网站,打开F12,进入network面板----headers中,将cookies复制下来放进我们构造的headers中;
import requestsheaders = {    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36",    "Cookie": "JSESSIONID=加密字符串"}r = requests.get(url,headers=headers)print(r.text)运行以后就会发现返回来的信息中有登陆后的结果,证明登录成功。
(2)session(会话维持):多个请求之间是可以共享cookie的。那么如果使用requests,也要达到共享cookie的目的,那么可以使用requests库给我们提供的session对象。注意,这里的session不是web开发中的那个session,这个地方只是一个会话的对象而已。
上面的解释可能有些抽象,打个比方你在爬取一个网站,第一次请求利用post登录了网站,第二次想获取登录成功后的信息,你再使用get方法请求个人信息页面,你发现请求不到,实际上上面的两个操作是打开了两个浏览器,是完全不同的。
所以有需求就有解决方案,这样我们就引出session对象,它可以维持同一个会话,也就是打开一个浏览器的新标签页;这样就防止我们登陆后获取不到信息的烦恼。
以登录某公司为例,使用requests来实现。示例代码如下:
import requestsurl = "http://www.renren.com/PLogin.do"data = {"email":"email",'password':"password"}headers = {    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}# 登录session = requests.session()#提交参数信息session.post(url,data=data,headers=headers)# 访问大鹏个人中心resp = session.get('http://www.renren.com/880151247/profile')print(resp.text)注:session通常用于模拟登录成功后进行下一步操作。
(3).代理ip的使用代理ip的使用场合:对于某些网站,我们测试的时候请求几次可以获取网页内容,但是当大规模且频繁的请求,网站可能出现验证码、或者跳到登录认证页面,更有的会直接封掉客户端IP,导致一定的时间内无法访问。
为了防止这种情况的发生,我们需要进行代理操作,代理其实就是代理服务器,代理网站的话自行百度一下。
代理的详情:https://www.kuaidaili.com/doc/wiki/
代理分为下面几种类型:
-匿名度:    - 透明:对方服务器可以知道你使用了代理,并且也知道你的真实IP    - 匿名:对方服务器可以知道你使用了代理,但不知道你的真实IP    - 高匿:对方服务器不知道你使用了代理,更不知道你的真实IP。- 类型:    - http:该类型的代理ip只可以发起http协议头对应的请求    - https:该类型的代理ip只可以发起https协议头对应的请求设置代理的方式:
import requestsproxies = {    "http":"ip:端口",    "https":"ip:端口",}requests.get(url,proxies=proxies)总结:
requests的get和post方法常用的参数:
  • url
  • headers
  • data/params
  • proxies



你可能看会了,但是你敲了吗?

打赏鼓励作者,期待更多好文!

打赏
3人已打赏

一一氵 发表于 2020-10-11 10:00
  
感谢分享
ie5000 发表于 2021-3-30 11:55
  
学习一下,感谢楼主分享
新手589624 发表于 2021-4-30 08:23
  
坚持每天登陆论坛学习
新手589624 发表于 2021-5-19 08:19
  
坚持每天登陆论坛学习
发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
安全效果
【 社区to talk】
技术笔记
干货满满
每日一问
信服课堂视频
GIF动图学习
新版本体验
技术咨询
2023技术争霸赛专题
功能体验
产品连连看
安装部署配置
通用技术
秒懂零信任
技术晨报
自助服务平台操作指引
原创分享
标准化排查
排障笔记本
玩转零信任
排障那些事
SDP百科
深信服技术支持平台
POC测试案例
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
高手请过招
升级&主动服务
高频问题集锦
社区新周刊
全能先锋系列
云化安全能力

本版达人

新手68983...

本周分享达人

零和一网络

本周提问达人