【爬虫技能树】㈡、urllib的使用介绍

本文详细介绍了Python的urllib库,包括urllib.request、urllib.error、urllib.parse和urllib.robotparser模块的功能和用法。通过案例展示了如何发送GET请求、处理HTTP错误、解析URL、读取网页内容、编码解码URL以及POST数据。urllib库提供了一系列方法用于网页抓取和数据交互,但在复杂场景下,request库更为便捷。
摘要由CSDN通过智能技术生成

简介

urllib 库用于请求网页 URL,并对网页的内容进行抓取处理。对比request的话不是很方便,个人更偏向于使用request。

urllib 包含以下几个模块:

模块说明
urllib.request打开或读取url
urllib.errorurllib.request 抛出的异常
urllib.parse解析url
urllib.robotparser解析robots.txt

官方架构

在这里插入图片描述

urllib.request

urllib.request 定义了一些打开 URL 的函数和类,包含授权验证、重定向、浏览器 cookies等。

使用 urllib.request 的 urlopen 方法来打开一个 URL,格式如下:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, context=None)

说明:

  • url:url 地址。
  • data:发送到服务器的其他数据对象,默认为 None。
  • timeout:访问超时时间。
  • cafile 和 capath:cafile 为 CA 证书, capath 为 CA 证书的路径,使用 HTTPS 需要用到。
  • context:ssl.SSLContext类型,用来指定 SSL 设置。

urllib.error

urllib.error 模块为 urllib.request 所引发的异常定义了异常类,基础异常类是 URLError。

urllib.error 包含了两个方法,URLError 和 HTTPError。

URLError 是 OSError 的一个子类,用于处理程序在遇到问题时会引发此异常(或其派生的异常),包含的属性 reason 为引发异常的原因。

HTTPError 是 URLError 的一个子类,用于处理特殊 HTTP 错误例如作为认证请求的时候,包含的属性 code 为 HTTP 的状态码, reason 为引发异常的原因,headers 为导致 HTTPError 的特定 HTTP 请求的 HTTP 响应头。

urllib.parse

urllib.parse 用于解析 URL,格式如下:

urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)

urllib.parse.urlparse(urlstring, scheme=‘’, allow_fragments=True)
urlstring 为 字符串的 url 地址,scheme 为协议类型,

allow_fragments 参数为 false,则无法识别片段标识符。相反,它们被解析为路径,参数或查询组件的一部分,并 fragment 在返回值中设置为空字符串。

urllib.robotparser

urllib.robotparser 用于解析 robots.txt 文件。

robots.txt(统一小写)是一种存放于网站根目录下的 robots 协议,它通常用于告诉搜索引擎对网站的抓取规则。

案例一

# 导入urllib
from urllib.request import urlopen

# 发送请求
res = urlopen("https://www.baidu.com/")

# 返回网页内容
print(res.read())

除了 read() 函数外,还包含以下两个读取网页内容的函数:

  • readline() - 读取文件的一行内容

  • readlines() - 读取文件的全部内容。

案例二

使用 getcode() 函数获取网页状态码

# 导入包
import urllib.request

# 发送请求
res = urllib.request.urlopen("https://www.baidu.com/")
# 返回状态码
print(res.getcode())   # 200

在这里插入图片描述

案例三

编码与解码可以使用 urllib.request.quote() 与 urllib.request.unquote() 方法:

# 导入包
import urllib.request

encode_url = urllib.request.quote("https://www.baidu.com/")  # 编码
print(encode_url)

unencode_url = urllib.request.unquote(encode_url)    # 解码
print(unencode_url)

在这里插入图片描述

案例四

带上请求头

import urllib.request
import urllib.parse

url = 'https://www.baidu.com/s?wd={}' 
code = urllib.request.quote('天气')  # 对参数进行编码
url = url + code
header = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}   #请求头
# 发送请求
request = urllib.request.Request(url,headers=header) 
# 返回网页内容
res = urllib.request.urlopen(request).read()
print(res)

案例五

POST传递数据,与request区别很大,语法如下:

# 导入包
import urllib.request
import urllib.parse

url = ''  # 提交到表单页面
data = {'text': '你好'}   # 提交数据
header = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}   #请求头
data = urllib.parse.urlencode(data).encode('utf8')  # 对参数进行编码,解码使用 urllib.parse.urldecode

request=urllib.request.Request(url, data, header)   # 发送请求
reponse=urllib.request.urlopen(request).read()      # 返回网页内容

点关注不迷路,本文若对你有帮助,烦请三连支持一下 ❤️❤️❤️
各位的支持和认可就是我最大的动力❤️❤️❤️

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值