【python学习】爬虫中常使用的urllib和requests库的的背景、定义、特点、功能、代码示例以及两者的区别

引言

urllib是Python标准库中的一个模块,它提供了一系列用于操作URL的功能
requests是一个Python第三方库,由Kenneth Reitz创建,用于简化HTTP客户端的编程

一、urllib的定义

urllib可以操作url,主要分为以下几个子模块:

1.1 urllib.request

用于打开和读取URLs

1.2 urllib.error

包含urllib.request引发的异常

1.3 urllib.parse

用于解析URLs

1.4 urllib.robotparser

用于解析robots.txt文件

二、urllib的特点

2.1 内置

urllib是Python标准库的一部分,因此不需要额外安装

2.2 功能全面

支持多种网络协议,包括HTTP、HTTPS、FTP等

2.3 易于使用

提供了简单易用的API,适合进行简单的网络请求操作

三、urllib的功能

3.1 打开URLs

使用urllib.request.urlopen()函数可以轻松打开一个URL

3.2 发送请求

支持发送GET、POST等HTTP请求

3.3 处理异常

urllib.error模块可以捕获和处理网络请求过程中出现的异常

3.4 解析URLs

urllib.parse模块可以解析和构造URLs

3.5 遵守robots.txt

urllib.robotparser模块可以帮助遵守网站的爬虫访问规则

四、urllib的代码示例

以下是使用urllib模块进行网络请求的几个示例:

4.1 发送GET请求

import urllib.request
# 发送GET请求
with urllib.request.urlopen('http://www.example.com') as response:html = response.read()print(html.decode('utf-8'))

4.2 发送POST请求

import urllib.request
import urllib.parse
url = 'http://httpbin.org/post'
values = {'key': 'value'}
data = urllib.parse.urlencode(values)
data = data.encode('utf-8')  # data should be bytes
req = urllib.request.Request(url, data=data, method='POST')
with urllib.request.urlopen(req) as response:print(response.read().decode('utf-8'))

4.3 处理异常

import urllib.request
import urllib.error
try:response = urllib.request.urlopen('http://www.example.com/404')
except urllib.error.HTTPError as e:print(f'HTTPError: {e.code} {e.reason}')
except urllib.error.URLError as e:print(f'URLError: {e.reason}')

4.4 解析URLs

from urllib.parse import urlparse
result = urlparse('http://www.example.com/index.html;user?id=5#comment')
print(result)
# 输出:ParseResult(scheme='http', netloc='www.example.com', path='/index.html', params='user', query='id=5', fragment='comment')

以上示例展示了urllib库的一些基本用法,包括如何发送HTTP请求、如何处理请求异常以及如何解析URLs。由于urllib库功能丰富,这些示例只是冰山一角。

五、requests的定义

requests是基于urllib3,提供了一个更加用户友好的API来发送HTTP/1.1请求

六、requests的特点

6.1 简洁易用

requests的API设计简洁直观,易于上手和使用

6.2 功能丰富

支持HTTP连接保持和连接池,支持SSL/TLS验证,支持国际化和本地化等

6.3 无需手动处理编码

自动处理HTTP响应内容的编码问题

6.4 支持会话与 cookies

能够使用会话对象来跨请求保持某些参数,如cookies

6.5 支持插件

requests支持插件,可以轻松扩展其功能

七、requests的功能

7.1 发送各种HTTP请求(GET, POST, PUT, DELETE, HEAD, OPTIONS等)

7.2 处理请求参数、URL、头信息和内容数据

7.3 处理HTTP响应内容,包括JSON、XML、HTML等

7.4 使用会话对象来跨请求保持某些参数

7.5 上传文件

7.6 处理SSL证书验证

7.7 设置代理

7.8 异常处理

八、requests的安装

8.1 requests不是Python标准库的一部分,需要通过以下命令安装:

pip install requests

8.2 若是在pycharm中则按下图所示操作:

在这里插入图片描述

九、requests的代码示例

以下是使用requests库进行网络请求的几个示例:

9.1 发送GET请求

import requests
response = requests.get('https://api.github.com/user', params={'username': 'example'})
print(response.json())

9.2 发送POST请求

import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://httpbin.org/post', data=data)
print(response.text)

9.3 使用会话对象

import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
response = s.get("http://httpbin.org/cookies")
print(response.text)

9.4 异常处理

import requests
from requests.exceptions import HTTPError, ConnectionError, Timeout, RequestException
try:response = requests.get('https://api.github.com', timeout=5)response.raise_for_status()
except HTTPError as http_err:print(f'HTTP error occurred: {http_err}')
except ConnectionError as conn_err:print(f'Connection error occurred: {conn_err}')
except Timeout as timeout_err:print(f'Timeout error occurred: {timeout_err}')
except RequestException as req_err:print(f'Oh no, something bad happened: {req_err}')

9.5 上传文件

import requests
files = {'file': open('report.xls', 'rb')}
response = requests.post('http://httpbin.org/post', files=files)
print(response.text)

这些示例展示了requests库的几个核心功能

  1. 发送请求
  2. 处理响应
  3. 使用会话
  4. 异常处理
  5. 上传文件

requests库因其简洁和强大而成为Python中处理HTTP请求的常用库

十、urllibrequests的区别

urllibrequests都是Python中用于发送HTTP请求的库,但它们在API设计、易用性、功能性和社区支持等方面存在一些显著的区别

10.1 API设计和易用性

  • urllib
    • 作为Python标准库的一部分,无需额外安装
    • 提供了较低级别的API,使用起来较为复杂,需要编写更多的代码来完成相同的任务
    • 异常处理较为分散,需要分别捕获不同类型的异常
  • requests
    • 需要单独安装,不是Python标准库的一部分
    • 提供了简洁、直观的API,使得发送请求和处理响应变得极其简单
    • 异常处理更加统一,通过requests.exceptions模块来捕获和处理各种异常

10.2 功能性

  • urllib
    • 功能相对基础,适合进行简单的请求
    • 对于复杂的任务,如会话保持、cookie处理、SSL验证等,需要更多的手动操作
  • requests
    • 功能更加全面,内置了会话对象、cookie持久化、SSL验证、连接池、JSON响应解析等高级功能
    • 支持插件,可以轻松扩展其功能

10.3 社区支持

  • urllib
    • 作为标准库的一部分,更新周期与Python相同,通常较为稳定
    • 社区支持主要通过Python官方渠道
  • requests
    • 社区驱动,更新频繁,社区支持广泛
    • 由于是第三方库,可能包含更多最新的特性和改进

10.4 性能

  • urllib
    • 对于简单的请求,性能通常足够
    • 对于复杂的请求或并发操作,可能需要额外的库(如http.client)来优化
  • requests
    • 内部使用了urllib3,因此在性能上有所优化,尤其是在并发请求时

示例对比

以下是使用urllibrequests发送GET请求的简单示例对比:
使用urllib发送GET请求:

import urllib.request
import urllib.error
try:with urllib.request.urlopen('http://example.com') as response:data = response.read()print(data.decode('utf-8'))
except urllib.error.HTTPError as e:print(f'HTTPError: {e.code} {e.reason}')
except urllib.error.URLError as e:print(f'URLError: {e.reason}')

使用requests发送GET请求:

import requests
response = requests.get('http://example.com')
print(response.text)

使用requests发送网络请求通常更加简洁明了
然而,由于urllib是Python标准库的一部分,因此在不允许安装第三方库的环境中,urllib可能是唯一的选择

十一、总结(思维导图)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3249057.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习入门——误差反向传播

要正确理解误差反向传播法,我个人认为有两种方法:一种是基于数学式;另一种是基于计算图(computational graph) 前者是比较常见的方法,机器学习相关的图书中多数都是以数学式为中心展开论述的。因为这种方法…

Seaborn库学习之heatmap()函数

Seaborn库学习之heatmap(函数) 一、简介 seaborn.heatmap是Seaborn库中用于绘制热图(Heatmap)的函数。热图是一种数据可视化技术,通过颜色的变化来展示数据矩阵中的数值大小。这种图表非常适合展示数值数据的分布和关系,尤其是在…

【深度学习】InternVL2-8B,图转文,docker部署

文章目录 基础fastapi服务请求fastapi接口 基础 https://huggingface.co/OpenGVLab/InternVL2-8B#%E7%AE%80%E4%BB%8B InternVL2-26B应该更好,但显存没那么大,只能跑InternVL2-8B了。 下载: cd /ssd/xiedong/InternVL2-26B git clone htt…

教你使用win10实现电脑的定时任务执行

本篇文章主要讲解,通过使用win10自带的任务计划程序,进行对单个或多个脚本定时执行的详细操作教程。 日期:2024年7月18日 作者:任聪聪 前置条件: 1.电脑中有java、php、python等其中一个环境。 2.编写一个书写test ta…

【快速逆向一/无过程/有源码】《大学》在线投稿系统

逆向日期:2024.07.18 使用工具:Node.js 加密工具:Crypto-js标准库 文章全程已做去敏处理!!! 【需要做的可联系我】 【点赞 收藏 关注 】仅供学习,仅供学习, 本文为快速逆向&#x…

导入导出sql脚本文件

业务场景 在复杂系统中,有时候去做数据同步我们需要一次导出导入十几张表甚至更多表的数据,这些数据在不同数据库,也可能分布不同微服务中,三个四个甚至更多,如果使用excel去处理会很复杂,任务复杂度很高&…

电脑出现错误代码0x00000709一键修复的几种方法

错误代码0x00000709通常在 Windows 系统中与打印机设置有关,特别是当尝试设置默认打印机时。这个问题可能是由于权限不足、注册表问题或系统文件损坏导致的。虽然没有官方的“一键修复”工具,但您可以通过以下步骤尝试解决此问题。 解决方案 1: 使用管理…

Linux LVM扩容方法

问题描述 VMware Centos环境,根分区为LVM,大小50G,现在需要对根分区扩容。我添加了一块500G的虚拟硬盘(/dev/sdb),如何把这500G扩容到根分区? LVM扩容方法 1. 对新磁盘分区 使用fdisk /dev/sdb命令,进…

免费的ssh工具

1.Quickstart - kitty 2 Download Termius for Windows 3. MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download

24年Hvv准备,6大方向,33篇技战法

进去不少小伙伴后台留言说需要技战法,因此小编对市面上的技战法进行了收集和总结,并对收集来的技战法进行了分类,总共分了6大类,共计33篇: 有需要的小伙伴关注我,点击在看,并私信回复“技战法”…

无缝集成第三方应用,加速数据驱动决策

摘要: 在数据为王的时代,快速准确地整合并分析来自不同源头的数据成为了企业制胜的关键。本文将深入探讨如何通过Python编程语言,无缝集成第三方应用,构建高效的数据采集与分析流程,从而加速企业的数据驱动决策过程。…

C语言学习笔记[25]:循环语句for

for循环 for循环的基本语法 for(表达式1;表达式2;表达式3)循环语句; 表达式1为初始化部分,用于初始化循环变量的。 表达式2为条件判断部分,用于判断循环何时终止。 表达式3为调整部分,用于循环条件的调整。 例如用for循环实现打印1~10的数字…

spring事件发布器ApplicationEventPublisher的使用

1、前言 spring中有一个事件发布器,使用了观察者模式,当有事件发布的时候,事件监听者会立刻收到发布的事件。今天我们来介绍下这个事件发布器怎么使用。 2、简单使用 2.1、创建事件实体类 事件实体类需要继承ApplicationEvent。我们模拟老师发布事件的诉求。 public class T…

【51项目】基于51单片机protues交通灯的设计(完整资料源码)

基于51单片机protues交通灯的设计 一、 项目背景 1.1背景 随着科技的不断发展,LED技术在交通领域的应用越来越广泛。LED模拟交通灯作为一种新型的交通信号控制设备,以其高效、节能、环保等优点,逐渐取代了传统的交通信号灯。近年来&#xff…

【jenkins+cmake+svn管理c++项目】msbuild: command not found

一、前言 jenkins中配置cmakeVS的编译构建过程,需要用到MSBuild这个工具来完成VS工作,MSBuild的安装配置方法见:windows编译环境和工具配置 MSBuildCMAKE的编译可以用脚本来完成,我在jenkins的构建步骤中添加了一个ExecuteShell…

【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)

​​​​​​​ 一、引言 pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理&#x…

数据库如何简单入手学习

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 作为一个后端开发人员,应该没有不接触数据库的,数据库操作优化也是后端面试人员的重点面…

2024辽宁省数学建模B题【钢铁产品质量优化】原创论文分享

大家好呀,从发布赛题一直到现在,总算完成了2024 年辽宁省大学数学建模竞赛B题钢铁产品质量优化完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 B题论文…

Visual Studio 智能代码插件:Fitten Code

Fitten Code 是由非十大模型驱动的AI编程助手,它可以自动生成代码,提升开发效率,协助调试 Bug,节省时间。还可以对话聊天,解决编程碰到的问题。 Fitten Code 免费且多种编程语言,包括 Python、C、Javascri…

在VS2022中通过Nuget将vcpkg环境集成/卸载到c++项目

在VS2022中通过Nuget将vcpkg环境集成/卸载到c项目 vcpkg是微软和C社区维护的免费开源C/C包管理器。利用它,可以一条命令编译安装用户所需的库;提供CMake配置文件;并且对于Windows开发者,在Visual Studio中集成后还可以自动链接静…