requests:pip install  request 安装

实例:

import requests
url = 'http://www.baidu.com'
response = requests.get(url=url)
print(type(response)) #请求类型
print(response.status_code) #网站响应状态码
print(type(response.text)) #网站内容类型
print(response.text) #网站内容
print(response.cookies) #网站cookies

requests.post()
requests.get()
requests.put()
requests.delete()
requests.head()
requests.options() #requests可以直接实现各种请求,比urllib方便很多

基本实例
构建一个最简单的get请求,链接为 http://httpbin.org/get
import requests
r = requests.get('http://httpbin.org/get')
print(r.text)
传参
import requests
data = {
  'name':'germey',
  'age':'18'

r = requests.get('http://httpbin.org/get',dat=data)
print(r.text)

转换数据类型
import requests
r = requests.get('http://httpbin.org/get')
print(type(r.text)) #打印出类型是json格式的字符串
pritn(r.json) #将返回结果是json格式的字符串转化为字典,如果返回结果不是json,便会出现解析错误,抛出json.decoder.JSONDecodeError异常
print(type(r.json())) #打印出类型是字典

抓取网页
import requests

headers = {
  'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}

r.requests.get(url='www.zhihu.come/explpre',headers=headers)
#这里加入headers请求头,其中包括user-agent字段信息,也就是浏览器标识信息,如果不加,知乎会禁止抓取

抓取二进制数据
#图片、视频、音频这些文件本质是由二进制码组成,犹豫有特定的保存格式和对应的解析方式,我们才可以看到这些 形形色色的媒体,如果抓取他们,就要拿到他们的二进制码
import requests
r = requests.get(url='https://github.com/favicon.ico')
print(r.text) #text结果出现乱码
print(r.content) #结果前带个B,代表是bytes类型数据,由于图片是二进制数据,打印时候转化为str类型,图片直接存为字符串,当然会出现乱码

#将提取的图片保存下来
with open('favicon.ico','wb') as f:
  f.write(r.content)
#这里用了open方法,第一个参数是文件名称,第二个参数代表以二进制写的形式打开,可以向文件写入二进制数据

POST请求
import requests
data = {'name':'germey','age':'22'}
r = requests.post(url='http://httpbin.org/post',data=data)
print(r.text) #可以发现获得返回结果,其中form部分就是提交的数据

响应
import requests

r = requests.get(url='http://www.jianshu.com')
print(type(r.status_code),r.status_code) #响应状态码类型以及状态码
print(type(r.headers),r.headers)       #请求头的类型以及打印请求头
print(type(r.cookies),r.cookies)       #cookies的类型以及打印cookies
print(type(r.url),r.url) #url类型以及打印url
print(type(r.history),r.history)       #history

文件上传

requests 可以模拟提交一些数据,如果一些网站需要上传文件
import requests
files = {'file':open('favicon.ico','rb')} #文件需要与当前脚本在同一目录下
r = requests.get('http://httpbin.org/post',files=fiels)

Cookies
import requests
r = requests.get('http://www.baidu.com')
pritn(r.cookies) #调用cookies属性得到cookies,可以发现是RequestCookieJar类型
for key.value in r.cookies.items(): #使用items()方将其转化为远足组成的列表,遍历输出每个cookies的名称和值
  print(key + '=' + vlaue)

会话维持

在requests中,直接利用get和post等方法可以做到模拟网页的请求,但是这实际是相当于不相同的会话,也就是说相当于你用两个浏览器打开不同的页面
设想这样一个场景,第一个请求用post方法登录的某个网站,第二次想获取登录后的个人信息,你又用了一次get方法请求个人信息页面,这相当于打开两个
浏览器,两个不相干的会话,不能获取到个人信息,如果两个请求设置同样的cookies可以获取到,但是有些繁琐,可以有更简单的方法

import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789') #请求测试网址时设置一个cookies,名字叫做number,内容是123456789
r = s.get('http://httpbin.org/cookies/') #随后请求这个网址,可以网址可以获取当前的cookies
print(r.text)

SSL证书验证
requests提供了证书验证功能,当发送HTTP请求时,会检查SSL证书,我们可以使用verify参数控制是否检查此证书,如果不加verify参数的话
默认是True,会自动验证

import requests
response = requests.get('http://www.12306.cn')
pritn(response.status_code) #这样会提示一个错误SLLError表示证书验证错误
--------------------------------
response = requests.get('http://www.12306.cn',verify=False)
pritn(response.status_code) #这样就会打印一个请求成功的状态码

不过我们发现了一个警告,简易我们给它指定证书,我们可以通过设置忽略警告的方式来屏蔽这个警告
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get('https://www.12306.cn',verify=Falsh)
print(response.status_code)

或者通过捕获警告到日志的方式忽略警告:

import logging
import requests
logging.CaptureWarnings(True)
response = requests.get('https://www.12306.cn',verify=False)
pritn(response.status_code)

我们也可以指定一个本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或者一个包含两个文件路径的元祖
import requests
response = requests.get('https://www.12306.cn',cert=('/path/server.crt',/path/key)) #我们需要有crt和key文件,并且指定他们的路径
                                                  #本地私有证书key必须是解密状态
pritn(response.status_code)

 
代理设置
某些网站,请求频繁的时候,网站会弹出验证码,跳转到登录认证页面,或者封禁IP,导致一定时间内无法访问
为了防止这样的情况,我们可以设置代理IP ,使用proxies

import requests
proxies = {
    'http':'http://10.10.1.10:3128', #这个代理是无效的
    'https':'http://10.10.1.10:3128'         #需要换成我们有效的代理IP
  }
requests.get('https://www.taobao.com',proxies=proxies)

若代理需要使用 HTTP Basic Auth,可以使用类似 http://user:password@host:post 这样的语法来设置代理
import requests
proxies = {
  'http':'http://user:password@10.10.1.10:3128'
}
requests.get('https://www.taobao.com',proxies=proxies)

除了最基本的HTTP代理之外,requests还支持socks协议的代理
import requests
proxies = {
   'http':'socks5://user:password@host:port',
   'https':'socks5://user:password@host:port'
}
requests.get('https://www.taobao.com',proxies=proxies)

超时设置
在本机网络状况不好或者服务器网络响应太慢甚至无响应时,我们可能会等特别久的时间才能收到响应,甚至到最后收不到响应而报错。
为了防止服务器不能及时响应,应该设置一个超时设置,即超过这个时间还没收到响应,就报错,需要用到timeout参数

import requests
response = requests.get('https://www.taobao.com',timeout=1) #超时时间设置为1秒,如果1秒没有响应,那就抛出异常

实际上,请求分为两个阶段,即连接(connect)和读取(read),上面设置的timeout将作用于这二者的timeout总和
如果要分别指定,就可以传入一个元组
r= requests.get('https://www.taobao.com',timeout(5,30)) #如果想永久等待,就设置为None或者直接留空,默认是None

身份验证
访问网站时没如果遇到认证页面, 需要进行身份验证(用户名和密码),此时就可以使用requests自带的身份认证功能
import requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://localhost:5000',auth=HttpBasicAuth('username','password'))
pritn(r.status.code)

#如果用户名和密码正确,请求时就会认证成功,返回200状态码,如果认证失败,则返回401状态码
#如果每个参数都传一个HTTPBasicAuth类,显得有些繁琐,所以requests可以直接传递远足,它会默认使用HTTPBasicAuth方法

import requests
r= r.requests.get('http://localhost:5000',auth('username','password'))
pritn(r.status_code)

Python爬虫requests请求库的更多相关文章

  1. Python爬虫—requests库get和post方法使用

    目录 Python爬虫-requests库get和post方法使用 1. 安装requests库 2.requests.get()方法使用 3.requests.post()方法使用-构造formda ...

  2. 爬虫(一)—— 请求库(一)requests请求库

    目录 requests请求库 爬虫:爬取.解析.存储 一.请求 二.响应 三.简单爬虫 四.requests高级用法 五.session方法(建议使用) 六.selenium模块 requests请求 ...

  3. Python3 网络爬虫(请求库的安装)

    Python3 网络爬虫(请求库的安装) 爬虫可以简单分为几步:抓取页面,分析页面和存储数据 在页面爬取的过程中我们需要模拟浏览器向服务器发送请求,所以需要用到一些python库来实现HTTP的请求操 ...

  4. python爬虫之urllib库(三)

    python爬虫之urllib库(三) urllib库 访问网页都是通过HTTP协议进行的,而HTTP协议是一种无状态的协议,即记不住来者何人.举个栗子,天猫上买东西,需要先登录天猫账号进入主页,再去 ...

  5. python爬虫之urllib库(二)

    python爬虫之urllib库(二) urllib库 超时设置 网页长时间无法响应的,系统会判断网页超时,无法打开网页.对于爬虫而言,我们作为网页的访问者,不能一直等着服务器给我们返回错误信息,耗费 ...

  6. python爬虫之urllib库(一)

    python爬虫之urllib库(一) urllib库 urllib库是python提供的一种用于操作URL的模块,python2中是urllib和urllib2两个库文件,python3中整合在了u ...

  7. python爬虫基础03-requests库

    优雅到骨子里的Requests 本文地址:https://www.jianshu.com/p/678489e022c8 简介 上一篇文章介绍了Python的网络请求库urllib和urllib3的使用 ...

  8. Python爬虫之selenium库使用详解

    Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...

  9. python爬虫#网络请求requests库

    中文文档 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html requests库 虽然Python的标准库中 urlli ...

随机推荐

  1. Luogu2251 质量检测 (ST表)

    我怎么开始划水了... #include <iostream> #include <cstdio> #include <cstring> #include < ...

  2. .Net Core使用Coravel实现任务调度

    前言 前段时间需要在一个新项目里添加两个后台任务,去定时请求两个供应商的API来同步数据:由于项目本身只是一个很小的服务,不太希望引入太重的框架,同时也没持久化要求:于是我开始寻找在Quartz.Ne ...

  3. HDU2065 “红色病毒”问题 (指数型母函数经典板题)

    题面 医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶, ...

  4. node前后端交互(Express)

    1. Express框架是什么 1.1 Express是一个基于Node平台的web应用开发框架,它提供了一系列的强大特性,帮助你创建各种Web应用.我们可以使用 npm install expres ...

  5. C#使用BouncyCastle生成PKCS#12数字证书

    背景 生成数字证书用于PDF文档数字签名 数字证书需要考虑环境兼容性,如linux.windows 网上资料不全或版本多样 本文章主要介绍了在C#中使用BouncyCastle生成PKCS#12个人信 ...

  6. CodeForces - 1690F

    Problem - F - Codeforces 题意: 给出一个字符串,给出一个序列,每次对应位置的字符变成序列指定位置的字符,即序列中对应位置为2,那么字符串的这个位置的字符就要变成字符串第二个位 ...

  7. DispatcherServlet 分发流程

    0 太长不看版 HTTPServlet 的 Service 方法将请求按类进行分解 主要是根据HTTP方法的类型调用 doXXX 方法 GET 和 HEAD 方法需要对 if-modified-sin ...

  8. 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档

    背景 在计量领域中,计量检定是一种重要形式,主要用于评定计量器具的计量性能,确定其量值是否准确一致,实现手段包括计量检验.出具检定证书和加封盖印等. 在检定证书这一环节,存在一个难点,就是无法在线预览 ...

  9. 前端必读:如何在 JavaScript 中使用SpreadJS导入和导出 Excel 文件

    JavaScript在前端领域占据着绝对的统治地位,目前更是从浏览器到服务端,移动端,嵌入式,几乎所有的所有的应用领域都可以使用它.技术圈有一句很经典的话"凡是能用JavaScript实现的 ...

  10. 第二章:视图层 - 7:HttpResponse对象

    类定义:class HttpResponse[source] HttpResponse类定义在django.http模块中. HttpRequest对象由Django自动创建,而HttpRespons ...