Python学习笔记22:进阶篇(python从入门到精通)

Python学习笔记22:进阶篇前言
本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。
根据模块知识,一次讲解单个或者多个模块的内容。 教程链接

前言

本文是我根据Python官方教程中标准库模块的介绍,自己研究整理资料,编写代码示例的学习笔记。

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

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

互联网访问

Python通过其标准或第三方库为互联网接入提供了强大的支持,可以轻松实现抓取网页、调用API、下载数据等多种任务。

介绍常用的上网模块。

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

urllib

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

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

我们来一一讨论这四个模块。

urllib.request

用于打开URL 并发送HTTP 和FTP 请求。

常用的函数:

urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=False, context=None):打开URL 并返回类似文件的对象。您可以使用该对象的方法。阅读网址。你之前没有学过文件流打开函数吗?现在通过在打开之前加上URL就可以猜出这个函数是做什么的了。应该可以根据函数名称来关联函数,并且应该可以根据函数的功能来命名函数。请求(url,数据=无,标头={},origin_req_host=无,无法验证=False,方法=无)

从urllib导入分析

导入urlopen,来自urllib.request 的请求

# GET 请求示例

使用urlopen(\’http://www.example.com/\’) 作为响应:

内容=响应.read()

打印(内容.解码(\’utf-8\’))

print(\’================分隔符==============\’)

# POST 请求示例

网址=\’http://httpbin.org/post\’

headers={\’User-Agent\’: \’Mozilla/5.0\’}

数据=bytes(parse.urlencode({\’key\’: \’value\’}), 编码=\’utf8\’)

req=请求(url, data=data, header=header, method=\’POST\’)

使用urlopen(req) 作为res:

print(res.read().decode(\’utf-8\’))

代码中出现的两个链接分别是开源测试和学习地址。您在学习如何访问互联网信息时也可以访问这两个URL。

分析打印的信息。

我使用urlopen函数打开http://www.example.com/,从这个链接返回一个文件类型对象,读取并打印内容。将打印信息复制到.txt文件并打开该文件后,样式与直接访问它的样式相同。

第二个输出打印模拟http 请求的信息。我不会在这里详细介绍每个字段的含义。

urllib.parse

提供URL 解析和操作功能,包括URL 分解和查询字符串构造。其实urllib.request就是解析请求信息的。

常用函数

urlencode(query):将字典转换为URL 编码的字符串。 parse_qs(qs,keep_blank_values=0,strict_parsing=0,encoding=\’utf-8\’,errors=\’replace\’):将URL查询字符串解析为字典。 urlsplit(url,scheme=‘’,allow_fragments=True):将URL 拆分为多个组件。

从urllib.parse 导入urlencode、parse_qs、urlsplit

# 构建查询字符串

query_params={\’name\’: \’月亮看秋天的思念\’, \’age\’: 28}

编码查询=urlencode(query_params)

打印(编码查询)

print(\’================分隔符==============\’)

# 解析查询字符串

query_string=\’名称=%E6%98%8E%E6%9C%88%E6%9C%9B%E7%A7%8B%E6%80%9Dage=28\’

parsed_query=parse_qs(查询字符串)

打印(解析查询)

print(\’================分隔符==============\’)

# 分割网址

URL=\’https://www.example.com/path?query=value#fragment\’

组件=urlsplit(url)

打印(组件)

可以看到中文被转换成一堆无法理解的符号和字符,然后可以使用一系列字符串将其解析为中文。其实复制网站链接时可能会复制这样的字符串,但原理是一样的。

输出中的最后一个字符串没什么特别的;它分隔URL。在哪里可以使用此功能?如果您需要检索URL 中的信息,可以使用此功能来分离并检索所需的信息。

urllib.error

定义urllib.request抛出的异常,例如URLError和HTTPError。使用urllib.request 发出网络请求时可能会引发这些异常。了解这些异常有助于错误处理和调试。

这里没有可以学习的函数。一个相关的知识点就是捕获上面两个错误,包括目标处理和输出日志信息。

urllib.robotparser

解析robots.txt 文件以确保符合网站爬虫协议。 robots.txt 文件定义您网站上的哪些页面可以被抓取工具访问,哪些页面不能被抓取工具访问。

常用函数

RobotFileParser(url=‘’): 创建一个RobotFileParser 对象来解析指定URL 处的robots.txt 文件。 read(): 从配置的URL 读取并解析robots.txt 文件。 can_fetch(useragent, url): 确定指定的用户代理是否可以获取指定的URL。 parse(lines): 从文件或列表中解析robots.txt 的规则。

从urllib.robotparser 导入RobotFileParser

# 初始化RobotFileParser 对象并指定网站robots.txt 文件的URL

rp=RobotFileParser(\’http://www.example.com/robots.txt\’)

# 读取并解析robots.txt文件

rp.read()

# 检查用户代理“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 请求。地址。例如,可以通过在地址栏中输入http://www.example.com/robots.txt 来查看www.example.com。

robots.txt 文件存在的重要性:

指导爬虫行为:robots.txt文件是网站所有者和网络爬虫之间的协议,用于告诉爬虫哪些页面可以爬行,哪些页面不可以爬行。这使得爬虫工作更加高效,避免访问禁止区域,减少服务器的负载。

保护隐私和安全:通过限制对敏感或私人页面的访问,网站可以有效保护用户数据和内部系统的安全。

优化资源分配:网站管理员可以使用robots.txt来帮助搜索引擎爬虫专注于更重要的内容,并避免动态生成的内容,例如不利于SEO的登录页面或搜索结果页面,您可以指示他们忽略该页面。

缺少robots.txt 文件意味着什么:

默认允许抓取:如果您的网站没有robots.txt文件,大多数搜索引擎和抓取工具都会默认允许抓取所有页面。这意味着您网站上的所有可公开访问的内容都可以被搜索引擎索引。

缺乏明确的指导:如果没有这个文档,爬虫开发者和SEO专家对抓取网站没有具体的指导,无法确定哪些内容应该被抓取,哪些内容不应该被抓取,这可能会花费更多的时间。

潜在的隐私或安全风险:在某些情况下,特别是当网站复杂或配置不当时,丢失robots.txt可能会导致本应受到保护的页面被无意中抓取。

这就是urllib 模块的全部内容。

目前主要是学习一些标准库,所以其他两个模块只是简单记录一下,等项目中使用的时候会单独学习记录。

requests

该库是Python 中最流行的HTTP 库之一,允许您以非常简单的方式发送HTTP 请求并处理响应。该库的设计理念是“让HTTP为人类服务”,因此API简洁且可读性强,使网络请求直观且易于理解。

get和post

导入请求

响应=request.get(\’http://example.com\’)

#输出HTTP响应状态码

打印(响应.status_code)

print(\’================分隔符==============\’)

#以文本格式输出响应内容

打印(响应.文本)

print(\’================分隔符==============\’)

数据={\’键\’: \’值\’}

响应=requests.post(\’http://httpbin.org/post\’, data=data)

# 如果响应内容是JSON格式,可以直接解析成字典

打印(响应.json())

正如您所看到的,通过几行非常简单明了的代码,我能够以两种不同的方式成功请求URL 并检索返回的信息。

Session

request.Session() 可以创建一个会话对象,该对象可以跨多个请求维护某些参数,例如cookie。这在登录认证等场景下非常有用。

s=request.Session()

s.get(\’http://httpbin.org/cookies/set/sessioncookie/123456789\’)

响应=s.get(\’http://httpbin.org/cookies\’)

打印(响应.文本)

file

通过文件参数上传文件

文件={\’文件\’: open(\’report.xls\’, \’rb\’)}

响应=request.post(\’http://httpbin.org/post\’, files=files)

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

aiohttp

aiohttp 库专为Python 异步编程而设计,基于Python 的asyncio 框架提供异步HTTP 客户端和服务器功能,非常适合构建高性能异步网络应用程序。暂时没有使用。请发布一个例子。

导入aiohttp

导入异步

异步def post_request(会话,url,数据):

使session.post(url, data=data) 异步作为响应:

返回等待响应.text()

异步默认main():

与aiohttp.ClientSession() 异步作为session:

数据={\’键\’: \’值\’}

response_text=等待post_request(会话,\’http://httpbin.org/post\’,数据)

打印(响应文本)

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

asyncio.run(主())

结尾

这就是您访问互联网所需了解的有关Python 的全部内容。主要了解标准库urlliib知识。稍后我们将更详细地讨论其他两个库。

作业

如何使用urllib 函数。

以上#Python学习笔记22:进阶篇相关内容来源仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92302.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月26日 下午11:34
下一篇 2024年6月26日 下午11:34

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注