当前位置: 首页 > news >正文

Python爬虫之requests库

1、准备工作

pip install requests

2、实例

urllib库中的urlopen方法实际上就是以GET方式请求网页,requests库中相应的方法就是get方法

import requestsr = requests.get('https://www.baidu.com/')
print(type(r))			# <class 'requests.models.Response'>  响应类型
print(r.status_code)	# 200                                 状态码
print(type(r.text))		# <class 'str'>                       响应体类型
print(r.text[:100])		# <!DOCTYPE html>...                  响应体内容
print(r.cookies)		# <RequestsCookieJar...               cookie
r = requests.get('https://www.httpbin.org/get')				# get请求
r = requests.post('https://www.httpbin.org/post')			# post请求
r = requests.put('https://www.httpbin.org/put')				# put请求
r = requests.delete('https://www.httpbin.org/delete')		# delete请求
r = requests.patch('https://www.httpbin.org/patch')			# patch请求

3、GET请求

requests库构建GET请求。

3.1、基本实例

构造一个简单的GET请求:

import requestsr = requests.get('https://www.httpbin.org/get')
print(r.text)#{
#  "args": {}, 
#  "headers": {
#    "Accept": "*/*", 
#    "Accept-Encoding": "gzip, deflate", 
#    "Host": "www.httpbin.org", 
#    "User-Agent": "python-requests/2.31.0", 
#    "X-Amzn-Trace-Id": "Root=1-65fe76c4-16fedcf50d4868a141c3d0a8"
#  }, 
#  "origin": "118.254.22.196", 
#  "url": "https://www.httpbin.org/get"
#}
#

对GET请求添加额外的参数:

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

网页的返回类型虽然是str类型,但它很特殊,收JSON格式的。所以可调用json方法解析得到JSON格式数据。

r = requests.get('https://www.httpbin.org/get')
print(type(r.text))
print(r.json())
print(type(r.json()))# <class 'str'>
# {'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'www.httpbin.org', 'User-Agent': 'python-requests/2.31.0', 'X-Amzn-Trace-Id': 'Root=1-65fe795f-16d3d7a6715859e8100771b0'}, 'origin': '118.254.22.196', 'url': 'https://www.httpbin.org/get'}
# <class 'dict'>  字典格式

3.2、抓取网页

上述链接返回的是JSON格式,若请求普通网页便能获取相应的内容。

r = requests.get('https://ssr1.scrape.center/')
pattern = re.compile('<h2.*?>(.*?)</h2>',re.S)	# 用正则表达式匹配所有标题内容
titles = re.findall(pattern,r.text)
print(titles)# ['霸王别姬 - Farewell My Concubine', '这个杀手不太冷 - Léon'...

3.3、抓取二进制数据

图片、音频、视频本质上都是由二进制数据组成。

r = requests.get('https://scrape.center/favicon.ico')	# 抓取网站图标
with open('favicon.ico','wb') as f:						# 保存二进制文件f.write(r.content)

3.4、添加请求头

若没有请求头,某些网站会发现这并不是一个由浏览器发起的请求,可能会返回异常结果,使用heders参数添加请求头。

headers = {'User-Aagent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
}
r = requests.get('https://ssr1.scrape.center/',headers=headers)
print(r.text)# 在这个headers参数中可以添加任意其他字段信息

4、POST请求

data = {'name':'germey','age' : 25}
r = requests.post('https://www.httpbin.org/post',data=data)
print(r.text)#{
#	...
#  "form": {				# form就是提交的数据,说明POST请求成功发送
#    "age": "25", 
#    "name": "germey"
#  }, 
#...
#}

5、响应

r = requests.get('https://ssr1.scrape.center/')
print(type(r.status_code),r.status_code)	# 状态码:  int 200
print(type(r.headers),r.headers)			# 响应头: CaseInsensitiveDict {'Date': 'Sat, 23...}
print(type(r.cookies),r.cookies)			# Cookie:  RequestsCookieJar
print(type(r.url),r.url)					# URL: str https://ssr1.scrape.center/
print(type(r.history),r.history)			# 请求历史 list []

requests库还提供了一个内置的状态码查询对象requests.codes

r = requests.get('https://ssr1.scrape.center/')
exit() if not r.status_code == requests.codes.ok else print('请求成功')# 通过比较返回码和内置的表示成功的状态码,来保证请求是否得到了正常响应。

6、高级用法

6.1、文件上传

files = {'file':open('../GET请求/favicon.ico','rb')}
r = requests.post('https://www.httpbin.org/post',files=files)
print(r.text)# "files": {
#    "file": "data:application...
#  }, 
# 证明文件上传部分会单独用一个files字段来标识

6.2、Cookie设置

获取cookie:

r = requests.get('https://www.baidu.com')
print(r.cookies)	
for key,value in r.cookies.items():print(key + '=' + value)#<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
# items方法将cookie转化为由元组组成的列表。遍历输出名称和值,实现解析。

6.3、Session维持

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

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

6.4、SSL证书验证

现在很多网站要求使用HTTPS协议,但有些网站有可能没有设置好HTTPS证书,或者网站的HTTPS证书可能不被CA机构认可,这时就可能SSL证书错误提示。

我们可以在浏览器中通过一些设置来忽略证书的验证。

可以使用verify参数控制是否验证证书,设为False在请求时不会验证证书是否有效。

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

6.5、超时设置

为防止服务器不能及时响应,应设置一个超时时间,如超时则报错。使用timeout参数。

r = requests.get('https://www.httpbin.org/get',timeout=1)
print(r.status_code)# 实际上,请求分为两个阶段:连接(connect)和读取(read)。
# 所以timeout可以分别设置连接和读取的超时时间。
r = requests.get('https://www.httpbin.org/get',timeout=(5,30))

6.6、身份认证

通过auth参数可设置身份认证功能。

import requests
from requests.auth import HTTPBasicAuthr = requests.get('https://ssr3.scrape.center/',auth=HTTPBasicAuth('admin','admin'))
print(r.status_code)   # 200  表示身份认证成功# 简单写法:
r = requests.get('https://ssr3.scrape.center/',auth('admin','admin')) 即可

6.7、代理设置

某些网站面对频繁请求时,可能弹验证码或跳转登录界面甚至封禁。因此,通过proxies设置代理解决。

# HTTP代理:
proxies = {'http':'http://user:password@host:port','https':'http://user:password@host:port'
}
requests.get('https://httpbin.org/get',proxies=proxies)# SOCKS代理:
proxies = {'http':'socks5://user:password@host:port','https':'socks5://user:password@host:port'
}
requests.get('https://httpbin.org/get',proxies=proxies)

6.8、Prepared Request

requests在发送请求时、在内部构造了一个Request对象,并给这个对象赋予了各种参数,包括url、headers、data等。Request对象就是一个Prepared Request类型

因此,我们不用get方法,直接构造一个Prepared Request对象试试:

from requests import Request,Sessionurl='https://www.httpbin.org/post'
data = {'name':'germey'}
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
}
s = Session()
req = Request('POST',url,data=data,headers=headers)	# 构造Request对象
prepped = s.prepare_request(req)					# 转换为Prepared Request对象
r = s.send(prepped)									# 发送请求
print(r.text)# 至此,打到与POST请求同样的效果

相关文章:

Python爬虫之requests库

1、准备工作 pip install requests 2、实例 urllib库中的urlopen方法实际上就是以GET方式请求网页&#xff0c;requests库中相应的方法就是get方法。 import requestsr requests.get(https://www.baidu.com/) print(type(r)) # <class requests.models.Response> 响…...

鱼塘钓鱼(多路归并)

有 N 个鱼塘排成一排&#xff0c;每个鱼塘中有一定数量的鱼&#xff0c;例如&#xff1a;N5 时&#xff0c;如下表&#xff1a; 鱼塘编号12345第1分钟能钓到的鱼的数量 &#xff08;1…1000&#xff09;101420169每钓鱼1分钟钓鱼数的减少量&#xff08;1…100)24653当前鱼塘到…...

java每日一题——买啤酒(递归经典问题)

前言&#xff1a; 非常喜欢的一道题&#xff0c;经典中的经典。打好基础&#xff0c;daydayup!!!啤酒问题&#xff1a;一瓶啤酒2元&#xff0c;4个盖子可以换一瓶&#xff0c;2个空瓶可以换一瓶&#xff0c;请问10元可以喝几瓶 题目如下&#xff1a; 啤酒问题&#xff1a;一瓶…...

最近接到一个大项目,给公司设计抢商品代金劵业务

我们公司是做汽车金融方面的工作&#xff0c;在业内还挺大。目前单量来源于2&#xff0c;3线城市&#xff0c;随着大环境越老越差位了吸引他们&#xff0c; 公司决定给全国的客户&#xff0c;销售等发一些商品 1.总体学习了京东开源秒杀系统设计思路和方案。 我们公司决定进行…...

防火墙(讲解)

目录 1.防火墙是什么? 2.防火墙设备 3.防火墙功能 1)出色的控制能力&#xff0c;过滤掉不安全服务 2)过滤非法用户和访问特殊站点 3)它能够对网络存取和访问进行监控审计 4.防火墙的局限 (1)防火墙有可能是可以绕过的 (2)防火墙不能防止内部出卖性攻击或者内部误操作…...

Python之装饰器-带参装饰器

Python之装饰器-带参装饰器 带参装饰器 之后不是一个单独的标识符&#xff0c;是一个函数调用函数调用的返回值又是一个函数&#xff0c;此函数是一个无参装饰器带参装饰器&#xff0c;可以有任意个参数 func()func(1)func(1, 2) def add(x, y):"""函数说明&…...

抖音IP属地怎么更改

抖音是一个非常受欢迎的短视频平台&#xff0c;吸引了无数用户在上面分享自己的生活和才艺。然而&#xff0c;随着快手的火爆&#xff0c;一些用户开始担心自己的IP地址会被他人获取&#xff0c;引起个人隐私风险。那么&#xff0c;抖音用户又该如何更改到别的地方呢&#xff1…...

Flutter 全局控制底部导航栏和自定义导航栏的方法

1. 介绍 导航栏在移动应用中扮演着至关重要的角色&#xff0c;它是用户与应用之间进行导航和交互的核心组件之一。无论是简单的页面切换&#xff0c;还是复杂的应用导航&#xff0c;导航栏都能够帮助用户快速找到所需内容&#xff0c;提升用户体验和应用的易用性。 在移动应用…...

检索增强生成(RAG)技术:实现流程、作用及应用案例

一. RAG简介 在自然语言处理&#xff08;NLP&#xff09;领域中&#xff0c;检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;技术巧妙地结合了信息检索与神经网络生成模型的力量&#xff0c;通过在生成过程中引入相关的外部信息&#xff0c;实现了在…...

Ubuntu安装和使用

Ubuntu 安装和配置 修改下载源 打开软件与更新, 选择其它站点, 选择中国, 选择阿里云源 谷歌中文输入法配置 Ctrl Alt T打开终端, 执行下述命令下fcitx框架 输入密码进行安装 sudo apt-get install -y fcitx-googlepinyinWin呼出菜单, 选择语言支持, 第一次打开会显示语言…...

【Unity】Stream最好用的Selfhost开源轻量服务

【背景】 有好几种场景的投屏或者远控应用希望实现&#xff0c;无论用哪种方式&#xff0c;都绕不开如何构建服务这一关。 【分析】 外网有很多直接付费使用的信令传输类型或是提供流服务的服务器&#xff0c;但我的目标场景是断绝外网的局域网&#xff0c;而且付费也总觉得…...

Web 常见的攻击方式有哪些?

常见的 Web 攻击方式有以下几种&#xff1a; 跨站脚本攻击&#xff08;XSS 攻击&#xff09; 跨站请求伪造&#xff08;XSRF 攻击&#xff09; SQL 注入 XSS 攻击 MDN 定义如下&#xff1a; 跨站脚本攻击&#xff08;Cross-site scripting&#xff0c;XSS&#xff09;是一…...

Rancher(v2.6.3)——Rancher部署Redis(单机版)

Rancher部署Redis详细说明文档]&#xff1a;https://gitee.com/WilliamWangmy/snail-knowledge/blob/master/Rancher/Rancher%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.md#6rancher%E9%83%A8%E7%BD%B2redis ps&#xff1a;如果觉得作者写的还行&#xff0c;能够满足您的需求&#…...

stm32-模拟数字转化器ADC

接线图&#xff1a; #include "stm32f10x.h" // Device header//1: 开启RCC时钟&#xff0c;包括ADC和GPIO的时钟//2&#xff1a;配置GPIO将GPIO配置为模拟输入模式//3&#xff1a;配置多路开关将左边的通道接入到规则组中//4&#xff1a;配置ADC转…...

[Repo Git] manifests的写法

​manifests​​是个啥 在Repo​中manifests​描述了Repo客户端的结构&#xff0c;也就是可以从manifests​中知道各个模块的代码应该从代码管理仓库当中哪个位置去获取。 ​manifests​的基本结构是一个Git存储库&#xff0c;在顶层目录中持有一个default.xml​文件。 由于m…...

位置编码与长度外推

位置编码 位置编码从前到后包括:绝对位置编码、余弦位置编码、旋转位置编码、ALiBi相对位置编码。 1 绝对位置编码(Absolute Positional Encoding) 应用的模型:BERT、GPT等Transformer基础模型广泛使用绝对位置编码来处理序列数据。 算法思想:绝对位置编码通过为序列中的…...

Linux信号补充——信号发送和保存

三、信号的发送与保存 3.1信号的发送 ​ 必须有操作系统来保存信号&#xff0c;因为他是管理者&#xff1b; ​ 信号给进程的task_struct发送信号&#xff0c;在task_struct中维护了一个整数signal有0-31位&#xff0c;共32个bit位&#xff1b;对于信号的管理使用的是位图结…...

Vue3 中应该使用 Ref 还是 Reactive?

一、引言 在Vue 3中&#xff0c;构建响应式数据结构是构建用户界面和交互体验的核心部分。而在创建这些响应式数据时&#xff0c;我们有两个主要工具&#xff1a;reactive和ref。选择使用哪一个&#xff0c;实际上取决于你的数据结构和访问需求。 reactive主要用于处理复杂的数…...

红外相机和RGB相机标定:实现两种模态数据融合

1. 前期准备 RGB相机&#xff1a;森云智能SG2-IMX390&#xff0c;1个红外相机&#xff1a;艾睿光电IR-Pilot 640X-32G&#xff0c;1个红外标定板&#xff1a;https://item.taobao.com/item.htm?_ujp3fdd12b99&id644506141871&spma1z09.2.0.0.5f822e8dKrxxYI 2.操作步…...

前端项目,个人笔记(五)【图片懒加载 + 路由配置 + 面包屑 + 路由行为修改】

目录 1、图片懒加载 步骤一&#xff1a;自定义全局指令 步骤二&#xff1a;代码中使用 ​编辑步骤三&#xff1a;效果查看 步骤四&#xff1a;代码优化 2、封装组件案例-传对象 3、路由配置——tab标签 4、根据tab标签添加面包屑 4.1、实现 4.2、bug&#xff1a;需要…...

Taurus多执行器对比实战:JMeter/Gatling/Locust统一压测方案

1. 为什么选Taurus做多执行器对比——不是为了炫技&#xff0c;而是为了少踩坑在性能测试领域&#xff0c;我见过太多团队卡在“选型”这一步&#xff1a;刚招来一个会写JMeter脚本的工程师&#xff0c;项目突然要压测WebSocket接口&#xff0c;发现JMeter原生支持弱、插件维护…...

SSH工具对比:新手用户和熟练运维,选型逻辑有什么不同

结论 新手用户和熟练运维在选择 SSH 工具时&#xff0c;关注点往往完全不同。 新手更在意的是&#xff1a;能不能顺利连接、界面是否直观、文件和配置是否容易找到、网站出问题时能不能快速定位。 而熟练运维更在意的是&#xff1a;连接效率、命令自由度、多服务器管理能力、原…...

电容损坏深度诊断,从外观到 ESR精准区分容衰与漏电

在 PCB 故障中&#xff0c;电容损坏占比超 40%&#xff0c;是当之无愧的 “头号杀手”。很多工程师仅靠 “鼓包漏液” 判断电容好坏&#xff0c;殊不知80% 的电容损坏是隐性的—— 外观平整但容值衰减、ESR 升高、轻微漏电&#xff0c;导致供电不稳、系统重启、噪声增大&#x…...

打不开JupyterLab

因为安装某些依赖导致JupyterLab的依赖被动升级或降级&#xff0c;从而影响了JupyterLab的运行&#xff0c;此时可以SSH登录到实例&#xff0c;然后输入jupyter-lab命令进行确认&#xff0c;如果执行命令报错则说明是此问题&#xff0c;那么可以通过pip install jupyterlab再次…...

别急着扔!12年老ThinkPad X230升级SSD和内存后,Win10流畅得像新电脑

12年老ThinkPad X230重生指南&#xff1a;极简升级打造流畅办公利器每次打开抽屉看到那台积灰的ThinkPad X230&#xff0c;总有种说不出的情感。这款2012年问世的经典商务本&#xff0c;曾陪伴无数人度过加班到凌晨的夜晚。如今性能确实有些力不从心&#xff0c;但直接丢弃又觉…...

Style-Bert-VITS2未来发展方向:从语音克隆到实时语音转换的技术演进路线

Style-Bert-VITS2未来发展方向&#xff1a;从语音克隆到实时语音转换的技术演进路线 【免费下载链接】Style-Bert-VITS2 Style-Bert-VITS2: Bert-VITS2 with more controllable voice styles. 项目地址: https://gitcode.com/gh_mirrors/st/Style-Bert-VITS2 Style-Bert…...

qobuz-dl终极实战指南:专业无损音乐下载工具架构解析与高效应用

qobuz-dl终极实战指南&#xff1a;专业无损音乐下载工具架构解析与高效应用 【免费下载链接】qobuz-dl A complete Lossless and Hi-Res music downloader for Qobuz 项目地址: https://gitcode.com/gh_mirrors/qo/qobuz-dl 在数字音乐时代&#xff0c;追求极致音质的音…...

从API调用成功率看Taotoken服务的稳定性与容灾表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 从API调用成功率看Taotoken服务的稳定性与容灾表现 在将大模型能力集成到自动化流程或日常开发工具链时&#xff0c;服务的稳定性和…...

服务器数据下载安全:实时加密与动态访问控制实战

1. 这不是又一个“加个密码”的方案&#xff0c;而是服务器数据流动的实时安检闸机IP-guard安全网关——这个名字在企业IT运维圈里&#xff0c;常被误读为“桌面端U盘管控工具”或“员工上网行为审计系统”。但真正用过它来守服务器的人&#xff0c;会立刻意识到&#xff1a;它…...

DRG存档编辑器终极指南:如何快速解锁《深岩银河》的全部游戏体验

DRG存档编辑器终极指南&#xff1a;如何快速解锁《深岩银河》的全部游戏体验 【免费下载链接】DRG-Save-Editor Rock and stone! 项目地址: https://gitcode.com/gh_mirrors/dr/DRG-Save-Editor 还在为《深岩银河》中无尽的资源收集和等级提升感到疲惫吗&#xff1f;DRG…...