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

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的一些必要知识进行了介绍&#xf…...

探索HTML5 Geolocation:精准定位网页的新纪元

在互联网技术日新月异的今天,地理定位已经成为众多Web应用不可或缺的一部分,而HTML5 Geolocation API正是这一领域的关键技术。本文将深入剖析HTML5 Geolocation API的工作原理、使用方法,并通过实战代码示例,带你领略其在现代网页…...

C++程序打开EXCEL2010失败,提示:远程过程调用失败

前两天将Foxit福昕PDF阅览器升级到了最新版本,导致了这个问题,参照这篇文章才知道是升级了福昕阅读器引起的: c#调用excel报错(异常来自HRESULT:0X80010105(RPC_SERVERFAULT)) 这个问题折腾了很久才搞定,网上的很多办法都不靠谱…...

错题记录(小测)

单选 错题1 错题2 错题3 代码题 反转链表 链表的回文结构...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...

DAY 26 函数专题1

函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...