小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
前言
我们在上一期计算机网络知识中已经对计算网络相关的基础如TCP/IP 四层协议模型、URL资源定位符、HTTP/HTTPS协议等进行了解和学习。
众所周知,Python是一门高级语言,不仅支持GUI编程,还可以进行网络编程。
其中,Python 内置库提供用于操作URL的功能的urllib模块,对服务端进行请求库requests模块
因此,本期我们使用Python 爬虫使用最常用的模块urllib模块知识学习,Let's go~
1. urllib模块概述
⌨️urllib是python内置的HTTP请求库,无需安装即可使用。
urllib非常强大,提供支持许多功能如下
- 网页请求
- 响应获取
- 代理、cookie设置
- 异常处理
- URL解析
urllib提供包含了4个模块
-
request: 它是最基本的http请求模块,用来模拟发送请求
-
error: 异常处理模块,如果出现错误可以捕获这些异常
-
parse: 一个工具模块,提供了许多URL处理方法,如:拆分、解析、合并等
-
robotparser: 主要用来识别网站的robots.txt文件,然后判断哪些网站可以爬
🔔 重要说明
- Python2中,可以直接导入urllib
- Python3中,导入时需要指明导入的模块
2. urllib.request 模块相关方法
🎉 urllib.request 模块包含在各种情况下打开HTTP协议的URL的方法,如认证、重定向、cookie操作。
urllib.request 模块使用最多的场景是向服务器发送请求。
urllib.request 模块提供请求URL常用方法如下:
方法 | 作用 |
---|---|
urllib.request.urlopen(url,data) | 打开url,url可以是字符或者request对象 |
urllib.request.build_opener() | 将函数串联起来并返回OpenerDirector |
urllib.request.Request(url,data) | 将data数据发送给服务器 |
urllib.request.HTTPBasicAuthHandler() | 处理远程主机的身份认证 |
urllib.request.ProxyHandler(proxies) | 使用指定的代理 |
📣重点说明
urllib.request 模块常用使用步骤如下:
- 导入模块:import urllib. request
- 文件管理器with进行读取网页里的内容
import urllib.request
req = urllib.request.urlopen("https://juejin.cn/user/211521683863847/posts")
with req as f:
print(f.read(300).decode('utf-8'))
3. urllib.parse 模块相关方法
🎉 urllib.parse 模块用于解析URL,将URL字符串拆分成协议、网络位置、路径等各个部分
urllib.parse 模块也可以将各个部分组成URL字符串,将相对的url转换成完整的绝对的URL地址
urllib.parse 模块定义方法URL解析和URL转码两部分。
urllib.parse 关于解析URL方法如下:
方法 | 作用 |
---|---|
urllib.parse.urlparse(urlstring) | url解析成六部分scheme://netloc/path;parameters?query#fragment |
urllib.parse.parse_qs(qs) | 解析以字符串参数形式(application/x-www-form-urlencoded)给出查询字符串 |
urllib.parse.urlnparse(parts) | 以元组形式返回构造的URL |
urllib.parse.urlsplit(urlstring) | 解析url,并返回元组形式通过索引可查询url参数 |
urllib.parse.urljoin(base,url) | 通过base和url来组合成完整的url |
urllib.parse.urldefrag(url) | 会返回一个不包含片段标识符url |
urllib.parse 关于转码URL方法如下:
方法 | 作用 |
---|---|
urllib.parse.quote(string) | 使用%xx转义符替换string中特殊的字符 |
urllib.parse.urldecod(query) | 将字符串转换成编码的ASCII文本字符串 |
urllib.parse 解析url字段说明:
属性 | 说明 |
---|---|
schema | URL协议 |
netloc | 网络位置 |
path | 分层路径 |
query | 查询组件 |
fragment | 片段标识符 |
username | 用户名 |
password | 密码 |
hostname | 主机名(小写) |
post | 端口号 |
📣举例说明
import urllib.parse
pa = urllib.parse.urlparse("https://juejin.cn/user/211521683863847/posts")
print("协议:",pa.scheme)
print("网络位置:",pa.netloc)
print("分层路径:",pa.path)
4. urllib.error 模块相关方法
🎉urllib.error 模块专门处理 urllib.request 引发的异常类的场景
urllib.error 主要提供两个HTTPError和URLError
方法 | 作用 |
---|---|
urllib.error.HTTPError | 处理HTTP错误引发的异常 |
urllib.error.URLError | 处理程序在遇到问题时引发的异常 |
📣重要说明
- HTTPError 是 URLError的子类,专门处理HTTP协议错误的异常
- URLError 是 OSError的一个子类,包含reason为引发异常的原因
5. urllib.robotparser 模块相关方法
🎉urllib.robotparser 专门用来解析robots.txt 文件的网站抓取特定URL的问题
类 | 作用 |
---|---|
urllib.robotparser.RobotFileParse(url) | 提供一系列读取、解析和回答url的问题方法 |
方法 | 作用 |
---|---|
set_url(url) | 设置指向 robots.txt 文件的 URL |
read() | 读取 robots.txt URL 并将其输入解析器。 |
parse() | 解析行参数。 |
can_fetch() | 如果允许 useragent 按照被解析 robots.txt 文件中的规则来获取 url 则返回 True 。 |
总结
本期,我们对urllib库中提供的四个模块urllib.request、urllib.parse、urllib.error、urllib.robotparser相关的方法进行初步认识和使用。
以上是本期内容,欢迎大佬们点赞评论ღ( ´・ᴗ・` )比心,下次见~💖💗💓