python爬虫-基本库-urllib库(常用速查)

urllib库

库的用途

实现HTTP请求的发送

扩展:基本HTTP库有urllib、requests、httpx等

四个基本模块

  • request 基本的HTTP请求模块
  • error 异常处理模块
  • parse 工具模块,提供URL的处理方法
  • robotparser 识别网站的robost.txt文件

request模块

  • urlopen
python 复制代码
(function) def urlopen(
    url: str | Request,
    data: _DataType = None,
    timeout: float | None = socket._GLOBAL_DEFAULT_TIMEOUT,
    *,
    cafile: str | None = None,
    capath: str | None = None,
    cadefault: bool = False,
    context: SSLContext | None = None
) -> _UrlopenRet

只能处理基本的请求,如果要添加详细的系你想,需要用下面的

Request类来构建请求

  • Request
python 复制代码
class Request(
    url: str, # 必传,其他参数可选
    data: _DataType = None, # 必须传bytes类型,如果是字典类型先用urllib.parse.urlencode进行编码
    headers: MutableMapping[str, str] = {},# 字典
    origin_req_host: str | None = None,
    unverifiable: bool = False,
    method: str | None = None
)
  • 更高级的用法
    • handler类 ,有几个子类:
      HTTPDefaultErrorHandler 用于处理HTTP响应错误
      HTTPRedirecHandler用于处理重定向
      HTTPCookieProcessor 用于处理Cookie
      ProxyHandler 用于设置代理,代理默认为空
      HTTPasswordMgr 用于管理密码,它维护着用户名密码的对照表
      HTTPBasicAuthHandler用于管理认证, 如果一个链接在打开时需要认证,用这个类来解决
    • Opener类

验证

python 复制代码
from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener
from urllib.error import URLError

username = 'admin'
password = 'admin'
url = 'https://ssr3.scrape.center/'

p = HTTPPasswordMgrWithDefaultRealm()
p.add_password(None, url, username, password)
auth_handler = HTTPBasicAuthHandler(p)
opener = build_opener(auth_handler)

try:
    result = opener.open(url)
    html = result.read().decode('utf-8')
    print(html)
except URLError as e:
    print(e.reason)

代理

python 复制代码
from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener

proxy_handler = ProxyHandler({
    'http':'http://127.0.0.1:8080',
    'https':'https://127.0.0.1:8080'
})
opener = build_opener(proxy_handler)

try:
    reponse = opener.open('https://www.baidu.com')
    print(reponse.read().decode('utf-8'))
except URLError as e:
    print(e.reason)

Cookie

python 复制代码
import http.cookiejar, urllib.request
# 1.创建罐子
cookie = http.cookiejar.CookieJar()
# 2.再用罐子造处理器
handler = urllib.request.HTTPCookieProcessor(cookie)
# 3.创建opener
opener = urllib.request.build_opener(handler)
# 4.执行open函数
response = opener.open('https://www.baidu.com')
# 5.遍历输出
for item in cookie:
    print(item.name + '=' + item.value)

error模块

  • URlError URlError.reason
  • HTTPError HTTPError .code 、HTTPError .reason 、HTTPError .headers

parse模块

常用的方法

  • urlparse 解析url,生成结果是一个6字段的命名元组
python 复制代码
(function)
def urlparse(
    url: str,
    scheme: str = "",
    allow_fragments: bool = True
) -> ParseResult: ...

def urlparse(
    url: bytes | bytearray | None,
    scheme: bytes | bytearray | Literal[''] | None = "",
    allow_fragments: bool = True
) -> ParseResultBytes: ...
  • urlunparse 是上一个方法的逆方法,用于构造url,接受的参数必须是6字段 的可迭代对象
  • urlsplit 类似与第一种方法,区别在于合并path和params,返回一个5字段的命名元组
  • urlunsplit 上一个方法的逆
  • urljoin 第一个参数提供base链(之包含scheme、netloc、path),第二个参数为新链,方法会分析新链并用基链补充后返回结果
  • urlencode常用语构造GET请求参数,可以将一个字典或者含一对元素序列的系列构造为GET请求参数
python 复制代码
(function) def urlencode(
    query: _QueryType,
    doseq: bool = False,
    safe: str | bytes = "",
    encoding: str | None = None,
    errors: str | None = None,
    quote_via: _QuoteVia = quote_plus
) -> str
  • parse_qs 上一个方法的逆,返回字典
  • parse_qsl与上一个方法类似,返回序列
  • quote对中文等语言的请求参数进行编码,可以避免乱码问题,
  • unquote上一个方法的逆,对URL编码进行解码

robotparser模块

用于分析网站的Robots协议,协议通常是一个叫做robots.txt的文本文件,一般放在网站的根目录下,搜索爬虫在访问一个站点时,首先会检查这个站点根目录下是否存在robots.txt文件,如果存在,就会根据其中定义的爬取范围来爬取。如果没有找到这个文件,搜索爬虫便会访问所有可直接访问的页面

相关推荐
weixin_440730502 分钟前
内置函数、json文本、pickle二进制
开发语言·python·json
殷色玫瑰9 分钟前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
李游Leo13 分钟前
HarmonyOS 7 + Spatial Recon Kit-C++:3DGS 高斯参数的非有限值隔离与可渲染性门禁【鸿蒙心迹】
开发语言·c++·3d·harmonyos
计算机毕业编程指导师37 分钟前
Python大数据毕设:基于Hadoop的病毒式社交媒体趋势和参与度分析系统怎么做 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·毕业设计·课程设计·社交媒体
计算机毕业编程指导师39 分钟前
【计算机毕设选题推荐】基于Spark与Hadoop的AI就业收入区域差异分析系统 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·数据分析·spark·毕业设计·课程设计·ai就业收入
小猴子爱上树43 分钟前
跨马翻译:批量图片翻译与视频字幕、智能抠图一站式在线图片翻译工具
大数据·人工智能·python·音视频
时间的拾荒人1 小时前
Qt 文件操作详解:从基础类到读写实战
开发语言·qt·面试
Wang's Blog1 小时前
Java 项目实战: 外卖平台优化-YApi接口管理平台与文档导入导出
java·开发语言·yapi
lzqrzpt1 小时前
临沂LED驱动电源工程选型标准与工艺对比解析
python·单片机·嵌入式硬件·物联网