ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

(硬货)初识 Python 网络请求库 urllib

2020-12-02 13:32:18  阅读:236  来源: 互联网

标签:硬货 None 请求 Python request urllib urlopen URLError


本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于腾讯云 作者:keinYe

( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )
在这里插入图片描述
urllib 是 Python 自带的网络请求标准库,包含了多个处理 URL 功能的模块。

  • urllib.request 用于请求和读取 URL『包含网页认证、重定向、cookies 等等』,可以方便的获取 URL 内容。

  • urllib.error 用于 urlib.request 的异常处理。

  • urllib.parse 用于 urls 解析。

  • urllib.robotparse 用于 robot.txt 文件解析。

urllib.request 和 urllib.error 是我们常用的两个库,这两个库也是在爬虫程序中使用频繁的库。

urllib.request

通过 urllib.request 模块可以发送 http 请求,并读取请求结果。

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

参数信息如下:

  • url 是网页网址,可以是域名也可以是 IP 地址。
  • data 是发往服务器的数据,当无数据发送时可省略该参数,是 bytes 类型的内容,可通过 bytes()函数转为化字节流
  • timeout 用于设置请求超时时间;单位是秒。
  • cafile 和 capath 代表 CA 证书和 CA 证书的路径。如果使用HTTPS则需要用到。
  • cadefault 目前已弃用。
  • context 参数必须是 ssl.SSLContext 类型,用来指定 SSL 设置

抓取网页内容

使用 urllib.request.urlopen 可以很方便的获取网页内容,我们以获取 httpbin.org 内容为例,介绍 urlopen 的使用方法
在这里插入图片描述

运行结果如下:
在这里插入图片描述

网络请求难免会遇到长时间无法正常连接的问题,此时可以通过设置超时时间「timeout」,使 urlopen 方法在一定时间内无法连接时自动退出,以免影响整个程序的运行。我们可以通过以下方式来设置超时时间
在这里插入图片描述
以上代码设置 5 秒钟内无法正常连接,则退出 urlopen 方法。

向服务器提交数据

向服务器提交数据或请求某些需要携带数据的网页时,需要用到 POST 请求,此时只需要将数据以 bytes 的格式传入参数 data 即可。

使用 POST 提交数据的示例如下
在这里插入图片描述
执行结果如下
在这里插入图片描述

模拟浏览器请求

在前面使用 urlopen 方法完成了简单的 get 和 post 请求,但是仅仅 urlopen 方法中的几个参数不足以构建完整的请求,完整的请求通常包含有 header 等信息,我们可以使用 urllib.request.Request 类来构建含有 header 以及请求方法的网络请求。
在这里插入图片描述
以下是 urllib.request.Request 的定义:

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

在这里插入图片描述

# -*- coding:utf-8 -*-
from urllib import request
url ='https://httpbin.org/get'
headers =
 
{'User-Agent':"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"
}

在这里插入图片描述
运行结果
在这里插入图片描述


"User-Agent"
:
 
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"  
},
  
"origin":
 "119.137.3.11, 119.137.3.11",
 "url": "https://httpbin.org/get"
}

从运行结果中可以看出,httpbin.org 的放回数据中包含有我们提交给 httpbin.org 的浏览器信息。

urllib.error

网络通信是一个异步的通信过程,不可避免的会出现异常,此时就要用到 urllib.error 来处理错误『若不处理错误会造成程序中断执行』,这个会增加程序的健壮性。

urlib.error 中有三个异常处理类,分别是 URLError、HTTPError 和 ContentToolShortError。

URLError 是 urllib.error 异常的类的基类,URLError 是 OSError 的子类,当程序在运行过程中出现错误时会触发该异常。URLError 类带有一个 reason 属性,返回异常的原因,reason 是一个消息字符串或者是一个异常实例。

URLError 示例代码:

在这里插入图片描述
HTTPError 是专门用于处理 http 和 https 请求错误的异常类,HTTPError 也可以作为一个特殊的文件返回值「它与 URLopen 的返回相同」。HTTPError 是 URLError 的子类,它有 code、reason 和 headers 三个属性,code 是 HTTP 请求的返回吗,reason 同 URLError 中相同是一个表示异常原因的消息字符串,headers 是 HTTP 请求返回的请求头信息。

HTTPError 示例代码:

在这里插入图片描述

标签:硬货,None,请求,Python,request,urllib,urlopen,URLError
来源: https://www.cnblogs.com/aa1273935919/p/14073253.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有