HTTP请求库:Urllib模块

概述

  urllib是Python自带的标准库。官方文档https://docs.python.org/3.7/library/urllib.html。
查看官方文档,发现Urllib库有6个py文件,统共是4个模块,如下所示。

文件名模块代码量有效代码量
__init__.py-0
request.pyurllib.request请求模块2740行推测1000行
response.py-80行70行
error.pyurllib.error异常处理模块
parse.pyurllib.parse是url解析模块1048行推测800行
robotparser.pyurllib.robotparser是robots.txt解析模块

  源码量略大,遵循二八法则,先通过网上资料掌握常用的使用方法。

  测试网址httpbin.org,它可以提供 HTTP 请求测试。



urllib.request模块

文档说明(暂时只需了解)

  官方文档:https://docs.python.org/3/library/urllib.request.html#module-urllib.request
初步需要掌握常用的函数。接下来简单介绍文档结构。

  1. 六个函数方法:urlopen()、install_opener()、build_opener()、pathname2url)、url2pathname()、getproxies();

  2. 很多类:Request()、OpenerDirector、BaseHandler、HTTPDefaultErrorHandler、
HTTPRedirectHandler、HTTPCookieProcessor()、ProxyHandler();

  3. 各个类中包含的objects,主要内容是其中的函数方法。

  4. 使用示例Examples

  5. 遗留接口Legacy interface,包含Python2的部分函数和类。


实践操作(关键点)
请求的1个函数方法和1个class对象
函数简要说明
urllib.request.urlopen(url, data, timeout)data是字典格式,返回响应实例response
urllib.request.Request()class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None

  urlopen()函数的data是可选的,传递data参数即选择Post传参方式,要求格式是byte。
当我们不需要添加任何请求头信息时,使用urlopen()函数更加方便。

   urlopen() 方法可以实现最基本的请求发起,但如果请求中需要加入headers等信息,那么我们可以利用Request类构建一个请求。(将请求独立成一个对象,方便配置参数)

操作简要说明
创建Request请求实例request = urllib.request.Request(url)
利用Request请求实例response = urllib.requset.urlopen(request)
参数data必须传bytes类型,如果是一个字典,可以先用 urllib.parse.urlencode() 编码
参数headers是一个字典,可以通过headers参数传递,或add_header()添加请求头
参数method传参方式,比如Get、Post、Put等


处理response实例常用的7种基本方式
函数简要说明
1.类实例responseHTTPResposne类型实例,打印得到class信息
2.读取网页response.read()读取网页内容,返回二进制格式
response.read().decode(‘utf-8’)输出UTF-8格式数据,包括中文
response.readline()返回二进制格式页面的第一行
response.readlines()以列形式返回二进制数据,每行是一个元素
3.读取响应信息response.getcode()获取状态码
response.getheaders()获取列表形式响应头,即BP抓包看到的响应头信息
response.getheader(‘Server’)获取指定的响应头


urllib.request高级特性

  上面我们虽然可以构造 Request ,但是一些更高级的操作,比如 Cookies 处理,代理该怎样来设置?接下来就需要更强大的工具 Handler 登场了。

  简而言之你可以把它理解为各种处理器,有专门处理登录验证的,有处理 Cookies 的,有处理代理设置的,利用它们我们几乎可以做到任何 HTTP 请求中所有的事情。



遇见的问题:

__pycache__缓存文件
疑问

  查看python\Lib\urllib目录,对比官方文档源码文件,发现目录下存在六个urllib库的源码py文件,但是还有一个名为__pycache__的py缓存目录,什么机制?

解答
  现象:第一次运行python工程时,在目录下总会生成一个__pycache__文件夹,里面是与py文件同名的pyc或pyo文件。

  python的基本运行机制:python是脚本语言,运行python程序不需要编译,而是边解释边运行。优势是可以直接运行程序,劣势是运行效率较慢。具体点就是,Python解释器会把源码转换成字节码,而不是二进制代码,然后使用解释器执行这些字节码。

  缓存文件夹:Python解释器编译py脚本文件,并将编译结果保存到__pycache__目录。下次执行时,如果解释器发现py脚本没有修改过,那么就不再编译,而直接运行缓存目录中的pyc文件。优势是,在工程较大时可以大大缩短项目运行前的准备时间。


参考

概述

  《python爬虫从入门到放弃(三)之 Urllib库的基本使用》
文章地址https://www.cnblogs.com/zhaof/p/6910871.html

urllib.request模块

  《python urllib如何获取http状态码》,2013-02
https://blog.csdn.net/weixin_34110749/article/details/91759411

  《urllib获取响应后的六种基本处理和常见状态码》,2018-10
https://blog.csdn.net/Watson_Ashin/article/details/83444478

  《urllib.request详细介绍》,2019-03
https://blog.csdn.net/qq_43546676/article/details/88777227

遇到问题

  《为什么python不需要编译而c++需要_C++ or Python 这个选择题该怎么做?》
https://blog.csdn.net/weixin_39986435/article/details/110896871

  《运行Python脚本时生成的__pycache__文件夹》,2017-06
https://blog.csdn.net/index20001/article/details/73501375

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值