准备工作

安装request库

pip install request

实例引入

get方法实现GET请求,返回一个Response对象,存放在变量r中,分别输出响应的类型、状态码、响应体的类型、内容以及cookie

import requests

r = requests.get('http://www.baidu.com')
print(type(r))
print(r.status_code)
print(type(r.text))
print(r.text[:100])
print(r.cookies)

也可以实现POST、PUT、DELETE等请求

import requests

r1 = requests.get('https://www.httpbin.org/get')
r2 = requests.post('https://www.httpbin.org/post')
r3 = requests.put('https://www.httpbin.org/get/put')
r4 = requests.delete('https://www.httpbin.org/get/delete')
r5 = requests.patch('https://www.httpbin.org/get/patch')

GET请求

  • 基本实例使用requests库构建一个GET请求
import requests

r = requests.get('https://www.httpbin.org/get')
print(r.text)

使用params参数给URL添加参数

import requests

data = {
'name': 'admin',
'age': 25
} r = requests.get('https://www.httpbin.org/get', params=data)
print(r.text)

把URL参数以字典的形式传给get方法的params参数,请求的链接被自动构造成含参链接,网页的返回类型为str类型,但是是JSON格式的,若想直接解析返回结果,得到一个JSON格式的数据,可调用json方法将返回结果转换为字典。d

import requests

r = requests.get('https://www.httpbin.org/get')
print(type(r.text))
print(r.json())
print(type(r.json()))

  • 抓取网页

使用正则表达式提取网页标题

import requests
import re r = requests.get('https://ssr1.scrape.center/')
pattern = re.compile('<h2.*?>(.*?)</h2>', re.S)
titles = re.findall(pattern, r.text)
print(titles)

  • 抓取二级制数据

上面例子为使用某些规则抓取网页的部分内容,若想抓取图片、音频、视频等文件时,这些文件本质上是由二进制编码组成,要抓取这些文件需要拿到他们的二进制数据。

import requests

r = requests.get('https://scrape.center/favicon.ico')
print(type(r.text))
print(r.text)
print(type(r.content))
print(r.content)

r.content前面的b代表这是bytes类型的数据,r.tex在打印时会转换为str类型,也就是图片直接转换为字符串,所以会乱码。

将提取的二进制数据保存

import requests

r = requests.get('https://scrape.center/favicon.ico')
# 以二进制写的方式打开文件
with open('favicon.ico', 'wb') as f:
f.write(r.content)

POST请求

import requests

data = {
'name': 'admin',
'age': 25
} r = requests.post('https://httpbin.org/post', data=data)
print(r.text)

响应

除了使用text和content获取响应内容外。还有许多属性和方法来获取信息,例如状态码、响应头、Cookie等

import requests

r = requests.get('https://ssr1.scrape.center/')
print(type(r.status_code), r.status_code)
print(type(r.headers), r.headers)
print(type(r.cookies), r.cookies)
print(type(r.url), r.url)
print(type(r.history), r.history)

requests库提功了内置的状态码查询对象requests.codes

import requests

r = requests.get('https://ssr1.scrape.center/')
exit() if not r.status_code == requests.codes.ok else print('请求成功')

常用返回码和相应的查询条件P53

当使用 requests 发送一个请求时,你可以通过 response.status_code 来获取状态码,并使用 response.text 或 response.json()(如果返回的是 JSON)来获取响应的内容。

高级用法

  • 文件上传
import requests

files = {'file': open('favicon.ico', 'rb')}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)

  • Cookie设置

ookies写法复杂,可使用requests获取和设置Cookie

import requests

r = requests.get('http://www.baidu.com')
# 调用cookies属性,成功得到Cookie,属于RequestCookieJar类型
print(r.cookies)
# 调用items方法将Cookie转换为由元组组成的列表,遍历输出Cookie中的每一个条目的名称和值,实现遍历解析
for key, values in r.cookies.items():
print(key + '=' + values)

可以用cookie来维持登录状态。以github为例,登录自己的账号:

import requests

headers = {
'Cookie': '_octo=GH1.1.229921746.1716358908; preferred_color_mode=light; tz=Asia%2FShanghai; color_mode=%7B%22color_mode%22%3A%22auto%22%2C%22light_theme%22%3A%7B%22name%22%3A%22light%22%2C%22color_mode%22%3A%22light%22%7D%2C%22dark_theme%22%3A%7B%22name%22%3A%22dark%22%2C%22color_mode%22%3A%22dark%22%7D%7D; logged_in=yes; dotcom_user=2811006977'
} r = requests.get('https://github.com/', headers=headers)
print(r.text)

也可以通过cookies参数来设置Cookie信息。构造一个RequestsCookieJar对象,将刚才的Cookie进行处理及赋值。

import requests

cookies = '_octo=GH1.1.229921746.1716358908; preferred_color_mode=light; tz=Asia%2FShanghai; color_mode=%7B%22color_mode%22%3A%22auto%22%2C%22light_theme%22%3A%7B%22name%22%3A%22light%22%2C%22color_mode%22%3A%22light%22%7D%2C%22dark_theme%22%3A%7B%22name%22%3A%22dark%22%2C%22color_mode%22%3A%22dark%22%7D%7D; logged_in=yes; dotcom_user=2811006977'

jar = requests.cookies.RequestsCookieJar()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'
}
for cookie in cookies.split(';'):
key, value = cookie.split('=', 1)
jar.set(key, value)
r = requests.get('https://github.com/', cookies=jar, headers=headers)
print(r.text)

  • Session维持

利用Session可以做到模拟同一个会话而不用担心Cookie的问题,通常在模拟登陆成功之后进行下一步操作时用到。

案例:如果沿用之前写法并不会输出cookie

import requests

requests.get('http://httpbin.org/cookies/set/number/123456789')
r = requests.get('http://httpbin.org/cookies')
print(r.text)

改用session继续尝试

import requests

s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)

  • SSL证书验证

很多网站要求使HTTPS协议,但是有的网站可能没有设置好HTTPS证书,或者证书没有被CA机构认可,所以网站可能出现SSL证书错误的提示。

可以在浏览器汇总通过一些设置来说忽略证书的验证

import requests

response = requests.get('https://ssr2.scrape.center/', verify=False)
print(response.status_code)

此处的警告可以通过设置忽略警告的方式以来屏蔽:

import urllib3
urllib3.disable_warnings()

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

import logging
logging.captureWarnings(True)
  • ·超时设置
import requests

r = requests.get('http://www.httpbin.org/get', timeout=1)
print(r.status_code)

请求分为两个部分:连接(connect)和读取(read)

timeout是连接和读取的总和,若想分别制定作用,可以传入一个元组

r = requests.get('http://www.httpbin.org/get', timeout=(2, 30))
  • 身份认证

urllib库进行身份验证较为繁琐,可以直接使用requests库

import requests
from requests.auth import HTTPBasicAuth r = requests.get('https://ssr3.scrape.center/',auth=HTTPBasicAuth('user','password'))
print(r.status_code)

如果参数都传一个HTTPBasicAuth类很繁琐,可以直接传一个元组,会默认使用HTTPBasicAuth这个类来验证

import requests

r = requests.get('https://ssr3.scrape.center/', auth=('user', 'password'))
print(r.status_code)

requests库还提供了其他认证方式,如OAuth认证

pip install requests_oauthlib
import requests
from requests_oauthlib import OAuth1 url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
auth = OAuth1('YOUR_API_KEY', 'YOUR_API_SECRET', 'YOUR_ACCESS_TOKEN', 'YOUR_ACCESS_TOKEN_SECRET')
requests.get(url, auth=auth)
  • 代理设置

大规模爬取,频繁请求可能会导致封禁ip,可以使用proxies设置代理来解决(代理替换为有效代理)

import requests

proxies = {
'http': 'http://117.42.94.192:20720',
'https': 'http://117.42.94.192:20720',
}
requests.get('https://www.httpbin.org/get', proxies=proxies)

若代理需要身份认证,可使用类似http://user://password@host:post这样的语句来设置代理

import requests

proxies = {'https://user://password@127.0.0.1:8080/', }
requests.get('https://www.httpbin.org/get', proxies=proxies)

除基本的HTTP代理,requests库还支持SOCKS协议的代理

pip install “request[socks]”
import requests

proxies = {
'http': 'socks5://127.0.0.1:1080',
'https': 'socks5://127.0.0.1:1080'
}
response = requests.get('http://www.baidu.com', proxies=proxies)
  • Prepared Request

使用requests库的get和post请求的时,在内部构造一个Request对象发送出去,请求成功后会再得到一个Response对象,解析这个对象即可。Request对象实际上就是Prepared Request

不用get方法,直接构造Prepared Request:引入Request类,用url、data和headers参数构造一个Request对象,再调用Session类的prepare_request方法将其转换为一个Prepared Request对象,在调用一个send发送

from requests import Session,Request

url = 'http://www.httpbin.org/post'
data = {'name': 'data'}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15'
}
session = Session()
req = Request('POST', url, data=data, headers=headers)
prepped = session.prepare_request(req)
r = session.send(prepped)
print(r.text)

 
存网盘

requests的使用的更多相关文章

  1. requests的content与text导致lxml的解析问题

    title: requests的content与text导致lxml的解析问题 date: 2015-04-29 22:49:31 categories: 经验 tags: [Python,lxml, ...

  2. requests源码阅读学习笔记

    0:此文并不想拆requests的功能,目的仅仅只是让自己以后写的代码更pythonic.可能会涉及到一部分requests的功能模块,但全看心情. 1.另一种类的初始化方式 class Reques ...

  3. Python爬虫小白入门(二)requests库

    一.前言 为什么要先说Requests库呢,因为这是个功能很强大的网络请求库,可以实现跟浏览器一样发送各种HTTP请求来获取网站的数据.网络上的模块.库.包指的都是同一种东西,所以后文中可能会在不同地 ...

  4. 使用beautifulsoup与requests爬取数据

    1.安装需要的库 bs4 beautifulSoup  requests lxml如果使用mongodb存取数据,安装一下pymongo插件 2.常见问题 1> lxml安装问题 如果遇到lxm ...

  5. python爬虫学习(6) —— 神器 Requests

    Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 H ...

  6. ImportError: No module named 'requests'

    补充说明: 当前环境是在windows环境下 python版本是:python 3.4. 刚开始学习python,一边看书一边论坛里阅读感兴趣的代码, http://www.oschina.net/c ...

  7. Python-第三方库requests详解

    Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...

  8. Requests 乱码

    当使用Requests请求网页时,出现下面图片中的一些乱码,我就一脸蒙逼. 程序是这样的. def getLinks(articleUrl): headers = { "Uset-Agent ...

  9. 爬虫requests模块 2

    会话对象¶ 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 urllib3 的 connection pooling 功能.所 ...

  10. 爬虫requests模块 1

    让我们从一些简单的示例开始吧. 发送请求¶ 使用 Requests 发送网络请求非常简单. 一开始要导入 Requests 模块: >>> import requests 然后,尝试 ...

随机推荐

  1. 2019-9-30-dotnet-枚举当前设备wifi热点

    title author date CreateTime categories dotnet 枚举当前设备wifi热点 lindexi 2019-09-30 14:42:18 +0800 2019-9 ...

  2. 微分流形Loring W. Tu section19 19.12 解答

    微分流形Loring W. Tu section19 19.12 解答,当然咯我自己也不知道是否严谨正确,反正就是自己的思考与想法,简单一写,欢迎友好讨论. 19.12 对于任意的\(f \in C^ ...

  3. kettle使用1-全表导入

    1.新建转换 2.DB连接中,新建数据库连接 3.在输入中,选择表输入 选择连接的数据库和查询的sql的数据 4.再输出中,选择表输出 5.按住shift,建立数据连接 6.匹配数据字段映射

  4. ElasticSearch使用经验总结

    ElasticSearch总结 1.ElasticSearch的查询原理 Elasticsearch底层使用的Lucene的倒排索引技术来实现比关系型数据库更快的过滤的.所以要想了解Es的擦查询原理, ...

  5. PageOffice实现文件在线安全预览——禁止编辑、下载、复制等

    实际应用中,很多时候不仅需要在线编辑文件,还需要在线安全预览文件,要求不能复制.下载.另存到本地等情况.pageoffice可以实现文件在线安全预览,禁止:编辑.复制.粘贴.右键菜单.选择.下载.另存 ...

  6. 10-flask博客项目

    centos7 编译安装python3.7.1 安装步骤 centos7自带python2,由于执行yum需要python2,所以即使安装了python3也不能删除python21.安装依赖包yum ...

  7. OpenStack Centos7 T版本搭建

    目录 Centos7搭建OpenStack T版本 --上 1. 环境准备(所有节点操作) 1.1 修改主机名 1.2 关闭selinux 以及防火墙 1.3 修改hosts 1.4 配置时间同步 c ...

  8. Kubernetes Pod调度:从基础到高级实战技巧

    本文深入探讨了Kubernetes中的Pod调度机制,包括基础概念.高级调度技术和实际案例分析.文章详细介绍了Pod调度策略.Taints和Tolerations.节点亲和性,以及如何在高流量情况下优 ...

  9. 珠排序算法C# 简单实现 奇葩排序中的算盘排序(算珠排序)算法

    Console.WriteLine("Hello World!"); int[] arr = { 1, 3, 4, 0, 22, 4,0, 6, 3,10,8,6,7 }; Con ...

  10. aspnetcore插件开发dll热加载 二

    这一篇文章应该是个总结. 投简历的时候是不是有人问我有没有abp的开发经历,汗颜! 在各位大神的尝试及自己的总结下,还是实现了业务和主机服务分离,通过dll动态的加载卸载,控制器动态的删除添加. 项目 ...