requests用法基础-进阶

本节内容

  1. 模块的安装

    -----------------------基础用法---------------------

  2. GET用法、POST用法

    -----------------------进阶用法--------------------

  3. cookie处理、代理ip、session

一 模块安装:

1). 安装requests包还是很方便的,电脑中有python环境,打开cmd,输入pip install requests下载;

如果有同学使用pycharm的话,选择file-->setting-->Project interpreter-->右边"+"号点击--->输入模块名---->选中下载。

2). requests的作用、特点、以及使用流程

  • 作用:模拟用户使用浏览器上网
  • 特点:简单、高效
  • 使用流程:
    1. 指定url;
    2. 发起请求(requests.get/post);
    3. 获取响应信息/数据(response);
    4. 持久化存储(保存csv、MySQL、txt等);

二基本用法:

1). get(url,headers,params):各用法

获取搜狗首页的页面数据:

 1 import requests #引包
 2 #1指定url
 3 url = ‘https://www.sogou.com/‘
 4 #2.发起请求
 5 response = requests.get(url=url)
 6 #3获取响应数据
 7 page_text = response.text #text返回的是字符串类型的数据
 8 #持久化存储
 9 with open(‘./sogou.html‘,‘w‘,encoding=‘utf-8‘) as fp:
10     fp.write(page_text)
11 print(‘over!‘)
12 #也可以直接打印
13 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的构造:

1 #第一种方法
2 #user-agent放在字典中,不光useragent,后面我们讲到的cookie等都需要放入
3 import requests
4 headers== {
5     ‘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‘
6 }
7 #调用方法,get(传入了两个参数,url,headers)
8 response = requests.get("http://www.baidu.com",headers=headers)

使用fake-useragent获取并构造UA:

import requests
from fake_useragent import UserAgent
ua = UserAgent()
headers = {‘User-Agent‘: ua.random}
url = ‘待爬网页的url‘
resp = requests.get(url, headers=headers)

4). params 参数

我们使用一个例子来融合headers与params,还是以搜狗为例:

 1 import requests
 2 wd = input(‘enter a word:‘)
 3 url = ‘https://www.sogou.com/web‘
 4 #参数的封装
 5 param = {
 6     ‘query‘:wd
 7 }
 8 #UA伪装
 9 headers = {
10     ‘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‘
11 }
12 response = requests.get(url=url,params=param,headers=headers)
13 #手动修改响应数据的编码
14 response.encoding = ‘utf-8‘
15 page_text = response.text
16 fileName = wd + ‘.html‘
17 with open(fileName,‘w‘,encoding=‘utf-8‘) as fp:
18     fp.write(page_text)
19 print(fileName,‘爬取成功!!!‘)

上面的例子可以看出,如果需要将参数放在url中传递,可以利用 params 参数 。

5)post用法:我们访问网站的时候,有时候是需要提交数据给网页的,如果提交的数据中没有网站所认证的信息,那么网站将会返回给你错误或者其他信息。

最基本的POST请求:

1 response = requests.post("http://www.baidu.com/",data=data)

传入数据的之后就不需要使用urlencode进行编码了。

实例(实现百度翻译):

 1 import requests
 2 #破解百度翻译
 3 url = ‘https://fanyi.baidu.com/sug‘
 4 word = input(‘enter a English word:‘)
 5 #请求参数的封装
 6 data = {
 7     ‘kw‘:word
 8 }
 9 #UA伪装
10 headers = {
11     ‘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‘
12 }
13 response = requests.post(url=url,data=data,headers=headers)
14 #text:字符串  json():对象
15 json_dict = response.json()
16 ?
17 print(json_dict)#返回是一个json列表,进行数据提取即可

现在大部分的网站都是通过动态加载(Ajax)该技术加载信息,有的网站防止数据的泄露或者用户隐私安全,会设置js、css字体加密等等;后面有机会在介绍。再举个例子如下,爬取肯德基餐厅位置:

 1 #爬取任意城市对应的肯德基餐厅的位置信息
 2 #动态加载的数据
 3 city = input(‘enter a cityName:‘)
 4 url = ‘http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword‘
 5 #数据封装
 6 data = {
 7     "cname": "",
 8     "pid": "",
 9     "keyword": city,
10     "pageIndex": "2",
11     "pageSize": "10",
12 }
13 #UA伪装
14 headers = {
15     ‘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‘
16 }
17 #返回的数据
18 response = requests.post(url=url,headers=headers,data=data).text
19 print(response)#打印

有人会问怎么看我们需要传输什么参数呢?我们打开网站币乎网站,点击登录,打开开发者模式(谷歌浏览器),输入账号密码后,在标签为Network中的Headers中最下面的Request payload中。如图所示:

我们可以使用模拟参数进行登录(大部分网站进行加密);在后面会讲解谷歌的一些操作以及加密的数据的解决方式,这里暂时略过。

三 cookie、代理ip、session

(1). cookie的介绍:

学习之前简单的了解一下cookie是做什么的,有什么作用;我们在百度上搜索一下,会出来很多的关于cookie的介绍,我截取了一段:

Cookie的作用:

cookie的用途是存储用户在特定网站上的密码和 ID。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将利用计算机硬驱上的少量空间来储存这些首选项。这样,每次登录该网站时,浏览器将检查是否有cookie。如果有,浏览器将此 cookie 随网页的请求一起发送给服务器 ,有一个基础的概念就行;

接下来我们获取一下cookies:

 1 import requests
 2 #网址
 3 url ="http:///www.baidu。com”
 4 #返回响应
 5 response = requests.get(url)
 6 #获取请求网页的cookies
 7 #打印出cookies
 8 print(response.cookies)##RequestCookieJar类型,我们使用items方法将其转换成元组,遍历美每个cookie的的名称跟值。
 9 #第一种方法
10 for k,v in response.cookies.items():
11     print(k +"="+ v)
12 #第二种方法
13 print(resp.cookies.get_dict())

我们也可以使用cookie来维持我们在网站上的登录状态,以我学校的网站为例(可以自行找登录网站),首先登录网站,打开F12,进入network面板----headers中,将cookies复制下来放进我们构造的headers中;

 1 import requests
 2 ?
 3 headers = {
 4     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36",
 5     "Cookie": "JSESSIONID=加密字符串"
 6 }
 7 ?
 8 r = requests.get(url,headers=headers)
 9 ?
10 print(r.text)

运行以后就会发现返回来的信息中有登陆后的结果,证明登录成功。

(2)session(会话维持):

多个请求之间是可以共享cookie的。那么如果使用requests,也要达到共享cookie的目的,那么可以使用requests库给我们提供的session对象。注意,这里的session不是web开发中的那个session,这个地方只是一个会话的对象而已。

上面的解释可能有些抽象,打个比方你在爬取一个网站,第一次请求利用post登录了网站,第二次想获取登录成功后的信息,你再使用get方法请求个人信息页面,你发现请求不到,实际上上面的两个操作是打开了两个浏览器,是完全不同的。

所以有需求就有解决方案,这样我们就引出session对象,它可以维持同一个会话,也就是打开一个浏览器的新标签页;这样就防止我们登陆后获取不到信息的烦恼。

以登录人人网为例,使用requests来实现。示例代码如下:

 1 import requests
 2 ?
 3 url = "http://www.renren.com/PLogin.do"
 4 data = {"email":"email",‘password‘:"password"}
 5 headers = {
 6     ‘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"
 7 }
 8 ?
 9 # 登录
10 session = requests.session()
11 #提交参数信息
12 session.post(url,data=data,headers=headers)
13 ?
14 # 访问大鹏个人中心
15 resp = session.get(‘http://www.renren.com/880151247/profile‘)
16 ?
17 print(resp.text)

注:session通常用于模拟登录成功后进行下一步操作。

(3).代理ip的使用

代理ip的使用场合:对于某些网站,我们测试的时候请求几次可以获取网页内容,但是当大规模且频繁的请求,网站可能出现验证码、或者跳到登录认证页面,更有的会直接封掉客户端IP,导致一定的时间内无法访问。

为了防止这种情况的发生,我们需要进行代理操作,代理其实就是代理服务器,代理网站的话自行百度一下。

代理的详情:https://www.kuaidaili.com/doc/wiki/

代理分为下面几种类型:

-匿名度:    - 透明:对方服务器可以知道你使用了代理,并且也知道你的真实IP    - 匿名:对方服务器可以知道你使用了代理,但不知道你的真实IP    - 高匿:对方服务器不知道你使用了代理,更不知道你的真实IP。- 类型:    - http:该类型的代理ip只可以发起http协议头对应的请求    - https:该类型的代理ip只可以发起https协议头对应的请求

设置代理的方式:

1 import requests
2 proxies = {
3     "http":"ip:端口",
4     "https":"ip:端口",
5 }
6 requests.get(url,proxies=proxies)

总结:

requests的get和post方法常用的参数:

  • url
  • headers
  • data/params
  • proxies

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

初学者

分享及成功

原文地址:https://www.cnblogs.com/xbhog/p/11778323.html

时间: 2024-08-30 14:29:33

requests用法基础-进阶的相关文章

shell脚本基础进阶(四)----作业

20150913-15作业 1.描述shell程序的运行原理(可附带必要的图形说明) shell脚本基础进阶(一)----shell介绍 2.总结shell编程中所涉及到的所有知识点(如:变量.语法.命令状态等等等,要带图的哟) shell脚本基础进阶(二)----变量及运算符 3.总结课程所讲的所有循环语句.条件判断的使用方法及其相关示例:(if (jpg|png is not exist):echo "You say a XX") shell脚本基础进阶(三)----流程控制语句

Varnish基础进阶

Varnish基础进阶 前言 互联网早已惠及全人类, 我们可以通过网络与家人.朋友进行实时通信, 也能通过网络随时随地在各大电商站点上购物, 我们访问web站点的速度也越来越快, 这背后都是有很多精巧的架构以及各种先进的技术来支撑的, 我们就今天主要聊聊Web的缓存技术, 对于当今的互联网来说, Cahe Is King, 缓存真的有那么神奇么? 就由我来带领朋友们先领略一番当今最流行的开源缓存解决方案Varnish的风采 为什么需要缓存? 当今的Web站点, 特别是电商站点; 时常承受着高并发

tomcat基础进阶

tomcat基础进阶 大纲 前言 Tomcat Architecture Tomcat Installation Tomcat basic configuration 如何进入Tomcat manager页面? 配置Virtual_Host 总结 前言 我们在前面的博客中介绍以及实现的web架构都是基于"世界上最好的语言"PHP实现动态web站点, 事实上在当今的web服务器端还经常python,perl,Java Script等编程语言实现动态的web站点, 我们今天就介绍一款实现著

requests用法

# -*- coding: cp936 -*- #xiaodeng #python 27 #requests用法 #获取http://www.weather.com.cn/data/sk/101010100.html的信息 import requests def getJson(): data=requests.get('http://www.weather.com.cn/data/sk/101010100.html') #获取json数据,数据本身得是json格式 #data.json返回结果

【思库教育】2017PHP项目实战基础+进阶+项目之基础篇

下载链接: [思库教育]2017PHP项目实战基础+进阶+项目之基础篇 小白变大牛,您的专属资源库! 小白变大牛,您的专属资源库! 内容非常充实,可以看目录,设计的面多,项目多,技能多,如果掌握好,找一份PHP的工作,易如反掌!学完后可以到PHP小白变大牛精华区查找更加符合你的资源或者项目! [思库教育]2017PHP项目实战基础+进阶+项目之基础篇[思库教育]2017PHP项目实战基础+进阶+项目之进阶篇[思库教育]2017PHP项目实战基础+进阶+项目之项目篇小白变大牛!Python小白,J

前端基础进阶系列

前端基础进阶(一):内存空间详细图解 前端基础进阶(二):执行上下文详细图解 前端基础进阶(三):变量对象详解 前端基础进阶(四):详细图解作用域链与闭包 前端基础进阶(五):全方位解读this 前端基础进阶(六):在chrome开发者工具中观察函数调用栈.作用域链与闭包 前端基础进阶(七):函数与函数式编程 前端基础进阶(八):深入详解函数的柯里化 前端基础进阶(九):详解面向对象.构造函数.原型与原型链 前端基础进阶(十):面向对象实战之封装拖拽对象 前端基础进阶(十一):详细图解jQuer

xmind8零基础/进阶/案例全程通关

课程介绍:国内第一部弥补了xmind8思维导图无视频教程的空缺,是唯一一部严格按照番茄教学法顺序+实战的方式打造的适合国内白领的快快速上手教程.无论是你程序员还是普通hr,行政,亦或者是你是一名外卖的骑士......但是当你看到这个教程,很负责人的告诉您,你离主管职位不远了.曾经大家只要会office系列word,excel,ppt等就能突出自己,当今office乱大街的时候,xmind8刚好就是你的亮点.xmind8能让你在芸芸大众中脱颖而出,迅速得到领导的赏识,同事的肯定,因为她充分体现你的

java基础进阶篇(六)_HashTable------【java源码栈】

一.概述 ??前面介绍了HashMap的结构和原理,这里介绍个类似HashMap的结构Hashtable. ??HashTable 官方解释是HashMap的轻量级实现, 和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射. ??所以我们结合HashMap来介绍HashTable, 比较下两者的区别. ??HashTable 使用的很少, 它支持线程安全, 通过内部方法加上 synchronized 实现, 因此同步锁的密度太大了, 在实际情

java基础进阶篇(七)_LinkedHashMap------【java源码栈】

目录 一.概述 二.特点 三.应用场合 四.构造方法 1.参数为空 2.accessOrder 五.源码结构分析 六.常见问题 1.如何实现的元素有序? 2.如何保证顺序的正确以及同步 3.如何实现两种顺序(插入顺序或者访问顺序)? 4.为什么重写containsValue()而不重写containsKey()? 七.常用方法 一.概述 ??LinkedHashMap是HashMap的子类,关于HashMap可以看下前面的章节:java基础进阶篇 HashMap public class Lin