Pythonurllib模块初识

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

前言

我们在上一期计算机网络知识中已经对计算网络相关的基础如TCP/IP 四层协议模型、URL资源定位符、HTTP/HTTPS协议等进行了解和学习。

众所周知,Python是一门高级语言,不仅支持GUI编程,还可以进行网络编程。

其中,Python 内置库提供用于操作URL的功能的urllib模块,对服务端进行请求库requests模块

因此,本期我们使用Python 爬虫使用最常用的模块urllib模块知识学习,Let's go~

1. urllib模块概述

⌨️urllib是python内置的HTTP请求库,无需安装即可使用。

urllib非常强大,提供支持许多功能如下

  1. 网页请求
  2. 响应获取
  3. 代理、cookie设置
  4. 异常处理
  5. 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 模块常用使用步骤如下:

  1. 导入模块:import urllib. request
  2. 文件管理器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相关的方法进行初步认识和使用。

以上是本期内容,欢迎大佬们点赞评论ღ( ´・ᴗ・` )比心,下次见~💖💗💓