urllib库python内置的HTTP请求库

四个模块:request,parse,error,rebotparser

一。request模块

请求对象组成:url,参数,请求头,请求体四部分。response = urllib.request.urlopen(url,data=None,timeout,..)

response = urllib.request.urlopen(Request对象)

Request对象urllib.request.Request(url,data,headers,method)

data是作为请求体进行传递的data = bytes(utllib.parse.urlencode(map),'utf-8')

headers的一些属性:User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求

Referer:有的服务器会识别headers中的referer是不是自己

Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。

application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用

application/json : 在 JSON RPC 调用时使用

application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务

例如headers={

'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',

'Referer':'http://www.zhihu.com/articles'

}

response对象

响应对象组成:状态码,响应头,响应主体

状态码,响应头,响应主体response.status

response.getheaders()    /   response.getheaders("server")

response.read().decode('utf-8')    # 如果不加decode,则返回的是bytes类型的流

二。parse模块(URL解析和URL引用)

1.URL解析:urlparse将url解析成各个组件和urlunparse将组件拼装成url

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

# scheme指定协议类型,如果url中已经存在,则scheme不起作用

#allow_fragments为false时,fragment将为空,#后的内容将前移至path中,如果path之后的参数全为空

#URL组成

URL:scheme://netloc/path;parameters?query#fragment

urljoin

将前后两个url进行拼接,每个url分成6个部分,后面那个参数会被分割后会填充前面那个参数中分割后不存在的那个部分,双方都有的话,将以前者为准urljoin('http://www.cwi.nl/%7Eguido/Python.html','FAQ.html')

>>>'http://www.cwi.nl/%7Eguido/FAQ.html'

urlencode

将字典转为query的形式from urllib.parse import urlencode

params = {

'name' :'tim',

'age' :23

}

print(urlencode(params))

>>> name='tim'&age=23

urlunparse

将url的6个部分拼接成urldata = {'','',...}

三。error模块

由request产生。主要存在两个类:URLError,HTTPError(继承URLError)

URLError属性:reason

HTTPError属性:code,reason,headers

四。rebotparser模块

用来解析robots.txt文件,不常用。

五。高级用法

1. Opener

当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。

如果我们需要用到Cookie或者Proxy,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie和Proxy的设置。

2. proxy代理import urllib.request

proxy_handler = ProxyHandler({'http':'http://127.0.0.1:9999',...})

opener = build_opener(proxy_handler)

response = opener.open('http://..')

3. Cookielib

主要用来提供可存储的cookie对象。可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送。可以通过F12->Application->Cookies中查看

CookieJar —-派生—->FileCookieJar  —-派生—–>MozillaCookieJar和LWPCookieJarimport http.cookiejar

#声明一个CookieJar对象实例来保存cookie

cookie = http.cookiejar,CookieJar()

#利用urllib库request模块的HTTPCookieProcessor对象来创建cookie处理器

handler=urllib.request.HTTPCookieProcessor(cookie)

#通过handler来构建opener

opener=urllib.request.build_opener(handler)

#此处的open方法同urllib2的urlopen方法,也可以传入request

response=opener.open('http://www.baidu.com')

for item in cookie:

print'Name = '+item.name

print'Value = '+item.value

使用MozillaCookieJar和LWPCookieJar可以将cookie保存到文件中,使用save来存储,使用load来加载。#设置保存cookie的文件,同级目录下的cookie.txt

filename='cookie.txt'

#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件

cookie=http.cookiejar.MozillaCookieJar(filename)

#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器

handler=urllib2.request.HTTPCookieProcessor(cookie)

#通过handler来构建opener

opener=urllib.request.build_opener(handler)

#创建一个请求,原理同urllib2的urlopen

response=opener.open("http://www.baidu.com")

#保存cookie到文件

cookie.save(ignore_discard=True,ignore_expires=True)

使用load来加载cookie文件到cookiecookie = http.cookiejar.MozillaCookieJar()

cookie.load(filename,ignore_discard=True,ignore_expires=True)

handler=urllib2.request.HTTPCookieProcessor(cookie)

#通过handler来构建opener

opener=urllib.request.build_opener(handler)

#创建一个请求,原理同urllib2的urlopen

response=opener.open("http://www.baidu.com")

python3urllib常见使用_Python3 urllib常用操作相关推荐

  1. linux常见文件打开,Linux常用操作有哪些? Linux常用操作介绍

    Linux系统,相信很多洞电脑的朋友都知道,也知道怎么使用,但是很多电脑新手可不一定知道的.今天我们就来看看电脑新手需要掌握哪些Linux系统的常用操作.下面,U大侠小编就给大家介绍Linux常用操作 ...

  2. python中requests的常用方法_python3 Requests常用操作

    Requests是用Python语言编写的基于urllib,采用Apache2 Licensed开源协议的HTTP库.它比urllib库更加方便.是一个简单易用的HTTP库. 安装pip3 insta ...

  3. docker 删除所有未启动的容器_Docker 镜像容器常用操作(让我们用 docker 溜得飞起)...

    推荐阅读: 面试字节跳动三轮凉凉,内推4面终拿下抖音offer(Java后台研发)​zhuanlan.zhihu.com 一线架构师Spring boot 学习笔记:我的成长全记在这份PDF文档里​z ...

  4. python序列类型-什么是序列,Python序列详解(包括序列类型和常用操作)

    所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们. 为了更形象的认识序列,可以将它看做是一家旅店,那么店中的每个房间就如同序列存储数 ...

  5. python 只取数值_快收藏!Python常用操作运算符,都在这了!(下)

    泰迪学院-Python基础 公众号ID:taidixueyuan 还未阅读第一篇的小可爱,在这里可以直接跳转 快收藏!Python常用操作运算符,都在这了!(上) 5. 逻辑运算符 逻辑运算符包含an ...

  6. pandas 按字符串肚脐眼 读取数据_十分钟学习pandas! pandas常用操作总结!

    学习Python, 当然少不了pandas,pandas是python数据科学中的必备工具,熟练使用pandas是从sql boy/girl 跨越到一名优秀的数据分析师傅的必备技能. 这篇pandas ...

  7. C# 系统应用之窗体最小化至任务栏及常用操作

    现在很多软件如360杀毒软件.酷狗音乐都拥有最小化至任务栏并在系统托盘区留下图标,我的项目同样需要该功能.所以本文主要叙述如何使用C#让窗体最小化至任务栏,同时在系统托盘区的图标点击左键能显示窗体,右 ...

  8. 获取用户列表为空_Python中最常见的10个列表操作

    列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,这篇文章列出了10个常用的列表操作,希望对你有帮助. 1.迭代列表时如何访问列表下标索引 普通版: 优雅版: en ...

  9. xlsxwriter 合并单元格_Python3之excel操作xlsxwriter模块

    1:xlsxwriter模块介绍     xlsxwriter模块主要用来生成excel表格(后缀名为.xlsx)文件,插入数据.插入图标等表格操作.写大文件,速度快且只占用很小的内存空间; 2:xl ...

最新文章

  1. R语言ggplot2可视化强制指定X轴的日期范围实战:组合条形图和lm模型构建的回归模型的结果并强制指定X轴的日期范围
  2. Facebook 开源安卓版 React Native,开发者可将相同代码用于网页和 iOS 应用开发
  3. RV1108调试串口参数设置
  4. MySQL数据库的权限表
  5. WebM VP8 SDK Usage/关于WebM VP8 SDK的用法
  6. Python通过LDAP验证、查找用户(class,logging)
  7. 报表开发者必看:别加班了,快用这个工具让领导看到你的工作成果
  8. 监控 MySQL的多种方法
  9. java异常原则_有效处理Java异常三原则
  10. powerbi 线性回归_微软Power BI 每月功能更新系列——11月Power BI 新功能学习
  11. 64位WIN7系统下无法安装驱动/ 有黄色感叹号怎么办?
  12. FPGA与ASIC对比
  13. 【H3C模拟器】VLAN单臂路由通信:用路由器实现和三层交换机实现
  14. 全球及中国医用外科缝合器行业市场需求潜力及投资战略研究报告2022-2028年
  15. spring boot 2.1.7启动过程源码解析
  16. python中续行符号_Python 的续行标志是( )_大学英语(2)答案_学小易找答案
  17. 2022年江西省建筑三类人员(企业主要负责人A证)练习题及答案
  18. 一种MATLAB中解复杂方程(高次、指数、无解析解)的方法,可以在实现论文中公式时使用,solve函数。
  19. 无线局域网(WLAN)
  20. 增长率超 100%!东软数据可视化到底什么样?

热门文章

  1. java异常处理机制_Java的异常处理机制
  2. python字典与顺序有关吗_python – 为什么在字典和集合中的顺序是任意的?
  3. 生态系统长期观测数据产品体系
  4. 时间频率科学数据管理控制与应用
  5. 【2015年第4期】大数据引领教育未来:从成绩预测谈起
  6. 【Java】计算二进制数中1的个数
  7. 【算法分析与设计】矩阵链乘法最优顺序问题
  8. N进制的规范十进制表示(洛谷P2084题题解,Java语言描述)
  9. Jenkins(Pipeline)
  10. 【转载】android客服端+eps8266+单片机+路由器之远程控制系统