本节内容

  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):各用法

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

 import requests #引包
#1指定url
url = '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 requests
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'
}
#调用方法,get(传入了两个参数,url,headers)
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,还是以搜狗为例:

 import requests
wd = 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.text
fileName = 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": "",
"pageSize": "",
}
#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).text
print(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
#打印出cookies
print(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 requests

headers = {
"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 requests

url = "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 requests
proxies = {
"http":"ip:端口",
"https":"ip:端口",
}
requests.get(url,proxies=proxies)

总结:

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

  • url

  • headers

  • data/params

  • proxies

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

初学者

分享及成功

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

  1. 老王Python培训视频教程(价值500元)【基础进阶项目篇 – 完整版】

    老王Python培训视频教程(价值500元)[基础进阶项目篇 – 完整版] 教学大纲python基础篇1-25课时1.虚拟机安装ubuntu开发环境,第一个程序:hello python! (配置开发 ...

  2. 前端基础进阶(五):全方位解读this

    https://segmentfault.com/a/1190000012646488  https://yangbo5207.github.io/wutongluo/ 说明:此处只是记录阅读前端基础 ...

  3. 03爬虫-requests模块基础(1)

    requests模块基础 什么是requests模块 requests模块是python中原生基于网络模拟浏览器发送请求模块.功能强大,用法简洁高效. 为什么要是用requests模块 用以前的url ...

  4. 学习python须知,Python基础进阶需掌握哪些知识点?

    Python基础进阶需要掌握哪些知识点?Python将是每个程序员的标配,有编程基础再掌握Python语言对于日后的升职加薪更有利.Python语言简洁利于理解,语法上相对容易能够让开发者更专注于业务 ...

  5. 【简单易懂的AMV图文教程-2】VEGAS基础进阶——认识关键帧

    [简单易懂的AMV图文教程-2]VEGAS基础进阶--认识关键帧 经过了上一期VEGAS基础教程的学习,相信大家都能独立完成一些比较简单的纯剪辑作品了.今天在这里为大家继续介绍VEGAS的一大基础应用 ...

  6. js基础进阶--关于setTimeout的思考

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 先热身 看看下面的额代码会打印出什么? for (var i = 0; i < 5; i++) { setTimeout( ...

  7. js基础进阶--图片上传时实现本地预览功能的原理

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 前言 最近在项目上加一个图片裁剪上传的功能,用的是cropper插件,注意到选择本地图片后就会有预览效果,这里整理一下这种预览效 ...

  8. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...

  9. python最全学习资料:python基础进阶+人工智能+机器学习+神经网络(包括黑马程序员2017年12月python视频(百度云链接))

    首先用数据说话,看看资料大小,达到675G 承诺:真实资料.不加密,获取资料请加QQ:122317653 包含内容:1.python基础+进阶+应用项目实战 2.神经网络算法+python应用 3.人 ...

随机推荐

  1. Python学习-列表元组字典操作

    一.列表 列表是Python的基本数据类型之一,它是以 [] 括起来的,内部成员用逗号隔开.里面可以存放各种数据类型. # 例如: list2 = ['jason', 2, (1, 3), ['war ...

  2. JIRA集成GitHub

    原因: 作为管理员, 为用户提高效率的角度,配置测试此服务.让用户从JIRA内看到代码分支,提交信息,pull requests等等, 让Github的代码提交记录和JIRA的任务管理系统集成在一起, ...

  3. Servlet与Tomcat运行示例

    Servlet与Tomcat运行示例 本文将写一个servlet,然后将其部署到Tomcat的全过程.本文参考<深入拆解Tomcat_Jetty>内容. 一.基于web.xml开发步骤 下 ...

  4. RocketMQ学习 -> NameServer路由中心

    RocketMQ项目代码核心目录说明 broker:broker启动进程 client:消息客户端,包含消息生产者,消息消费者相关类 common:公共包 dev:开发者信息(非源代码) distri ...

  5. IDEA新建一个多maven模块工程(有图)

    对于一些大型的项目来说,将项目的各个模块理清并进行管理,便于后续项目的维护,使用maven管理是很方便的,它可以很好的构建模块来设计项目的整体结构,对一些小型的项目不建议使用 1.新建父maven模块 ...

  6. Ansible常用模块基本操作

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. 前言 对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提 ...

  7. String 用法 简单API

    明天天梯赛选拔,怕不是STl忘到姥姥家去了,赶紧复习一下 构造str string s = "fuckyouRMA"; string s1(s, 2); de(s1); strin ...

  8. vue3.0的安装使用

    关于旧版本 Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm uninstall vu ...

  9. ES6——新增数据结构Set与Map的用法

    ES6 提供了新的数据结构 Set以及Map,下面我们来一一讲解. 一.Set 特性 似于数组,但它的一大特性就是所有元素都是唯一的,没有重复. 我们可以利用这一唯一特性进行数组的去重工作. 1.单一 ...

  10. 性能测试:Jmeter压测过程中的短信验证码读取

    问题背景 现如今国内的大部分软件或者网站应用,普遍流行使用短信业务,比如登录.注册以及特定的业务通知等. 对于这些业务,在使用Jmeter进行性能测试的过程中,就会需要自动获取和填入短信验证码,否则性 ...