返回顶部
首页 > 资讯 > 后端开发 > Python >Python标准库学习之urllib
  • 107
分享到

Python标准库学习之urllib

标准Pythonurllib 2023-01-31 08:01:51 107人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本系列以python3.4为基础urllib是python3的标准网络请求库。包含了网络数据请求,处理cookie,改变请求头和用户代理,重定向,认证等的函数。urllib与urllib2?:python2.x用urllib2,而Pyth

本系列以python3.4为基础
urllib是python3的标准网络请求库。包含了网络数据请求,处理cookie,改变请求头和用户代理,重定向,认证等的函数。
urllib与urllib2?:python2.x用urllib2,而Python3改名为urllib,被分成一些子模块:urllib.request,urllib.parse,urllib.error,urllib.robotparser.尽管函数名称大多和原来一样,但是使用新的urllib库时需要注意哪些函数被移动到子模块里了。

Http版本:HTTP/1.1,包含Connection:close 头

特别常用的函数:urllib.request.urlopen()

同类型开源库推荐:requests

urllib:用来处理网络请求和操作url。有以下子模块

  • urllib.request 打开后读取url内容

  • urllib.error 包含由urllib.request抛出的异常类

  • urllib.parse 解析URL

  • urllib.robotparser 解析robots.txt files

简单的例子

from urllib.request import urlopen
html=urlopen('https://www.baidu.com')
print(html.geturl(),html.info(),html.getcode(),sep='\n')
print(html.read().decode('UTF-8'))
from urllib import request
with request.urlopen('https://api.douban.com/v2/book/2129650') as f:
    data = f.read()
    print('Status:', f.status, f.reason)
    for k, v in f.getheaders():
        print('%s: %s' % (k, v))
    print('Data:', data.decode('utf-8'))
from urllib import request
req = request.Request('http://www.douban.com/') #设置请求头
req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWEBKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
with request.urlopen(req) as f:
    print('Status:', f.status, f.reason)
    for k, v in f.getheaders():
        print('%s: %s' % (k, v))
    print('Data:', f.read().decode('utf-8'))
import urllib.request
data = parse.urlencode([ #进行url编码参数
    ('username', 'xby')]
req = urllib.request.Request(url='https://www.baidu.com',
                     data=data)
with urllib.request.urlopen(req) as f:
    print(f.read().decode('utf-8'))
from urllib import request, parse
print('Login to weibo.cn...')
email = input('Email: ')
passwd = input('PassWord: ')
login_data = parse.urlencode([ #进行url编码参数
    ('username', email),
    ('password', passwd),
    ('entry', 'mweibo'),
    ('client_id', ''),
    ('savestate', '1'),
    ('ec', ''),
    ('pagerefer', 'https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')
])
req = request.Request('https://passport.weibo.cn/sso/login') 
req.add_header('Origin', 'https://passport.weibo.cn')
req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
req.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')
with request.urlopen(req, data=login_data.encode('utf-8')) as f:
    print('Status:', f.status, f.reason)
    for k, v in f.getheaders():
        print('%s: %s' % (k, v))
    print('Data:', f.read().decode('utf-8'))
urllib.request
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
  • url参数可以是字符串或者urllib.request.Request对象

  • data参数必须是字节形式。可以通过from urllib import parse parse.urlencode()来处理得到。如果没有提供dat参数则为GET请求,否则为POST请求。

  • [tomeout,]超时单位为秒

  • context参数必须是ssl.SSLContext的实例

返回值:返回一个可以作为contextmanager的对象。它有一些方法和属性:
geturl()
info()-元数据信息,比如headers
getcode()-http响应码,比如200
read()-获取内容,字节形式
status
reason

对于Http(s)请求,返回的一个http.client.HTTPResponse对象。常用方法getheaders(),read()
对于ftp,file请求,返回一个urllib.response.addinfourl对象

可能抛出的异常urllib.error.URLError,urllib.error.HTTPError

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
通过这个对象我们可以设置请求数据,添加请求头,同时可以获取一些url信息:比如协议类型,主机。也可以设置代理Request.set_proxy(host, type)

class urllib.request.OpenerDirector以及关联的urllib.request.install_opener(opener),urllib.request.build_opener([handler, …])
方法:OpenerDirector.add_handler(handler) ,这个handler对象必须继承urllib.request.BaseHandler,常见的有
urllib.request.BaseHandler -基类
urllib.request.HTTPDefaultErrorHandler
urllib.request.HTTPRedirectHandler
urllib.request.HTTPCookieProcessor
urllib.request.ProxyHandler
urllib.request.HTTPBasicAuthHandler
urllib.request.HTTPSHandler
例子:

import urllib.request
# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib.request.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
                          uri='https://mahler:8092/site-updates.py',
                          user='klem',
                          passwd='kadidd!ehopper')
opener = urllib.request.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib.request.install_opener(opener)
urllib.request.urlopen('http://www.example.com/login.html')
proxy_handler = urllib.request.ProxyHandler({'http': 'http://www.example.com:3128/'})
proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()
proxy_auth_handler.add_password('realm', 'host', 'username', 'password')
 
opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler)
# This time, rather than install the OpenerDirector, we use it directly:
opener.open('http://www.example.com/login.html')

异常处理

可能抛出的异常urllib.error.URLError,urllib.error.HTTPError
exception urllib.error.URLError :有以下属性:reason
exception urllib.error.HTTPError 它是URLError的一个子类,有以下属性:
code
reason
headers

from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
req = Request("http://www.baidu.com/")
try:
    response = urlopen(req)
except HTTPError as e:
    print('Error code: ', e.code)
except URLError as e:
    print('We failed to reach a server.')
    print('Reason: ', e.reason)
else:
    print("Good!")
print(response.read().decode("utf8"))

urllib.parse

urllib.parse.urlparse函数会将一个普通的url解析为6个部分,返回的数据类型为ParseResult对象,通过访问其属性可以获取对应的值。
同时,它还可以将已经分解后的url再组合成一个url地址(通过urlunparse(parts))。返回的6个部分,分别是:scheme(机制)、netloc(网络位置)、path(路径)、params(路径段参数)、query(查询)、fragment(片段)。

urllib.parse.urlencode(query, doseq=False, safe=' ', encoding=None, errors=None),注意:query参数是一个序列对象

通过urllib.request.urlretrieve下载文件

urllib.request.urlretrieve(url,savefilepath)

--结束END--

本文标题: Python标准库学习之urllib

本文链接: https://lsjlt.com/news/193240.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python标准库学习之urllib
    本系列以python3.4为基础urllib是Python3的标准网络请求库。包含了网络数据请求,处理cookie,改变请求头和用户代理,重定向,认证等的函数。urllib与urllib2:python2.x用urllib2,而pytho...
    99+
    2023-01-31
    标准 Python urllib
  • Python标准库学习之psutil内存详解
    目录查询CPU信息查询内存信息查询磁盘信息查询网络信息查询进程信息人生苦短,快学Python! 今天介绍的是psutil模块,它是一个跨平台库 https://github.com/...
    99+
    2024-04-02
  • python标准库学习之sys模块详解
    目录前言处理命令行参数sys.exit(n) 退出程序,正常退出时exit(0)sys.version 获取Python解释程序的版本信息sys.platform 返回操作系统平台名...
    99+
    2024-04-02
  • python之标准库
    Python的标准安装包括一组模块,称为标准库。10.1 模块>>>emport math>>>math.sin(0)0.010.1.1 模块是程序任何python程序都可以作为模块导入。#hello.p...
    99+
    2023-01-31
    标准 python
  • Python标准库之os
    文章目录 1. OS标准库简介2. OS标准库常用函数和属性2.1 文件和目录2.1.1 `os.getcwd()`2.1.2 `os.mkdir(path, mode=0o777, *, d...
    99+
    2023-09-04
    python linux 标准库 os 常用函数
  • python深度学习标准库使用argparse调参
    目录前言使用步骤:常见规则使用config文件传入超参数argparse中action的可选参数store_true前言 argparse是深度学习项目调参时常用的python标准库...
    99+
    2024-04-02
  • Python标准库之数据库 sqlite3
    目录1、创建数据库 2、插入数据3、查询4、更新与删除Python自带一个轻量级的关系型数据库SQLite。这一数据库使用SQL语言。SQLite作为后端数据库,可以搭配P...
    99+
    2024-04-02
  • Python学习:使用urllib模块读
    request 还是requests? 来自Python小白真诚的求助!没办法,只能求助Google了! 原来,Requests模块是一个用于网络访问的模块,网络访问就是利用某些参数发送请求,然后获取我们想要的信息。其实类似的模块...
    99+
    2023-01-31
    模块 Python urllib
  • python之_requests库学习_
    一、超时 可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。 连接超时指的是在你的客户端实现到远端机器端口的连接时Request 会等待的秒数。一个很好的实践方法是把连接超时设为比 3 的倍数略大的...
    99+
    2023-01-30
    python _requests
  • python之cmd库学习
    一:cmd介绍    引用python的官方文档    The cmd class provides a simple framework for writing line-oriented command interpreters.  T...
    99+
    2023-01-31
    python cmd
  • 学习 Python 之 Pandas库
    学习 Python 之 Pandas库 Pandas库什么是Pandas库DataFrame 创建和存储1. 使用DataFrame构造函数(1). 使用列表创建(2). 使用字典创建(3)....
    99+
    2023-10-27
    python
  • Python学习 :六个标准数据类型
    一、Numbers(数字类型) 数字类型主要分为两种—— 整数(Integer)与 浮点数(Float) 整数分为整型和长整型(在Python3中已经不再区分为整型与长整型,统一称为整型) 注意:数字类型是不可变的数据类型       ...
    99+
    2023-01-30
    数据类型 标准 Python
  • 学习Golang:深入理解常用标准库!
    从入门到精通:Golang常用标准库详解!一、引言随着软件开发的快速发展,程序语言的选择变得越来越重要。在各种编程语言中,Golang(又称Go语言)因为其高效性、简洁性和并发性而备受关注。Golang具备强大的标准库,提供了丰富的功能和工...
    99+
    2023-12-29
    Golang 入门 标准库
  • python标准库
    Python有一套很有用的标准库(standard library)。标准库会随着Python解释器,一起安装在你的电脑中的。它是Python的一个组成部分。这些标准库是Python为你准备好的利器,可以让编程事半功倍。 我将根据我个人的使...
    99+
    2023-01-31
    标准 python
  • Python爬虫之urllib库详解
    目录一、说明:二、urllib四个模块组成:三、urllib.request1、urlopen函数2、response 响应类型3、Request对象 4、高级请求方式四、urlli...
    99+
    2024-04-02
  • python标准库--functools
    官方相关地址:https://docs.python.org/3.6/library/functools.html   一.简单介绍:        functools模块用于高阶函数:作用于或返回其他函数的函数。一般而言,任何可调用对象...
    99+
    2023-01-30
    标准 python functools
  • Python标准库 - logging
    编写代码时, 常要跟踪下其运行过程, 记录日志是常用的方式. 较简单的就是print命令打印到终端, 或通过open函数写入文件. 但随着代码量的增加, 该方式不可控的弊端, 也凸显出来, 这也正是logging模块出现的背景.对于logg...
    99+
    2023-01-31
    标准 Python logging
  • Python标准库 - subproce
    编写Python脚本时, 经常要执行Linux操作系统命令, 如mkdir zzzz. 目前比较推荐的方法是使用subprocess模块.通过该模块的帮助文档, 可看到其主要提供了4个API, 和相应的使用说明.Main API======...
    99+
    2023-01-31
    标准 Python subproce
  • Python标准库 - re
    编写代码时, 经常要匹配特定字符串, 或某个模式的字符串, 一般会借助字符串函数, 或正则表达式完成.对于正则表达式, 有些字符具有特殊含义, 需使用反斜杠字符'\'转义, 使其表示本身含义. 如想匹配字符'\', 却要写成'\\\\', ...
    99+
    2023-01-31
    标准 Python
  • Python标准库之typing的用法(类型标注)
    PEP 3107引入了功能注释的语法,PEP 484 加入了类型检查 标准库 typing 为类型提示指定的运行时提供支持。 示例: def f(a: str, b:int) -> str: ret...
    99+
    2022-06-02
    Python typing 类型标注
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作