python2中,有urllib和urllib2两个库,在python3中统一为urllib库

它是python内置的HTTP请求库,包含了4个模块:

request:最基本的HTTP请求模块,用来模拟发送请求,就行浏览器传入URL一样,给库方法传入URL和额外的参数就可以实现

error:异常处理模块,如果出现请求错误,可以捕获这些异常,然后进行操作,保证程序不会以为终止

parse:工具模块,提供了URL处理方法,比如拆分、解析、合并

robotparser:主要用来识别网站的robots.txt文件,然后判断哪些网站可以爬,哪些不可爬

官方文档:

https://docs.python.org/3/library/urllib.request.html

发送请求:

urllib.request模块:

1、urlopen()

urllib.request模块最基本的构造HTTP请求方法,可以模拟浏览器一个请求发起的过程,还带有处理授权验证、重定向、浏览器Cookies和其他内容

抓取python官网

查看返回的类型

是一个HTTPResponse类型,主要包含方法:

read()

readinto()

getheader(name)

getheaders()

fileno()

主要包含属性:

msg

version

status

reason

debuglevel

closed

urlopen()参数

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

data参数

data是可选参数,bytes类型,如果不是就需要通过bytes()方法转化,如果穿了data参数,那么请求方式就是POST,反之就是GET

bytes()方法的第一个参数需要是字符串类型,使用urllib.parse.urlencode()方法将参数字典转换成字符串;第二个参数是指点编码格式

结果看到传的参数在form字段,表示模拟表单方式,以POST方式传输

timeout参数

用户设置超时时间,单位是秒,如果请求超过这个时间还没有响应,就抛出异常

超时的话会抛出超时

捕获异常

context:必须是ssl.SSLContext类型,用于指点SSL设置

cafile、capath:指定CA证书和它的路径

cadefault:默认是false,已经弃用

Request参数

发送请求依然使用urlopen()方法,只不过参数使用Request类型的对象

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

url:请求的URL,必传

data:必须是bytes类型,如果是字典,先用rullib.parse模块里的 urlencode()编码

headers:请求头,字典形式,可以在参数直接构造,也可以通过调用add_header()方法添加

origin_req_host:请求方的host名或者IP地址

unverifiable:默认是flase,表示请求是否是无法验证的,也就是用户有没有权限来接收这个请求的结果

method:字符串形式,指定请求的方式

高级用法Handler

urllib.request中的BaseHandler类,是其他所有Handler的父类,提供了最基本的方法,defult_open()、protocol_request()等

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

HTTPDefaultErrorHandler:用于处理HTTP响应错误,错误都会抛出HTTPError类型的异常

HTTPRedirectHandler:处理重定向

HTTPCookieProcessor:处理Cookies

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

HTTPPasswordMgr:管理密码,维护了用户名和密码的表

HTTPBasicAuthHandler:管理认证,如果打开链接需要认证,用它可以解决

还有其他类,查看所有的官方文档:

httos://docs.python.org/3/library/urllib.request.html#urllib.request.BaseHandler

OpenerDirector类

简称Opener,urlopen()方法就是urllib提供的一个Opener

Request和urlopen相当于类库为我们封装了常用的一些方法,利用这些可以完成基本的请求,想要完成更高级的功能,需要使用更底层的实例完成,就用到了Opener

Opener可以使用open()方法,和urlopen()一样

利用Handler来构建Opener

实例:

1、验证

例如打开网站时弹框提示登录,登录后才可以查看页面

实例化HTTPPasswordMgrWithDefaultRealm对象,它利用add_password()添加用户名密码,这样就建立了一个处理验证的Handler

利用这个Handler使用build_opener()方法构建一个Opener,这个Opener在方式请求时就相当于已经验证成功了

然后Opener利用open()方法打开连接就可以完成验证,获取到的就是验证后的页面源代码

2、代理

爬虫免不了做代理,添加代理

使用ProxyHandler,参数是一个字典,键名是协议类型,如:HTTP或者HTTPS,值是代理链接,可以添加多个代理

然后利用这个Handler及build_opener()方法构造一个Opener,之后发送请求

3、Cookies

将网站的Cookies获取下来,打印

首先声明一个CookieJar对象,然后利用HTTPCookieProcessor来构建一个Handler,最后利用build_opener()方法构建出Opener,执行open()方法

输出成文件格式

CookieJar换成MozillaCookieJar,生成文件时用,是CookieJar的子类,用来处理Cookie和文件相关的事,比如读取、保存,可以将Cookie保存成Mozilla型浏览器的Cookie形式

LWPCookieJar同样可以读取和保存Cookie,但是保存的格式和MozillaCookieJar不一样,它会保存成libwww-perl(LWP)格式的Cookie文件

读取并使用Cookie

lod()方法用来读取本地Cookie文件,获取内容,然后构建Handler和Opener完成操作

官方文档:

https://docs.python.org/3/library/urllib.request.html#basehandler-objects

python中的urllib库_七、urllib库(一)相关推荐

  1. python中turtle画老虎_通过Turtle库在Python中绘制一个鼠年福鼠

    turtle库是一个很经典的绘图库,其最初来自于1967年创造的logo编程语言,之后被Python编写放到了Python的内置模块中.网络上有很多借助于turtle绘制精美图像的案例.比如小猪佩奇. ...

  2. Python中单个下划线“ _”变量的用途是什么?

    这段代码中_ after for的含义是什么? if tbh.bag:n = 0for _ in tbh.bag.atom_set():n += 1 #1楼 下划线_在Python中被视为" ...

  3. Python中单个下划线“_”变量的目的是什么?

    在Python中,下划线_被视为" 我不关心 "或" 丢失 "变量 python解释器将最后一个表达式值存储到名为的特殊变量中_. >>> 1 ...

  4. [python-thirdLib] Python中第三方的用于解析HTML的库:BeautifulSoup

    From: http://www.crifan.com/python_third_party_lib_html_parser_beautifulsoup/ 背景 在Python去写爬虫,网页解析等过程 ...

  5. python中流程图的基本元素_面试干货:成为Python程序员的终极指南!(内附回答)...

    科技行业正以前所未有的速度增长.我们看到市场上发布了新的软件产品. 无论您是初学者还是经验丰富的Python开发人员,机会都是非常多的,如何把握?. 唯一的要求:必须在Python编程面试中使用您的技 ...

  6. python中break怎么用_详解Python中break语句的用法

    详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...

  7. python中的下划线_讲解

    python中,下划线 "_""_"" \_" 不管是单独作为变量名或者作为变量名的前缀或者后缀,是有特殊含义的,下面简要的来总结一下. 1 ...

  8. Turtle库_初识Turtle库

    在python中,有许多自带的库,无需安装,它们的功能俱全,可以帮助我们完成很多工作,今天我们就来学习比较容易上手的Turtle库. (Turtle在英文中是乌龟

  9. configure 查找依赖库_由浅入深:Python 中如何实现自动导入缺失的库?

    在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No module named 'xxx' 或者 ModuleNotFoundError: No mod ...

最新文章

  1. Vagrant搭建Ubuntu-JavaEE开发环境——Tomcat+JDK+MySQL+dubbo+测试
  2. 解决geoserver跨域问题
  3. 屏显有啥硬科技可卷?让现在电视厂商这么拼
  4. 360 您访问的是存在未经证实信息的网站
  5. git bash退回上一个文件夹
  6. python dataframe取列名_python – 获取列名在DataFrame中按其值排序
  7. SAP Fiori应用里的get org sales target
  8. CF850F Rainbow Balls(数学、期望)
  9. Flex中的Base64加解密
  10. Day07-函数(2)
  11. Django的分页器(paginator)
  12. android指南针校准 代码_Android 指南针传感器
  13. 转载:Linux批量远程管理主机命令_pssh用法详解
  14. C/C++基础——inline 与 宏
  15. opencv安装命令行
  16. C语言刷题6:给定b的值,输入a和m,求a*b和a^m的值
  17. 单片机常用芯片系列(二)——DS18B20详解
  18. DVWA--SQL Injection(SQL注入-非盲注)(全难度)
  19. Kewail-短信接口接入流程
  20. IT英语中英文对照:著名的软件产品

热门文章

  1. Python:__slots__()方法和@property方法
  2. 计算机无法加电,计算机无法加电是何故?
  3. dw超链接标签_小花园DW学习笔记
  4. linux大小写敏感和windows大小写不敏感(忽略大小写)导致的直接拷贝文件文件名冲突问题(需要打tar包再分享)
  5. mysql怎么显示、查询现有数据库列表?(show databases;)怎么删除现有数据库?(drop database <库名>)
  6. Intel Realsense D435 多摄像头多线程目标识别架构
  7. BeautifulSoup中的.text方法和get_text()方法的区别
  8. PyQt4编程之如何让状态栏显示信息
  9. Java中的与、或、非以及异或( | ~ ^)运算符的运算原理
  10. richtextbox自动滚动到最下面_工业自动化直线运动部件大全,导轨、轴承、衬套、丝杠、导向轴简介说明...