Python的网络请求
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
在上一节中多次提到了URL地址与下载网页,这两项是网络爬虫必备而又关键的功能,说到这两个功能必然会提到HTTP。本节将介绍在Python中实现HTTP网络请求常见的三种方式:urllib、urllib3以及requests。
1 urllib模块
urllib是python自带模块,该模块中提供了一个urlopen()方法,通过该方法指定URL发送网络请求来获取数据。urllib提供了多个子模块,具体的模块名称与含义如表1所示。
表1 urllib中的子模块
| 模 块 名 称 | 描 述 |
| urllib.request | 该模块定义了打开URL(主要是HTTP)的方法和类,例如,身份验证、重定向、cookie等等 |
| urllib.error | 该模块中主要包含异常类,基本的异常类是URLError |
| urllib.parse | 该模块定义的功能分为两大类:URL解析和URL引用 |
| urllib.robotparser | 该模块用于解析robots.txt文件 |
通过urllib.request模块实现发送请求并读取网页内容的简单示例如下:
import urllib.request # 导入模块
# 打开指定需要爬取的网页
response = urllib.request.urlopen('http://www.baidu.com')
html = response.read() # 读取网页代码
print(html) # 打印读取内容
上面的示例中,是通过get请求方式获取百度的网页内容。下面通过使用urllib.request模块的post请求实现获取网页信息的内容,示例如下:
import urllib.parse
import urllib.request
# 将数据使用urlencode编码处理后,再使用encoding设置为utf-8编码
data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')
# 打开指定需要爬取的网页
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
html = response.read() # 读取网页代码
print(html) # 打印读取内容
说明:这里通过http://httpbin.org/post网站进行演示,该网站可以作为练习使用urllib的一个站点使用,可以模拟各种请求操作。
注意:由于本章使用Scrapy爬虫框架和Crawley爬虫框架,代码部分与IDLE中的颜色有不一致的情况,这是考虑了与环境一致的原则。
2 Urllib3模块
Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用Urllib3。Urllib3提供了很多Python标准库里所没有的重要特性:
Urllib3是一个功能强大,条理清晰的 HTTP客户端,适用于Python。Urllib3提供了很多Python标准库里所没有的重要特性:
l 线程安全。
l 连接池。
l 客户端SSL / TLS验证。
l 使用大部分编码上传文件。
l Helpers用于重试请求并处理HTTP重定向。
l 支持gzip和deflate编码。
l 支持HTTP和SOCKS代理。
l 100%的测试覆盖率。
通过Urllib3模块实现发送网络请求的示例代码如下:
import urllib3
# 创建PoolManager对象,用于处理与线程池的连接以及线程安全的所有细节
http = urllib3.PoolManager()
# 对需要爬取的网页发送请求
response = http.request('GET','https://www.baidu.com/')
print(response.data) # 打印读取内容
post请求实现获取网页信息的内容,关键代码如下:
# 对需要爬取的网页发送请求
response = http.request('POST','http://httpbin.org/post',fields={'word': 'hello'})
注意:在使用Urllib3模块前,需要在Python中通过pip install urllib3代码进行模块的安装。
3 requests模块
requests是Python中实现HTTP请求的一种方式,requests是第三方模块,该模块在实现HTTP请求时要比urllib模块简化很多,操作更加人性化。在使用requests模块时需要通过执行pip install requests代码进行该模块的安装。requests模块的功能特性如下:

以GET请求方式为例,打印多种请求信息的示例代码如下:
import requests # 导入模块
response = requests.get('http://www.baidu.com')
print(response.status_code) # 打印状态码
print(response.url) # 打印请求url
print(response.headers) # 打印头部信息
print(response.cookies) # 打印cookie信息
print(response.text) # 以文本形式打印网页源码
print(response.content) # 以字节流形式打印网页源码
以POST请求方式,发送HTTP网络请求的示例代码如下:
import requests
data = {'word': 'hello'} # 表单参数
# 对需要爬取的网页发送请求
response = requests.post('http://httpbin.org/post', data=data)
print(response.content) # 以字节流形式打印网页源码
requests模块不仅提供了以上两种常用的请求方式,还提供以下多种网络请求的方式。代码如下:
requests.put('http://httpbin.org/put',data = {'key':'value'}) # PUT请求
requests.delete('http://httpbin.org/delete') # DELETE请求
requests.head('http://httpbin.org/get') # HEAD请求
requests.options('http://httpbin.org/get') # OPTIONS请求
如果发现请求的URL地址中参数是跟在“?”的后面,例如“httpbin.org/get?key=val”。requests模块提供了传递参数的方法,允许使用params 关键字参数,以一个字符串字典来提供这些参数。例如,传递“key1=value1”和“key2=value2”到“httpbin.org/get”,可以使用如下代码:
import requests
payload = {'key1': 'value1', 'key2': 'value2'} # 传递的参数
# 对需要爬取的网页发送请求
response = requests.get("http://httpbin.org/get", params=payload)
print(response.content) # 以字节流形式打印网页源码

相关文章:
Python的网络请求
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在上一节中多次提到了URL地址与下载网页,这两项是网络爬虫必备而又关键的功能,说到这两个功能必然会提到HTTP。本节将介绍在P…...
[Shell编程学习路线]——探讨Shell中变量的作用范围(export)
🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月14日10点14分 🀄️文章质量:95分 文章目录 ————前言———— 定义变量: 输出变…...
AlertManager解析:构建高效告警系统
一、AlertManager简介 AlertManager是一个开源的告警管理工具,主要用于处理来自于监控系统(如Prometheus)的告警。它的设计目标是提供一个统一的告警处理平台,能够集中管理告警的路由、去重、分组和通知等操作。在现代云服务架构中…...
打造专属 Switch 模拟游戏机
文章目录 2种方案Switch版RetroArchLakka系统 整体性能对比:Lakka更优核心是否兼容:并不兼容整合2种方案:共享游戏ROM和配置、资源等文件夹临时修改Samba共享整个Lakka系统根目录 存储空间优化添加模拟器核心Switch版RetroArchLakka 添加游戏…...
如何使用Python中的type()函数和isinstance()函数
在Python中,type()函数和isinstance()函数都用于确定一个对象的类型,但它们在用法和目的上有所不同。 1. type()函数 type()函数返回对象的数据类型(或类)。它接受一个参数(即要检查的对象),并…...
【LeetCode刷题】前缀和解决问题:560.和为k的子数组
【LeetCode刷题】Day 16 题目1:560.和为k的子数组思路分析:思路1:前缀和 哈希表 题目1:560.和为k的子数组 思路分析: 问题1:怎样找到数组所有子数组? 方式一:暴力枚举出来&#x…...
DTU在城市智慧供热上的应用:引领供热行业的智能化革新
随着城市化的快速推进和人们对舒适生活需求的日益增长,供热系统作为城市基础设施的重要组成部分,其智能化、高效化的发展已成为必然趋势。在这一进程中,DTU(Data Transfer Unit,数据传输单元)以其独特的优势…...
LeetCode | 58.最后一个单词的长度
这道题要求最后一个单词的长度,第一个想到的就是反向遍历字符串,寻找最后一个单词并计算其长度。由于尾部可能会有’ ,所以我们从后往前遍历字符串,找到第一个非空格的字符,然后记录下到下一个空格前依次有多少个字母即…...
202479读书笔记|《你是人间的四月天》——谁又能参透这幻化的轮回, 谁又大胆的爱过这伟大的变幻?
202479读书笔记|《你是人间的四月天》——谁又能参透这幻化的轮回, 谁又大胆的爱过这伟大的变幻? 散文诗歌书信 《你是人间的四月天(果麦经典)》作者林徽因,才女的散文,诗歌,书信集选。很值得一…...
近期docker镜像加速器被封杀,需要的请看此内容 点赞加关注
{ “registry-mirrors”: [“https://docker.m.daocloud.io”], “insecure-registries”: [“harbor.sunya.com”], “exec-opts”: [“native.cgroupdriversystemd”], “data-root”: “/data/docker”, “log-driver”: “json-file”, “log-opts”: {“max-size”:“500m…...
开源大模型的新星:ChatGPT-Next-Web 项目解析与推荐
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【区块链】记账的千年演化:从泥板到区块链
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 记账的千年演化:从泥板到区块链引言一、古代记账:泥板与…...
MySQL的索引类型,以及各自的作用
MySQL的索引类型,以及各自的作用 常见的索引类型 主键索引(Primary Key Index): 唯一标识表中的记录,确保索引列的值在整个表中是唯一的主键索引通常是唯一索引的一种特例作用:加速查询,并自动…...
数组中的map方法
JavaScript中的map()方法详解 map()方法经常拿来遍历数组,但是不改变原数组,但是会返回一个新的数组,并且这个新的数组不会改变原数组的长度 注意:有时候会出现这种现象,出现几个undefined const array [1, 4,9, 16…...
使用Python生成并上传文档
这是一个简单的 Python 程序,用于生成文本文件并上传至 FTP 服务器; 通过输入文件名和内容,你可以将文档上传至指定的 FTP 服务器目录中; 在上传成功后,程序会自动关闭窗口。 使用方法 输入文件名和内容。 点击“生…...
LAMP部署及应用
在Web开发和应用程序部署中,LAMP(Linux、Apache、MySQL/MariaDB、PHP/Python/Perl)环境是一个经典的选择。本文将详细介绍如何在Linux系统上部署和配置LAMP环境,并展示一个简单的应用示例。 --- 目录 1. 简介 2. 准备工作 3. 步…...
【STM32进阶笔记】GPIO端口
前段时间由于其他原因,专栏暂停更新了较长一段时间,现在恢复更新,争取继续为大家创造有价值的内容,期待大家的订阅关注,欢迎互相学习交流。 在STM32速成笔记系列专栏中其实已经对GPIO的一些必要知识进行了介绍…...
探索HTML5 Geolocation:精准定位网页的新纪元
在互联网技术日新月异的今天,地理定位已经成为众多Web应用不可或缺的一部分,而HTML5 Geolocation API正是这一领域的关键技术。本文将深入剖析HTML5 Geolocation API的工作原理、使用方法,并通过实战代码示例,带你领略其在现代网页…...
C++程序打开EXCEL2010失败,提示:远程过程调用失败
前两天将Foxit福昕PDF阅览器升级到了最新版本,导致了这个问题,参照这篇文章才知道是升级了福昕阅读器引起的: c#调用excel报错(异常来自HRESULT:0X80010105(RPC_SERVERFAULT)) 这个问题折腾了很久才搞定,网上的很多办法都不靠谱…...
错题记录(小测)
单选 错题1 错题2 错题3 代码题 反转链表 链表的回文结构...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
