一、什么是Urllib

我们首先了解一下 Urllib 库,它是 Python 内置的 HTTP 请求库,也就是说我们不需要额外安装即可使用,它包含四个模块:第一个模块 request,它是最基本的 HTTP 请求模块,我们可以用它来模拟发送请求,就像在浏览器里输入网址然后敲击回车一样,只需要给库方法传入 URL 还有额外的参数,就可以模拟实现这个过程了。

第二个 error 模块,即异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作,保证程序不会意外终止。

第三个 parse 模块是一个工具模块,提供了许多 URL 处理方法,比如拆分、解析、合并等的方法。

第四个模块是 robotparser,主要是用来识别网站的 robots.txt 文件,然后判断哪些网站可以爬,哪些网站不可以爬的,其实用的比较少。

在这里重点对前三个模块进行下讲解。

二、发送请求

使用 Urllib 的 request 模块我们可以方便地实现 Request 的发送并得到 Responseurlopen()

urllib.request模块提供了最基本的构造 HTTP 请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还带有处理authenticaton(授权验证),redirections(重定向)cookies(浏览器Cookies)以及其它内容。

我们来感受一下它的强大之处,以 百度首页为例,我们来把这个网页抓下来:

1.发送请求(以GET方式)

2.response

通过输出结果可以发现它是一个 HTTPResposne 类型的对象,它主要包含的方法有 read()、readinto()、getheader(name)、getheaders()、fileno() 等方法和 msg、version、status、reason、debuglevel、closed 等属性。

得到这个对象之后,我们把它赋值为 response 变量,然后就可以调用这些方法和属性,得到返回结果的一系列信息了。

例如调用 read() 方法可以得到返回的网页内容,调用 status 属性就可以得到返回结果的状态码,如 200 代表请求成功,404 代表网页未找到等。

可见,三个输出分别输出了响应的状态码,响应的头信息,以及通过调用 getheader() 方法并传递一个参数 Server 获取了 headers 中的 Server 值,结果是 nginx,意思就是服务器是 nginx 搭建的。 利用以上最基本的 urlopen() 方法,我们可以完成最基本的简单网页的 GET 请求抓取。 如果我们想给链接传递一些参数该怎么实现呢?我们首先看一下 urlopen() 函数的API:

可以发现除了第一个参数可以传递 URL 之外,我们还可以传递其它的内容,比如 data(附加数据)、timeout(超时时间)等等。

下面我们详细说明下这几个参数的用法:data参数

data 参数是可选的,如果要添加 data,它要是字节流编码格式的内容,即 bytes 类型,通过 bytes() 方法可以进行转化,另外如果传递了这个 data 参数,它的请求方式就不再是 GET 方式请求,而是 POST。

在这里我们传递了一个参数 word,值是 hello,它需要被转码成bytes(字节流)类型。其中转字节流采用了 bytes() 方法,第一个参数需要是 str(字符串)类型,需要用 urllib.parse 模块里的 urlencode() 方法来将参数字典转化为字符串,第二个参数指定编码格式,在这里指定为 utf8。最后通过read()方法获取响应体的内容。参数timeout(超时)的设置

timeout 参数可以设置超时时间,单位为秒,意思就是如果请求超出了设置的这个时间还没有得到响应,就会抛出异常,如果不指定,就会使用全局默认时间。它支持 HTTP、HTTPS、FTP 请求。 因此我们可以通过设置这个超时时间来控制一个网页如果长时间未响应就跳过它的抓取,利用 try except 语句就可以实现这样的操作,代码如下:

其他参数

还有 context 参数,它必须是 ssl.SSLContext 类型,用来指定 SSL 设置。

cafile 和 capath 两个参数是指定 CA 证书和它的路径,这个在请求 HTTPS 链接时会有用。

cadefault 参数现在已经弃用了,默认为 False。

以上讲解了 urlopen() 方法的用法,通过这个最基本的函数可以完成简单的请求和网页抓取,如需更加详细了解,可以参见官方文档:https://docs.python.org/3/library/urllib.request.html

3.Request

由上我们知道利用 urlopen() 方法可以实现最基本请求的发起,但这几个简单的参数并不足以构建一个完整的请求,如果请求中需要加入 Headers 等信息,我们就可以利用更强大的 Request 类来构建一个请求。

首先我们用一个实例来感受一下 Request 的用法:

可以发现,我们依然是用 urlopen() 方法来发送这个请求,只不过这次 urlopen() 方法的参数不再是一个 URL,而是一个 Request 类型的对象,通过构造这个数据结构,一方面我们可以将请求独立成一个对象,另一方面可配置参数更加丰富和灵活。

下面我们看一下 Request 都可以通过怎样的参数来构造,它的构造方法如下:

第一个 url 参数是请求 URL,这个是必传参数,其他的都是可选参数。

第二个 data 参数如果要传必须传 bytes(字节流)类型的,如果是一个字典,可以先用 urllib.parse 模块里的 urlencode() 编码。

第三个 headers 参数是一个字典,这个就是 Request Headers 了,你可以在构造 Request 时通过 headers 参数直接构造,也可以通过调用 Request 实例的 add_header() 方法来添加, Request Headers 最常用的用法就是通过修改 User-Agent 来伪装浏览器,默认的 User-Agent 是 Python-urllib,我们可以通过修改它来伪装浏览器。

第四个 origin_req_host 参数指的是请求方的 host 名称或者 IP 地址。

第五个 unverifiable 参数指的是这个请求是否是无法验证的,默认是False。意思就是说用户没有足够权限来选择接收这个请求的结果。例如我们请求一个 HTML 文档中的图片,但是我们没有自动抓取图像的权限,这时 unverifiable 的值就是 True。

第六个 method 参数是一个字符串,它用来指示请求使用的方法,比如GET,POST,PUT等等。

写个例子:

在这里我们通过四个参数构造了一个 Request,url 即请求 URL,在headers 中指定了 User-Agent 和 Host,传递的参数 data 用了 urlencode() 和 bytes() 方法来转成字节流,另外指定了请求方式为 POST。

通过观察结果可以发现,我们成功设置了 data,headers 以及 method。

另外 headers 也可以用 add_header() 方法来添加。

这样,我们就可以更加方便地构造一个 Request,实现请求的发送啦。

python urllib安装_Python Urllib库相关推荐

  1. python bs4 安装_Python之解BS4库如何安装与使用?正确方法教你

    Beautiful Soup 库一般被称为bs4库,支持Python3,是我们写爬虫非常好的第三方库.因用起来十分的简便流畅.所以也被人叫做"美味汤".目前bs4库的最新版本是4. ...

  2. python编码示例_python urllib中的编码处理示例

    复制代码 代码如下: >>> import urllib >>> data = '丽江' >>> print data 丽江 >>&g ...

  3. Python 离线 安装requests第三方库

    一.介绍 requests是Python的一个HTTP客户端库,跟urllib,urllib2类似,不过requests的优势在于使用简单,相同一个功能,用requests实现起来代码量要少很多.毕竟 ...

  4. Python开发——安装requests第三方库

    一.介绍 requests是Python的一个HTTP客户端库,跟urllib,urllib2类似,不过requests的优势在于使用简单,相同一个功能,用requests实现起来代码量要少很多.毕竟 ...

  5. python scrapy安装_Python安装Scrapy

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我们测试一下:# scrapy version-bash: scrapy: 未找 ...

  6. python pyplot安装_Python学习-windows安装Python以及matplotlib.pyplot包

    引文: Python自带了许多的库文件,其中matplotlib可以做出类似于MATLAB和R语言一样绘制出很好的图形功能,下面介绍下怎么安装这个包,因为自己安装的时候很多地方都出错了. 环境: Wi ...

  7. qpython3h第三方库安装_Python第三方库安装

    Python有一个全球社区:https://pypi.org/,在这里我们可以搜索任何主题的Python第三方库.PyPI全称是Python Package Index,指的是Python包的索引,它 ...

  8. python flask安装_python flask安装和命令详解

    Flask Web开发实战学习笔记 Flask简介 Flask是使用Python编写的Web微框架.Web框架可以让我们不用关 心底层的请求响应处理,更方便高效地编写Web程序.因为Flask核心简 ...

  9. python xlwings 切片_Python xlwings库学习笔记(1)

    Python xlwings库学习笔记(1) Python是最近几年很火的编程语言,被办公自动化的宣传吸引入坑,办公自动化必然绕不开Excel的操作,能操作Excel的库有很多,例如: xlrd xl ...

最新文章

  1. App is not indexable by Google Search; consider adding at least one Activity with an ACTION-VIEW int
  2. 有了这几个神器,瞬间逼格就上去了
  3. pyqt5学习(四)事件和信号
  4. (2014年2月7日升级)Ubuntu-14.04-Alpha2-32位简体中文优化封装版
  5. [原创] 指针操作程序答案 — 谭浩强C语言习题答案
  6. 这个温州人牛上天!30多颗北斗卫星发射成功,有他的功劳!
  7. 主流开源开发者工具落地阿里云,进一步提升开发者体验
  8. WPF程序模彷Windows7的桌面任务栏
  9. charles捕获手机端请求数据
  10. django模板的使用方法
  11. Wine——在Linux上运行Windows软件
  12. 不忘初心,不负韶华——2021年中会议发言之一
  13. Linux 如何打开pyo文件,Python的文件类型
  14. 数据库中如何新增一个字段
  15. 蓝牙sbc怎么解决_从指标看蓝牙A2DP编码(SBC,AAC,APTX)
  16. c# 容联云_迅雷云加速开放平台c#demo
  17. 无线网卡SP-WL450U的驱动问题
  18. 马路上“低头族”的交通隐患 ,小心埋头苦干的恶果
  19. 读书之后写笔记的软件哪个好
  20. 大小球实用技巧:程序实现“惊天反转”你想要的这里都有!

热门文章

  1. python快速获取多个列表的所有组合形式
  2. Kotlin 4 构造,对象,修饰符,关键字,委托
  3. 魅族 C++ 微服务框架技术内幕揭秘
  4. 将RHEL7/centos7系统网卡名称eno16777736改为eth0
  5. scjp考试准备 - 1 - 循环控制
  6. 解决spring配置c3p0连接池,tomcat无法正常启动
  7. php自己总结的一些经典的实例
  8. WaitForSingleObject
  9. C# 关闭进程的时候总是捕捉到System.Threading.ThreadAbortException: 正在中止线程
  10. 搭建基于asp.net的wcf服务,ios客户端调用的实现记录