前言
本文是我根据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