数据爬虫(二):爬虫urllib库基本使用方法

一、urllib.request 请求模块:

urllib.request 模块提供了最基本的构造 HTTP (或其他协议如 FTP)请求的方法,利用它可以模拟浏览器的一个请求发起过程。利用不同的协议去获取 URL 信息。它的某些接口能够处理基础认证 ( Basic Authenticaton) 、redirections (HTTP 重定向)、 Cookies (浏览器 Cookies)等情况。而这些接口是由 handlers 和 openers 对象提供的。

(1)、urlopen:

参数:url:需要打开的网址 data: Post 提交的数据, 默认为 None ,当 data 不为 None 时, urlopen() 提交方式为 Post timeout:设置网站访问超时时间

说明: 直接使用 urllib.request 模块中的 urlopen方法获取页面,其中 page 数据类型为 bytes 类型,经过 decode 解码 转换成 string 类型。通过输出结果可以 urlopen 返回对象是 HTTPResposne 类型对象。

urlopen 返回一个类文件对象,并提供了如下方法:

read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样; info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息;可以通过Quick Reference to Http Headers查看 Http Header 列表。 getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到; geturl():返回获取页面的真实 URL。在 urlopen(或 opener 对象)可能带一个重定向时,此方法很有帮助。获取的页面 URL 不一定跟真实请求的 URL 相同。

(二)、Post数据:

https://httpbin.org是一个专门用于测试的网站,收藏

在 urlopen 参数 data 不为 None 时,urlopen() 数据提交方式 为 Post。urllib.parse.urlencode()方法将参数字典转化为字符串。提交的网址是httpbin.org,它可以提供HTTP请求测试。 https://httpbin.org/post 这个地址可以用来测试 POST 请求,它可以输出请求和响应信息,其中就包含我们传递的 data 参数。

(三)、timeout参数

timeout参数可以设置超时时间,单位为秒,意思就是如果请求超出了设置的这个时间还没有得到响应,就会抛出异常,如果不指定,就会使用全局默认时间。它支持 HTTP 、 HTTPS 、 FTP 请求。

我们试着给timeout一个更小的值,例如timeout=0.1,此时抛出 urllib.error.URLError 异常,错误原因为 time out 。因为常理下 0.1 s 内根本就不可能得到服务器响应。所以通过设置参数 timeout 的值对于应对网页响应的速度具有一定的意义。同时,可以通过设置这个超长时间来控制一个网页如果长时间未响应就跳过它的抓取(可以通过try-catch 语句)。

输出:Time out!

二、响应(后面主要用代码演示)

返回值:

状态码、响应头:

返回值:

 

读取返回值已utf-8进行编码,过多不做演示

三、Request

返回值:parse是解析模块

这个模块是一个能把URL字符串拆分成组件,能把组件合并成URL和将一个相对的URL转成一个抽象的URL,从而的到一个基本的URL标准格式。简单的说就是可以拆分URL,也可以拼接URL,他支持的URL格式为:file、ftp、gopher、hdl、http、https、imap、mailto,mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、shttp、sip、sips、snews、svn、svn+ssh、telnet、wais、ws、wss。
这个模块默认分为两个类别,URL parsing(URL解析) 和 URL quoting(URL引用)

函数用于将一个URL解析成六个部分,返回一个元组,URL的格式为:scheme://netloc/path;parameters?query#fragment;包含六个部分,元组中每一个元素都是一个字符串,可以为空,这六个部分均不能再被分割成更小的部分;

以下为返回的元组元素:

这个函数主要用于分析URL中query组件的参数,返回一个key-value对应的字典格式;实例:

输出:

urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding=’utf-8’, errors=’replace’)

这个函数和urllib.parse.parse_qs()作用一样,唯一的区别就是这个函数返回值是list形式;

输出:

urllib.parse.urlunparse(parts)

这个函数可以将urlparse()分解出来的元组组装成URL;

示例如下:

输出结果:

urllib.parse.urlsplit(urlstring, scheme=”, allow_fragments=True)
这个函数和urlparse()功能类似,唯一的区别是这个函数不会将url中的param分离出来;就是说相比urlparse()少一个param元素,返回的元组元素参照urlparse()的元组表,少了一个param元素;

示例如下:

输出结果:

urllib.parse.urlunsplit(parts)

与urlunparse()相似,切与urlsplit()相对应;

示例如下:

输出结果:

urllib.parse.urljoin(base, url, allow_fragments=True)

这个函数用于讲一个基本的URL和其他的URL组装成成一个完成的URL;

示例如下:

输出结果:

 

注意:如果URL是一个抽象的URL(例如以“//”或“scheme://”开头),这个URL的主机名或请求标识会自动返回;

urllib.parse.urldefrag(url)

如果URL中包含fragment标识,就会返回一个不带fragment标识的URL,fragment标识会被当成一个分离的字符串返回;如果URL中不包含fragment标识,就会返回一个URL和一个空字符串。

总与over了,有些资料整理于网络,转载附上链接:http://blog.esouti.com/2018_02_02_526.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值