urllib库
- 库的用途
- 四个基本模块
-
- request模块
- error模块
- parse模块
- robotparser模块
库的用途
实现HTTP请求的发送
扩展:基本HTTP库有urllib、requests、httpx等
四个基本模块
- request 基本的HTTP请求模块
- error 异常处理模块
- parse 工具模块,提供URL的处理方法
- robotparser 识别网站的robost.txt文件
request模块
- urlopen
1 2(function) def urlopen( 3 url: str | Request, 4 data: _DataType = None, 5 timeout: float | None = socket._GLOBAL_DEFAULT_TIMEOUT, 6 *, 7 cafile: str | None = None, 8 capath: str | None = None, 9 cadefault: bool = False, 10 context: SSLContext | None = None 11) -> _UrlopenRet 12
只能处理基本的请求,如果要添加详细的系你想,需要用下面的
Request类来构建请求
- Request
1class Request( 2 url: str, # 必传,其他参数可选 3 data: _DataType = None, # 必须传bytes类型,如果是字典类型先用urllib.parse.urlencode进行编码 4 headers: MutableMapping[str, str] = {},# 字典 5 origin_req_host: str | None = None, 6 unverifiable: bool = False, 7 method: str | None = None 8) 9
- 更高级的用法
- handler类,有几个子类:
HTTPDefaultErrorHandler用于处理HTTP响应错误
HTTPRedirecHandler用于处理重定向
HTTPCookieProcessor用于处理Cookie
ProxyHandler用于设置代理,代理默认为空
HTTPasswordMgr用于管理密码,它维护着用户名密码的对照表
HTTPBasicAuthHandler用于管理认证, 如果一个链接在打开时需要认证,用这个类来解决 - Opener类
- handler类,有几个子类:
验证
1from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener 2from urllib.error import URLError 3 4username = 'admin' 5password = 'admin' 6url = 'https://ssr3.scrape.center/' 7 8p = HTTPPasswordMgrWithDefaultRealm() 9p.add_password(None, url, username, password) 10auth_handler = HTTPBasicAuthHandler(p) 11opener = build_opener(auth_handler) 12 13try: 14 result = opener.open(url) 15 html = result.read().decode('utf-8') 16 print(html) 17except URLError as e: 18 print(e.reason) 19
代理
1from urllib.error import URLError 2from urllib.request import ProxyHandler, build_opener 3 4proxy_handler = ProxyHandler({ 5 'http':'http://127.0.0.1:8080', 6 'https':'https://127.0.0.1:8080' 7}) 8opener = build_opener(proxy_handler) 9 10try: 11 reponse = opener.open('https://www.baidu.com') 12 print(reponse.read().decode('utf-8')) 13except URLError as e: 14 print(e.reason) 15
Cookie
1import http.cookiejar, urllib.request 2# 1.创建罐子 3cookie = http.cookiejar.CookieJar() 4# 2.再用罐子造处理器 5handler = urllib.request.HTTPCookieProcessor(cookie) 6# 3.创建opener 7opener = urllib.request.build_opener(handler) 8# 4.执行open函数 9response = opener.open('https://www.baidu.com') 10# 5.遍历输出 11for item in cookie: 12 print(item.name + '=' + item.value) 13 14
error模块
- URlError
URlError.reason - HTTPError
HTTPError .code、HTTPError .reason、HTTPError .headers
parse模块
常用的方法
urlparse解析url,生成结果是一个6字段的命名元组
1(function) 2def urlparse( 3 url: str, 4 scheme: str = "", 5 allow_fragments: bool = True 6) -> ParseResult: ... 7 8def urlparse( 9 url: bytes | bytearray | None, 10 scheme: bytes | bytearray | Literal[''] | None = "", 11 allow_fragments: bool = True 12) -> ParseResultBytes: ... 13
urlunparse是上一个方法的逆方法,用于构造url,接受的参数必须是6字段 的可迭代对象urlsplit类似与第一种方法,区别在于合并path和params,返回一个5字段的命名元组urlunsplit上一个方法的逆urljoin第一个参数提供base链(之包含scheme、netloc、path),第二个参数为新链,方法会分析新链并用基链补充后返回结果urlencode常用语构造GET请求参数,可以将一个字典或者含一对元素序列的系列构造为GET请求参数
1(function) def urlencode( 2 query: _QueryType, 3 doseq: bool = False, 4 safe: str | bytes = "", 5 encoding: str | None = None, 6 errors: str | None = None, 7 quote_via: _QuoteVia = quote_plus 8) -> str 9
parse_qs上一个方法的逆,返回字典parse_qsl与上一个方法类似,返回序列quote对中文等语言的请求参数进行编码,可以避免乱码问题,unquote上一个方法的逆,对URL编码进行解码
robotparser模块
用于分析网站的Robots协议,协议通常是一个叫做robots.txt的文本文件,一般放在网站的根目录下,搜索爬虫在访问一个站点时,首先会检查这个站点根目录下是否存在robots.txt文件,如果存在,就会根据其中定义的爬取范围来爬取。如果没有找到这个文件,搜索爬虫便会访问所有可直接访问的页面
《python爬虫-基本库-urllib库(常用速查)》 是转载文章,点击查看原文。