准备工作

安装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. Region-区域(默认和新增)适配器

    Prism内置了几个区域适配器 ContentControlRegionAdapter ItemsControlRegionAdapter SelectorRegionAdapter ComboBox ...

  2. WPF 使用 MAUI 的自绘制逻辑

    这是一个当前还没开发完成的功能,准确来说连预览版也算不上的功能.我原本以为 MAUI 是无法在 WPF 上面跑的,然而在看完了 MAUI 整个大的设计,才了解到,原来 MAUI 是一个非常庞大的开发项 ...

  3. 都2024年了,你还不知道git worktree么?

    三年前 python 大佬吉多·范罗苏姆(为 Python 程序设计语言的最初设计者及主要架构师)才知道 git worktree ,我现在才知道,我觉得没啥丢人的. 应用场景 如果你正在 featu ...

  4. 简说Python之数字和变量

    目录 Python的运算 Python关于进制的一些描述 十六进制的显示 八进制和二进制的显示 转成二进制,八进制,十六进制的方法 二,八,十六进制转回十进制的方法 Python变量 数字类型 浮点数 ...

  5. go 操作 Excel

    文档地址: https://xuri.me/excelize/zh-hans/ package main import ( "fmt" "github.com/xuri/ ...

  6. rails 之下载

    控制器 def index #传给前端展示层当前的id @id = 6 end # http://127.0.0.1:3000/admin/category_statistics/export_tab ...

  7. DNS(7) -- 智能DNS实现

    目录 1. 智能DNS 1.1 智能DNS概述 1.2 ACL控制列表 1.3 智能DNS实现 1.3.1 bind-view功能 1.3.2 智能DNS场景实现 1.3.3 生产场景配置示例 1. ...

  8. 在Docker内部使用gdb调试器报错-Operation not permitted

    在docker内部使用gdb调试时刻遇到了gdb如下报错信息: warning: Error disabling address space randomization: Operation not ...

  9. java学习之旅(day.05)

    switch多选择结构 多选择结构还有一个实现方式就是switch case switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支 switch(expression ...

  10. kubernetes之python调用

    安装 sudo pip3 install kubernetes 认证 首先引入SDK支持库.然后将 ~/.kube 的config文件的内容复制到本地目录,保存为文件kubeconfig.yaml,然 ...