Python学习笔记22:进阶篇(十一)常见标准库使用之访问互联网功能urllib模块的学习使用,requests库和aiohttp库了解

前言

本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。

根据模块知识,一次讲解单个或者多个模块的内容。

教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html

互联网访问

Python在互联网访问方面提供了强大的支持,无论是通过标准库还是第三方库,都能轻松实现网页抓取、API调用、数据下载等多种任务。
这里讲一下常用的互联网访问模块。

  1. urllib(包括urllib.request, urllib.parse, urllib.error): Python的标准库,可以用来打开URLs、解析URLs、读取网页内容等。虽然不如requests直观,但在不需额外安装的情况下也能完成基本的网络请求。
  2. requests: 这是最常用的第三方库,用于发送HTTP/1.1请求。它提供了简单的API来执行GET、POST等HTTP方法,同时处理JSON数据、二进制文件和响应内容也非常方便。.
  3. aiohttp: 面向异步编程的HTTP客户端/服务器库,适用于需要高效并发处理大量网络请求的场景。它基于Python的asyncio框架。

urllib

urllib 是Python标准库的一部分,提供了丰富的功能来处理URLs,包括请求的发送、解析等。

它包含四个子模块:urllib.request、urllib.parse、urllib.error 和 urllib.robotparser。

这四个模块我们一个个讲。

urllib.request

用于打开URLs,发送HTTP、FTP请求等。

常用的函数:
  1. urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=False, context=None):打开URL,返回一个文件类对象,可以用此对象的方法读取URL的内容。之前文件流不是学过open函数吗?open前面加个url,那么这个函数大概啥作用应该能猜出来,要有这种根据函数名联想函数功能的能力,同样也要有根据函数功能命名函数的能力。
  2. Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
from urllib import parse
from urllib.request import urlopen, Request

# GET请求示例
with urlopen('http://www.example.com/') as response:
    content = response.read()
    print(content.decode('utf-8'))

print("================分隔符===============")

# POST请求示例
url = 'http://httpbin.org/post'
headers = {'User-Agent': 'Mozilla/5.0'}
data = bytes(parse.urlencode({'key': 'value'}), encoding='utf8')
req = Request(url, data=data, headers=headers, method='POST')
with urlopen(req) as res:
    print(res.read().decode('utf-8'))

代码中出现的两个链接是开源的测试学习用的地址。大家学习访问互联网信息的时候也可以去访问这两个网址。

在这里插入图片描述
分析我们打印的信息。
我们使用urlopen函数打开了http://www.example.com/这个链接返回的是一个文件类型对象,我们使用read函数读取了内容并打印。你可以把打印信息复制到一个.txt的文件里面,把文件改成.html格式,打开以后样式和你直接访问是一样的。
在这里插入图片描述
第二个输出则是打印了我们模拟的一个http请求的信息。这里我就不详细解释这些字段一个个是啥了。

urllib.parse

提供URL解析和操作功能,如分解URL、构建查询字符串等。其实在urllib.request中,解析请求信息使用了一下。

常用函数
  1. urlencode(query):将字典转换成URL编码的字符串。
  2. parse_qs(qs, keep_blank_values=0, strict_parsing=0, encoding=‘utf-8’, errors=‘replace’):将URL查询字符串解析成字典。
  3. urlsplit(url, scheme=‘’, allow_fragments=True):分割URL为组成部分。
from urllib.parse import urlencode, parse_qs, urlsplit

# 构建查询字符串
query_params = {'name': '明月望秋思', 'age': 28}
encoded_query = urlencode(query_params)
print(encoded_query)
print("================分隔符===============")
# 解析查询字符串
query_string = 'name=%E6%98%8E%E6%9C%88%E6%9C%9B%E7%A7%8B%E6%80%9D&age=28'
parsed_query = parse_qs(query_string)
print(parsed_query)
print("================分隔符===============")
# 分割URL
url = 'https://www.example.com/path?query=value#fragment'
components = urlsplit(url)
print(components)

在这里插入图片描述
可以看到中文被转换成了一堆看不懂的符号加字母,然后用一串东西又能解析回中文。实际上我们有时候在复制一些网站链接的时候也会复制出这样的一串,但是链接仍然能访问,原理是一样的。
最后一串输出就没啥特殊的了,把url分割了。这个函数可以用在什么地方呢?需要获取url中的信息的时候,就可以用这个函数分割获取想要的信息。

urllib.error

定义了由urllib.request抛出的异常,如URLError和HTTPError。这些异常在使用urllib.request进行网络请求时可能被抛出。了解这些异常有助于进行错误处理和调试。
这里没有函数需要学习的,涉及到的知识点就是我们之前学习的异常处理,我们可以通过捕获上面两种error来进行针对性的处理或者打印日志信息等。

urllib.robotparser

解析robots.txt文件,帮助遵守网站的爬虫协议。robots.txt文件定义了网站上哪些页面可以被爬虫访问,哪些不可以。

常用函数
  1. RobotFileParser(url=‘’): 创建一个RobotFileParser对象,用于解析给定URL的robots.txt文件。
  2. read(): 从已设置的URL读取并解析robots.txt文件。
  3. can_fetch(useragent, url): 判断指定的user-agent是否可以抓取指定的URL。
  4. parse(lines): 从一个文件或列表中解析robots.txt的规则。
from urllib.robotparser import RobotFileParser


# 初始化一个RobotFileParser对象,指定网站的robots.txt文件URL
rp = RobotFileParser('http://www.example.com/robots.txt')

# 读取并解析robots.txt文件
rp.read()

# 检查user-agent "my-bot" 是否可以抓取 "http://www.example.com/path"
print(rp.can_fetch('my-bot', 'http://www.example.com/path'))

在这里插入图片描述
通过控制台打印的输出,我们知道了这个网站是可以被抓取的。

这里也贴一些关于robots.txt文件的知识,包括怎么检查网站有没有这个文件,这个文件的意义作用。

检查网站是否存在robots.txt文件很简单,可以直接在浏览器中输入网站域名后加上/robots.txt来尝试访问,或者使用编程方式发送HTTP请求到该地址。例如,对于www.example.com,你可以在地址栏输入http://www.example.com/robots.txt来查看。
存在robots.txt文件的意义:
指导爬虫行为:robots.txt文件是网站所有者与网络爬虫之间的协议,用于告知爬虫哪些页面可以被抓取,哪些不可以。这有助于爬虫更高效地工作,避免访问被禁止的区域,减少服务器负担。
保护隐私和安全:通过限制敏感或非公开页面的访问,网站可以有效保护用户数据和内部系统的安全。
优化资源分配:网站管理员可以利用robots.txt来引导搜索引擎爬虫关注更重要的内容,忽略如登录页、搜索结果页等动态生成或对SEO无益的页面。
缺失robots.txt文件的意义:
默认允许抓取:如果一个网站没有robots.txt文件,大多数搜索引擎和爬虫会默认认为所有页面都是允许抓取的。这意味着网站上的所有公开可访问的内容都有可能被搜索引擎索引。
缺乏明确指引:没有该文件,爬虫开发者或SEO专家无法获得关于网站爬取的具体指导,可能需要更多时间来确定哪些内容是应该或不应该被爬取的。
潜在的隐私或安全风险:在某些情况下,缺少robots.txt可能导致一些本应受保护的页面被意外抓取,尤其是在网站结构复杂或配置不当的情况下。

urllib模块暂时就讲到这里。

由于我们目前主要学习一些标准库,所以另外两个模块只简单记录,项目中用到在单独学习记录。

requests

这个库是Python中最受欢迎的HTTP库之一,它允许你以非常简单的方式发送HTTP请求,并处理响应。这个库的设计理念是“让HTTP服务人类”,因此它具有简洁的API和高度可读性,使得网络请求变得直观易懂。

get和post

import requests

response = requests.get('http://example.com')
# 打印HTTP响应状态码
print(response.status_code) 
print("================分隔符===============")
# 打印响应内容的文本形式
print(response.text)         
print("================分隔符===============")
data = {'key': 'value'}
response = requests.post('http://httpbin.org/post', data=data)
# 如果响应内容是JSON格式,可以直接解析为字典
print(response.json())      

可以看到,仅仅是两三行代码,并且很简单明了的代码,我们就成功通过两个不同方式请求了一个网址,并成功获得返回信息。

在这里插入图片描述

Session

requests.Session()可以创建一个会话对象,它可以在多个请求之间保持某些参数,比如Cookies,这对于登录认证等场景非常有用。

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

在这里插入图片描述

file

通过files参数上传文件

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

在代码中,我们定义了一个files的参数,这个files的参数值则是文件report.txt文件。注意rb这个参数,表示我们读取二进制模式,通常文件上传也是读取文件二进制流的形式。然后将files参数使用post函数请求。

aiohttp

aiohttp库是为Python异步编程设计的,提供了异步HTTP客户端和服务器功能,基于Python的asyncio框架,非常适合构建高性能的异步网络应用程序。目前用不上,简单贴个示例看看就行。

import aiohttp
import asyncio

async def post_request(session, url, data):
    async with session.post(url, data=data) as response:
        return await response.text()

async def main():
    async with aiohttp.ClientSession() as session:
        data = {'key': 'value'}
        response_text = await post_request(session, 'http://httpbin.org/post', data)
        print(response_text)

# 同样,使用 asyncio.run 或者 loop.run_until_complete 来启动异步事件循环
asyncio.run(main())

在这里插入图片描述

结尾

关于Python访问互联网的知识就讲这些。主要了解标准库urlliib的知识,另外两个库的知识后面接触到会再深入学习。

作业

  1. urllib的函数使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【基于R语言群体遗传学】-5-扩展到两个以上等位基因及多基因位点

我们现在继续对于群体遗传学进行统计建模,书接上回,我们讨论了孤雌生殖的物种违反哈代温伯格遗传比例的例子,那我们现在来看多于两个等位基因的情况的计算。 如果没有看过之前文章的同学,可以先去看一下之前的文章: …

1.2 ROS2安装

1.2.1 安装ROS2 整体而言,ROS2的安装步骤不算复杂,大致步骤如下: 准备1:设置语言环境;准备2:启动Ubuntu universe存储库;设置软件源;安装ROS2;配置环境。 请注意&…

多模态图像生成的突破:Image Anything一种无需训练的智能框架

多模态图像生成是内容创作领域的热点技术,尤其在媒体、艺术和元宇宙等领域。该技术旨在模拟人类的想象力,将视觉、文本和音频等多种模态属性相关联,以生成图像。早期的方法主要侧重于单一模态输入的图像生成,例如基于图像、文本或…

240703_昇思学习打卡-Day15-K近邻算法实现红酒聚类

KNN(K近邻)算法实现红酒聚类 K近邻算法,是有监督学习中的分类算法,可以用于分类和回归,本篇主要讲解其在分类上的用途。 文章目录 KNN(K近邻)算法实现红酒聚类算法原理数据下载数据读取与处理模型构建--计算距离模型预测 算法原理 KNN算法虽…

Mac单机游戏推荐:星际争霸母巢之战 for Mac v1.16.1汉化版

星际争霸母巢之战 for Mac是一款深受玩家的即时战略游戏,延续了原版《星际争霸》的剧情,并加入了新的游戏单位、科技、地图样式、背景音乐及平衡性调整。《星际争霸》与其它的即时战略类型游戏。 下载地址:点击下载 与原作相同,《…

一图胜千言|用Python搞定统计结果展示!

分享一份原创Python可视化教程:530张图形8000行代码,轻松搞定统计结果展示,部分如下, 每类图表包含详细代码详细代码注释,多达8000行代码,例如, 如何加入学习? 👇&#…

免费分享:2022年全国地铁站点数据(附下载方法)

数据简介 2022年全国地铁站点数据不仅反应我国城市交通网络的日益完善,也为城市规划、公共交通优化、商业布局、应急响应及智慧城市建设提供了宝贵的数据支持与参考,助力城市发展与居民生活质量的全面提升。 数据属性 数据名称:全国地铁站点…

Java同步包装器

通过 Collections.synchronizedList() 方法将一个普通的 ArrayList 包装成了线程安全的 List&#xff1a; import java.util.*;public class SynchronizedWrapperExample {public static void main(String[] args) {// 创建一个非线程安全的 ArrayListList<String> list…

python gdal 压缩栅格数据

1 压缩方法LZW 使用 LZW&#xff08;Lempel-Ziv-Welch&#xff09;&#xff0c;主要对图像数据压缩&#xff0c;可逆 2 代码 函数gdal_translate()&#xff1a;转换栅格的不同格式 我们使用的数据是GTiff格式的数据 GTiff – GeoTIFF File Format — GDAL documentation 参…

MySQL安装与环境配置

1.打开安装程序 2.默认配置&#xff0c;如下二三图 3.配置密码 4.等待安装完毕 5.检查 6.配置环境变量 7.从控制台登录检测

STM32F1+HAL库+FreeTOTS学习4——任务挂起与恢复

STM32F1HAL库FreeTOTS学习4——任务挂起与恢复 任务挂起和恢复的API介绍代码实现 上一期我们学习了FreeRTOS中任务创建的两种方法&#xff0c;这一期我们学习任务的挂起和恢复。 任务挂起和恢复的API介绍 在 &#xff1a;STM32F1HAL库FreeTOTS学习1——FreeRTOS入门 的学习中&…

苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活

在如今多元的数字时代&#xff0c;我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说&#xff0c;有时候需要在自己的电脑上安装 Windows 操作系统&#xff0c;以体验更多软件及功能&#xff0c;而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…

Python28-5 k-means算法

k-means 算法介绍 k-means 算法是一种经典的聚类算法&#xff0c;其目的是将数据集分成 ( k ) 个不同的簇&#xff0c;每个簇内的数据点尽可能接近。算法的基本思想是通过反复迭代优化簇中心的位置&#xff0c;使得每个簇内的点与簇中心的距离之和最小。k-means 算法的具体步骤…

【FFmpeg】avformat_find_stream_info函数

【FFmpeg】avformat_find_stream_info 1.avformat_find_stream_info1.1 初始化解析器&#xff08;av_parser_init&#xff09;1.2 查找探测解码器&#xff08;find_probe_decoder&#xff09;1.3 尝试打开解码器&#xff08;avcodec_open2&#xff09;1.4 读取帧&#xff08;re…

嵌入式Linux之Uboot简介和移植

uboot简介 uboot 的全称是 Universal Boot Loader&#xff0c;uboot 是一个遵循 GPL 协议的开源软件&#xff0c;uboot是一个裸机代码&#xff0c;可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。 也就是说&#xff0c;可以在没有系统的情况…

创建kobject

1、kobject介绍 kobject的全称是kernel object&#xff0c;即内核对象。每一个kobject都会对应系统/sys/下的一个目录。 2、相关结构体和api介绍 2.1 struct kobject // include/linux/kobject.h 2.2 kobject_create_and_add kobject_create_and_addkobject_createkobj…

开源自动化热键映射工具autohotkey十大用法及精选脚本

AutoHotkey&#xff08;AHK&#xff09;是一款功能强大的热键脚本语言工具&#xff0c;它允许用户通过编写脚本来自动化键盘、鼠标等设备的操作&#xff0c;从而极大地提高工作效率。以下是AutoHotkey的十大经典用法&#xff0c;这些用法不仅解放了用户的双手&#xff0c;还展示…

字节码编程ASM之插桩方法调用记录

写在前面 源码 。 正式开始之前&#xff0c;先分享一个让人”悲伤“的真实的故事。 那是一个风和日丽的周六的下午&#xff0c;俺正在开开心心的打着羽毛球&#xff0c;突然接到了来自于最不想联系的那个人&#xff08;没错&#xff0c;这个人就是我的领导&#xff01;&#x…

QT Creator生成uml类图

先说方法&#xff0c;使用Doxygen工具&#xff0c;笔者用的虚拟机linux系统下的qt5.7&#xff0c;没找到自带的uml生成类的工具。 1、Doxygen 安装 在 Ubuntu 系统中&#xff0c;执行下面命令安装 doxygen 和 graphviz 软件包。 sudo apt install graphviz # 用于生成代码…

等保2.0 实施方案之信息软件验证要求

一、等保2.0背景及意义 随着信息技术的快速发展和网络安全威胁的不断演变&#xff0c;网络安全已成为国家安全、社会稳定和经济发展的重要保障。等保2.0&#xff08;即《信息安全技术 网络安全等级保护基本要求》2.0版本&#xff09;作为网络安全等级保护制度的最新标准&#x…