一、基本用法

1.GET请求

①r=requests.get(url) --返回Response对象

def get(url, params=None, **kwargs):

params={... },还可增加头信息如requests.get(url,headers={...})

如果r是JSON格式的字符串,可以调用r.json()转化为字典,若不是JSON格式,则json.decoder.JSONDecoderError

②抓取网页

r.text可以获取网页信息,并且为字符串类型

③抓取二进制数据

r.content可以获取二进制数据,如图片、音频、视频等文件

④添加headers

requests.get(url,headers={...}) ---伪装成浏览器

2.POST请求

def post(url, data=None, json=None, **kwargs):

requests.post(url,data={...})

3.响应

r.status_code   --返回int类型  100信息性  200成功 300重定向 400客户端错误 500服务端错误

r.headers  --返回CaseInsensitiveDict类型

r.cookies  --返回RequestsCookieJar类型

r.url --返回str类型

r.history --返回list类型

requests.codes ---requests内置的状态码查询对象 如requests.codes.ok 为 200

二、高级用法

1.文件上传 ---post方法的file关键字

files={"file":open("路径","rb")}

r=requests.post(url,files=files)

2.Cookies

①获取cookies

r.cookies
for k,v in r.cookies.itemes():
print(k+'='+v)  

②设置cookies

直接在headers={'Cookie':...}里加上cookies

也可以通过cookies关键字来设置,不过先要构造RequestCookieJar对象

jar=requests.cookies.RequestCookieJar()
cookies=...
for cookie in cookies.split(';')
k,v=cookie.split('=',1)
jar.set(k,v)
r=requests.get(url,cookies=jar,headers=...)

3.会话维持

直接用get()或post()相当于不同的绘画,等于用两个不同的浏览器打开页面,每次都要设置cookie时很繁琐.

session相当于打开一个新的浏览器选项卡而不是一个新的浏览器,利用session可以用于模拟成功登陆成功之后再进行下一步操作

s=requests.Session()
s.get(url)
...

4.SSL证书验证

如12306的证书没有被CA机构信任,用requests访问会出现requests.exceptions.SSLError

①只需把verify参数设置为False即可

requests.get(url,verify=False)

 不过有警告,可以使用requests.packages下的urllib3模块  urllib3.disable_warnings() 或者 捕获到logging模块的日志 logging.captureWarnings(True)

②使用本地证书

requests.get(url,cert='包含密钥和证书的单个文件路径')
#或
requests.get(url,cert=('cert文件路径1','key文件路径2')) #key必须是解密状态

5.代理设置

设置proxies参数

proxies={
      'http':'http://10.0.0.1:3228',
'https':'https://10.0.0.1:3028',
}
requests.get(url,proxies=proxies)

若代理需要设置HTTP Basic Auth,可以使用类似http://user:password@host:port的格式来设置

proxies={'http':'http://user:password@10.0.0.1:3128',}

 requests还支持SOCK协议的代理,首先安装 pip3 install 'requests[socks]'

proxies={
     'http':'http':'socks5://user:password@10.0.0.1:3128',
   'https':'https':'socks5://user:password@10.0.0.1:3128',
     } 

6.超时设置  

 timeout参数,默认为None,永久等待

request.get(url,timeout=1)

7.身份认证

使用HTTPBasicAuth类

import requests.auth import HTTPBasicAuth

requests.get(url,auth=HTTPBasicAuth('username','password')) 或 requests.get(url,auth=('username','password')) 默认使用HTTPBasicAuth类

requests还提供了其他认证方式,如OAuth认证,pip install requests_oauthlib ...

8.Prepared Request

from requests import Request,Session
url='...'
data={...}
headers={...}
s=Session()
req=Request('POST',url,data=data,headers=headers)
prepped=s.prepare_request(req)
r=s.send(prepped)

 有了Request对象,就可以将请求作为独立的对象来看待,对于构造Request队列非常方便

本文参考文献:[1]崔庆才.python3网络爬虫开发实战[M].北京:人民邮电出版社,2018:122-138.

 

  

  

爬虫之requests的更多相关文章

  1. Python爬虫之requests

    爬虫之requests 库的基本用法 基本请求: requests库提供了http所有的基本请求方式.例如 r = requests.post("http://httpbin.org/pos ...

  2. 第三百二十二节,web爬虫,requests请求

    第三百二十二节,web爬虫,requests请求 requests请求,就是用yhthon的requests模块模拟浏览器请求,返回html源码 模拟浏览器请求有两种,一种是不需要用户登录或者验证的请 ...

  3. 孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块

    孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块 (完整学习过程屏幕记录视频地址在文末) 从今天起开始正式学习Python的爬虫. 今天已经初步了解了两个主要的模块: ...

  4. Python爬虫练习(requests模块)

    Python爬虫练习(requests模块) 关注公众号"轻松学编程"了解更多. 一.使用正则表达式解析页面和提取数据 1.爬取动态数据(js格式) 爬取http://fund.e ...

  5. 自定义 scrapy 爬虫的 requests

    之前使用 scrapy 抓取数据的时候 ,默认是在逻辑中判断是否执行下一次请求 def parse(self): # 获取所有的url,例如获取到urls中 for url in urls: yiel ...

  6. python爬虫 - python requests网络请求简洁之道

    http://blog.csdn.net/pipisorry/article/details/48086195 requests简介 requests是一个很实用的Python HTTP客户端库,编写 ...

  7. 爬虫之requests模块

    requests模块 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的 ...

  8. 爬虫之Requests&beautifulsoup

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...

  9. 04.Python网络爬虫之requests模块(1)

    引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档 ...

随机推荐

  1. tornado--初识tornado

    tornado的第一个程序 import tornado.ioloop import tornado.web class Index(tornado.web.RequestHandler): def ...

  2. BootStrap的table技术小结:数据填充、分页、列宽可拖动

    本文结构:先说明,后代码.拷贝可直接运行. 一.demo结构: 二.文件引入 这些里面除了下面2个比较难找,其他的都很好找 bootstrap-table-resizable.js colResiza ...

  3. 详解:idea工具下的main函数只执行Thread.activeCount(),打印值为:2

    写多线程的时候,想要等main中其他线程都执行完成后(其他线程功能为对一个数字inc+1),输出最终的inc值. 于是写了个循环: while (Thread.activeCount() > 1 ...

  4. 使用JenKins实现自动执行python脚本

    1.使用Jenkins创建一个工程,工程主要配置项参照下图,其他配置项恢复默认 2.工程配置完成之后,点击[立即构建],执行完成后进入到控制台查看是否执行成功.

  5. 企业SQL笔试

    Student(SID, Sname, Sage, Ssex) 学生表        Course(CID, Cname, TID) 课程表        SC(SID, CID, score) 成绩 ...

  6. POJ3208 Apocalypse Someday

    题意 Language:Default Apocalypse Someday Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 2 ...

  7. Linux----------mysql基础

    目录 一.数据库介绍 1.1 数据库的优点 1.2 数据库的基本功能 1.3数据库的类型 1.4 关系型数据的组成 1.5 关系型数据库的常用组件 1.6 SQL语句 1.7 mysql命令使用 1. ...

  8. Maven 新手入门+命令大全

    Maven 是一个项目管理工具,可以对 Java 项目进行构建.依赖管理. Maven 官方文档(English): http://maven.apache.org/index.html Maven ...

  9. mysql的事务和数据库锁的关系

    数据库加事务并不是数据就安全来了,事务和锁要分析清楚和配合使用 问题背景处于对高并发的秒杀环节的理解整理如下: 秒杀的时候高并发主要注意1.在秒杀的情况下,肯定不能如此高频率的去读写数据库,会严重造成 ...

  10. vue cli 3.x的history 和 hash模式切换的问题

    使用vue cli 3.x 创建的项目,有一个选项:Use history mode for router? (Requires proper server setup for index fallb ...