Infi-chu:

http://www.cnblogs.com/Infi-chu/

一、urllib库:

1. 是Python内置的HTTP请求库

2. 在Python2中,由urllib和urllib2之分,而在Python3中,统一为urllib

3. 主要包含模块:

  request:最基本的发送模块,用来模拟发送请求

  error:异常处理模块

  parse:一个工具模块

  robotparser:主要用来识别robots.txt文件

二、发送请求:

1. urlopen()

  urllib.request:模块提供了最基本的构造HTTP请求的方法,同时还带有处理验证(authentication)、重定向(redirection)、浏览器Cookies等

import urllib.request
r = urllib.request.openurl('http://www.baidu.com')
print(r.read().decode('utf-8'))
print(type(r)) # <class 'http.client.HTTPResponse'>

  HTTPResponse类型的对象包括的方法:read()、readinto()、getheader(name)、getheaders()、fileno()等

  HTTPResponse类型的对象包括的属性:msg、version、status、reason、debuglevel、closed等

  urlopen()函数的API:  

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

    data参数:

      1. 可选

      2. 若是字节流编码格式的内容,即bytes类型,则需要通过bytes()方法转化。若传递该参数,则请求方式会有GET变为POST

      3. bytes()第一个参数需为str类型,可用urllib.parse.urlencode()方法是字典变为字符串

    timeout参数:

      1. 可选

      2. 用于设置超时时间,单位是秒,默认使用全局默认时间

      3. 支持HTTP、HTTPS、FTP请求

      4. 例:   

import urllib
try:
r = urllib.request.urlopen('http://www.baidu.com',timeout=0.1)
except urllib.error.URLError as e:
if isinstance(e.reason,socket.timeout):
print('Time Out!')

    context参数:必须是ssl.SSLContext类型,用来指定SSL设置

    cafile参数:指定CA证书

    capath参数:指定CA证书的路径

    【注】cafile和capath一起在请求HTTPS时使用

    cadefault参数:已被废弃,默认是False

    

2. Request

  urlopen()不足以构建一个完整的请求,若要加入Headers等信息,就可以用Request类

  Request类的构造:  

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

    url参数:同urlopen()

    data参数:同urlopen()

    headers参数:

      1. 请求头

      2. 可以直接在字典中构造,也可以用add_header()方法添加

      3. 可将User-Agent改为Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)  【注】伪造成浏览器访问

    origin_req_host参数:指的是请求方的host名称或IP地址

    unverifiable参数:请求是否是无法验证的,默认是False

    method参数:是一个字符串,用来指示请求的方法

3. Handler(请求的高级用法):

  Handler是各种处理器,可以处理登录验证,可以处理Cookies,可以处理代理。

  urllib.request模块里面的BaseHandler类,是所有其他Handler的父类。

  各种Handler子类继承这个BaseHandler类:

    HTTPDefaultErrorHandler:用于处理HTTP响应错误,会抛出异常

    HTTPRedirectHandler:用于处理重定向

    HTTPCookieProcessor:用于处理Cookies

    ProxyHandler:用于设置代理,默认为空

    HTTPPasswordMgr:用于管理密码

    HTTPBasicAuthHandler:用于管理认证

4. OpenDirector:

  应用:验证、代理、Cookies

三、异常处理:

1. URLError:

  a. 来自urllib库的error模块,他继承自OSError类,是error异常模块的基类,由request模块产生的异常都可以通过它处理

  b. reason属性,返回原因

2. HTTPError:

  a. 是URLError的子类,专门用来处理HTTP请求错误

  b. 三个属性:

    code:返回状态码

    reason:返回原因

    headers:返回请求头

四、解析链接:

  介绍parse模块中的方法,parse定义了处理URL的标准接口

1. urlparse()

  实现URL的识别分段。

  API用法: 

urllib.parse.urlparse(urlstring,scheme='',allow_fragments=True)

  urlstring参数:必选,待解析的URL

  scheme参数:它是默认的协议(HTTP、HTTPS),urlstring没有时生效

  allow_fragments参数:是否忽略fragment,False为忽略,当URL中不包含params和query时,fragment会被解析为path的一部分

2. urlunparse()

  与urlparse对立,接受的参数是一个可迭代对象,长度必须为6(scheme,netloc,path,params,query,fragment),可以是元组、字典等特定的数据结构,这样就可以实现URL的构造

3. urlsplit()

  与urlparse相似,不单独解析parse,返回5各部分,元组类型

4. urlunsplit()

  与urlunparse()类似,将各个部分拼接,长度必须是5

5. urljoin()

  生成链接,提供一个base-url的scheme,netloc,和path 3个内容并对新链接缺失的部分进行补充。

  【注】两个都有取最新的,不全的话互补

6. urlencode()

  在构造GET请求参数的时候很有用,将字典序列化为GET请求参数

7. parse_qs()

  反序列化,将一串GET请求参数,转化为字典

8. parse_qsl()

  同parse_qs(),将GET转化为元组组成的列表

9. quote()

  将内容转化为URL编码的格式,因为URL有中文编码格式时,可能会出现乱码,用它可以转化

10. unquote()

  进行URL解码

五、分析robots协议:

  robotparser模块,该模块提供了一个RobotFileParser类

urllib.robotparser.RobotFileParser(url='')

  此类的常用方法:

  set_url()  设置robots.txt文件的链接

  read()  读取文件并分析

  parse()  解析文件

  can_fetch()  传入两个参数,第一个是User-Agent,第二个是抓取的URL,返回是否可抓取

  mtime()  返回上回抓取和分析的时间

  modified()  将当前时间设置为上次抓取和分析的时间

Python3爬虫(三)请求库的使用之urllib的更多相关文章

  1. Python3 网络爬虫(请求库的安装)

    Python3 网络爬虫(请求库的安装) 爬虫可以简单分为几步:抓取页面,分析页面和存储数据 在页面爬取的过程中我们需要模拟浏览器向服务器发送请求,所以需要用到一些python库来实现HTTP的请求操 ...

  2. 爬虫、请求库selenium

    阅读目录 一 介绍 二 安装 三 基本使用 四 选择器 五 等待元素被加载 六 元素交互操作 七 其他 八 项目练习 一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决r ...

  3. 爬虫、请求库requests

    阅读目录 一 介绍 二 基于GET请求 三 基于POST请求 四 响应Response 五 高级用法 一 介绍   #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,req ...

  4. python3爬虫之requests库基本使用

    官方文档链接(中文) https://2.python-requests.org/zh_CN/latest/ requests  基于  urllib3 ,python编写. 安装 pip insta ...

  5. Python爬虫requests请求库

    requests:pip install  request 安装 实例: import requestsurl = 'http://www.baidu.com'response = requests. ...

  6. Python3爬虫一之(urllib库)

    urllib库是python3的内置HTTP请求库. ython2中urllib分为 urllib2.urllib两个库来发送请求,但是在python3中只有一个urllib库,方便了许多. urll ...

  7. python3爬虫之Urllib库(一)

    上一篇我简单说了说爬虫的原理,这一篇我们来讲讲python自带的请求库:urllib 在python2里边,用urllib库和urllib2库来实现请求的发送,但是在python3种在也不用那么麻烦了 ...

  8. 爬虫请求库——requests

    请求库,即可以模仿浏览器对网站发起请求的模块(库). requests模块 使用requests可以模拟浏览器的请求,requests模块的本质是封装了urllib3模块的功能,比起之前用到的urll ...

  9. Python爬虫--- 1.1请求库的安装与使用

    来说先说爬虫的原理:爬虫本质上是模拟人浏览信息的过程,只不过他通过计算机来达到快速抓取筛选信息的目的所以我们想要写一个爬虫,最基本的就是要将我们需要抓取信息的网页原原本本的抓取下来.这个时候就要用到请 ...

随机推荐

  1. 关于使用metronic时里modal模拟框使用ueditor时不能全屏的情况

    ueditor里有这么断代码, 1.初始显示状态下(非全屏),修改一下代码的z-index UE.Editor.defaultOptions = function(editor){ var _url ...

  2. python 整形方法

    1. int() a = ' print(type(a), a) b = int(a) print(type(b), b) # 输出 <class 'str'> 123 <class ...

  3. BZOJ1033:[ZJOI2008]杀蚂蚁antbuster(模拟)

    Description 最近,佳佳迷上了一款好玩的小游戏:antbuster.游戏规则非常简单:在一张地图上,左上角是蚂蚁窝,右 下角是蛋糕,蚂蚁会源源不断地从窝里爬出来,试图把蛋糕搬回蚂蚁窝.而你的 ...

  4. 【洛谷1494】[国家集训队] 小Z的袜子(莫队)

    点此看题面 大致题意: 有\(N\)只从\(1\sim N\)编号的袜子,告诉你每只袜子的颜色,\(M\)组询问,每组询问给你一个区间\([L\sim R]\),让你求出小Z随机抽出\(2\)只袜子时 ...

  5. LG3690 【【模板】Link Cut Tree (动态树)】

    题目 终于去写\(LCT\)了 这个大爷讲的挺好的 板子 #include<algorithm> #include<iostream> #include<cstring& ...

  6. redux创建store,处理更新数据

    如果我们想使用redux,第一步需要通过 yarn add redux 来安装redux 安装成功后就需要去创建一个store,怎么创建呢,非常的简单,在src下面创建一个文件夹,这个文件夹名字就叫做 ...

  7. c#隐藏tabcontrol选项卡

    隐藏:Tab1.TabPage2.Parent = null;显示:Tab1.TabPage2.Parent =Tab1;tab1为tab控件名,TabPage2为选项卡名.

  8. 【luogu P1402 酒店之王】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1402 菜 #include <queue> #include <cstdio> #i ...

  9. 【luogu P2764 最小路径覆盖问题】 模板

    题目链接:https://www.luogu.org/problemnew/show/P2764 把每个点在左边建一遍右边建一遍,再加上源点汇点,跑最大流,n-最大流就是答案. #include &l ...

  10. lucene&solr学习——创建和查询索引(代码篇)

    1. Lucene的下载 Lucene是开发全文检索功能的工具包,从官网下载Lucene4.10.3并解压. 官网:http://lucene.apache.org/ 版本:lucene7.7.0 ( ...