最近在学习“笨方法”学python中,在习题41中发现了urlopen()函数,特意查了下官方资料,查资料最好查官方资料,最好不要做“百度君”。urlopen()函数属于urllib 库中的函数,经常用于网络爬虫,主要功能是打开一个url,并建立其url 握手链接,为后续抓取相关数据做准备。

urllib是属于python的官方函数库,可以查看官方对该库的介绍: 官方urllib

该库主要包含四部分:

urllib

模块 说明
urllib.request 最基本的HTTP请求模块,主要提供打开以及读取 URL功能,可以用来模拟http发送请求
urllib.error 异常处理模块,可以捕获reuqest中出现的异常信息
urllib.parse 解析URL,主要提供URL解析处理方法
urllib.robotparser

解析robots.txt文件

robots协议为网络爬虫排除标准(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。主要是告诉蜘蛛程序在服务器上什么文件是可以被查看的。

urllib.request.urlopen

urllib.request为 打开 URL一系列扩展功能,主要是定义了一系列的函数和classes 用于提供打开URL相关功能,该模块中最主要的功能就是urlopen

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

参数:

url: 【必须】为将要打开的url地址,可以是字符串 或者Request object

data: 【可选】为发送到server额外信息,必须为object,当前只有HTTP request可以使用data,其data object types包括bytes, file-linke object 和 interbales。对于HTTP POST ,data必须符合application/x-www-form-urlencoded 格式,如果使用此参数,则http请求为POST方式,不再是GET方式

timeout:【可选】为请求链接等待超时时间,仅对HTTP, HTTPS和FTP有效

cafile 和 capath【可选】为 HTTP请求 CA认证参数

context:【可选】如果要使用必须为ssl.SSLContext实例创建

返回值:

请求类型 返回值
HTTP and HTTPS URLs http.client.HTTPResponse

FTP,

file,

data URLs and requests explicitly handled by legacy URLopener and FancyURLopener

urllib.response.addinfourl
protocol errors. URLError

不管是上述返回值是哪种,都可以调以下方法:

Method Description
geturl() 获取URL
info()

获取网页meta-information信息

以email.message_from_string()实例的形式返回页面的元信息,例如请求头(请参阅 HTTP请求头的快速参考)

getcode() 返回响应的HTTP状态代码

使用范例:

import urllib.requestresponse=urllib.request.urlopen('https://www.python.org')
print(response.geturl())
print(response.info()))
print(response.getcode())

运行结果:

urllib.request函数

urllib.request模块中定义的函数功能列表如下:

Function 描述

urllib.request.urlopen

(urldata=None, [timeout, ]*cafile=Nonecapath=Nonecadefault=Falsecontext=None)

打开一个url,并建立连接
urllib.request.install_opener(opener) 安装自定义opener
urllib.request.build_opener([handler...]) 创建支持处理HTTP请求的opener对象
urllib.request.pathname2url(path) 将路径名(path)从路径的本地语法转换为URL路径组件中使用的形式。这不会产生完整的URL。返回值已使用quote()函数进行url编码。
urllib.request.url2pathname(path) 将路径组件路径从百分比编码的URL 转换为路径的本地语法。这不接受完整的URL。此函数用于 unquote()解码路径。
urllib.request.getproxies() 此帮助函数返回代理服务器URL映射的方案(scheme)字典。它首先扫描操作系统环境变量中的<scheme>_proxy变量(不区分大小写),当它找不到时,从Mac OSX系统配置和Windows系统注册表中查找代理信息。如果小写和大写环境变量都存在(并且不一致),则首选小写。

除了urlopen以外,其他都是一些高级功能,后面再介绍使用方法。

HTTPResponse

HTTPResponse为urlopen的返回对象,在后续操作中经常用到,比如抓取打开的网页中的内容等待,主要方法如下:

Function Description
HTTPResponse.read([amt]) 返回回应的内容
HTTPResponse.readinto(b) 读取到返回的内容到b buffer中,返回值为读到的字节数目
HTTPResponse.getheader(namedefault=None) 返回 头部 name的值
HTTPResponse.getheaders() 获取到(header, value)组成的元组
HTTPResponse.fileno() 返回基础套接字
HTTPResponse.msg 一个http.client.HTTPMessage实例,包括响应的头部,又是email.message.Message.子类
HTTPResponse.version 返回server使用到的 HTTP protocol version
HTTPResponse.status server状态
HTTPResponse.reason 服务器返回的原因
HTTPResponse.debuglevel debug 级别
HTTPResponse.closed 如果是True,则stream被关闭

使用例子:

HTTPResponse.getheader()可以获取到服务器返回的头部信息中header对应的值,比如以下例子:

import urllib.requestresponse = urllib.request.urlopen("https://www.baidu.com/")
print(type(response))
print(response.status)
print(response.getheaders())
#获取头部信息中server对应的值
print(response.getheader('Server'))
#获取头部信息中Cache-Control对应的值
print("Cache-Control: ",response.getheader('Cache-Control'))

运行结果:

获取用到的http协议版本HTTPResponse.version

import urllib.requestresponse = urllib.request.urlopen("https://www.baidu.com/")
#print(type(response))
#print(response.status)
#print(response.getheaders())
#print(response.getheader('Server'))
#print("Cache-Control: ",response.getheader('Cache-Control'))
print(response.version)

运行结果:

参考资料

https://docs.python.org/3/search.html?q=urllib

笨方法“学习python笔记之urlopen相关推荐

  1. 笨方法“学习python笔记之print()函数end

    在<"笨方法"学习python>中的第7个习题中的用例代码中有print()函数的end用例 代码如下: end1 = "C" end2 = &qu ...

  2. 笨方法“学习python笔记之输入

    Python程序输入和其他语言一样,主要有三种方式 1:常用的 使用input()函数,作为程序的输入 例子就采用<"笨方法"学python>中的第·12个习题作为例子 ...

  3. “笨方法”学习Python笔记(1)-Windows下的准备

    Python入门书籍 来自于开源中国微信公众号推荐的一篇文章 全民Python时代,豆瓣高级工程师告诉你 Python 怎么学 问:请问你目前最好的入门书是那本?有没有和PHP或者其他语言对比讲Pyt ...

  4. 笨方法“学习python笔记之元组(tuple)

    Tuple(元组)是python的基本序列三种类型之一(另外两种是List, Range),是"笨方法"学python3中没有讲到的数据类型,因此专门查了下官方资料,中可以查找到对 ...

  5. 笨方法“学习python笔记之字典

    列表是线性存储,且可以随机访问,且是有序的,其访问可以通过索引来访问.而字典是另外一种存储数据,可以通过建立键和值的映射关系,就和查字典差不多,通过键就可以查找到相对应的值 字典创建 字典创建过程中每 ...

  6. 笨方法“学习python笔记之字符串

    字符串(str)是python的一种重要的数据格式,官方文档中对字符串的解释为一种文本序列格式,其内容不可修改(有点类似元组),官方解释如下: 字符串表示 可以看到官方文档里面,给出了字符串的三种表示 ...

  7. 笨方法“学习python笔记之列表

    列表是python 的基本数据结构,是一堆数据的集合,类似于其他语言的数组一样,每个列表成员都有一个索引,以便于进行访问. 列表创建 列表创建比较简单,每个列表成员使用逗号进行分开,例如如下: com ...

  8. 笨方法“学习python笔记之文件操作

    python 与其他语言相比,操作文件非常方便,提供了良好的API. Open函数 python是以文件对象的方式来操作文件,操作文件之前首先要打开文件产生一个文件对象,以便进行后续操作. open( ...

  9. 笨方法“学习python笔记之print换行

    python中 print()函数打印换行有几种 方法: 1:第一种方法是使用多个print打印,多个print默认换行 例子 print("Hello world") print ...

最新文章

  1. php每分钟刷新一次的验证码,php如何在进入页面的时候自动刷新一次验证码
  2. To handle Unhandled Exception
  3. 【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态库文件操作 | 注入动态库 加载 业务动态库 | 业务动态库启动 | pthread_create 线程开发 )
  4. 对学校的希望和寄语_新年元旦寄语【三篇】
  5. 【小白学习PyTorch教程】七、基于乳腺癌数据集​​构建Logistic 二分类模型
  6. 为什么“极大似然估计表达式的极值”可以用来估计参数
  7. php之快速入门学习-9(switch)
  8. 作者:程学旗,男,中国科学院计算技术研究所研究员、博士生导师,中国科学院“网络数据科学与技术”重点实验室主任。...
  9. STM32F427 主频超过140M 死机
  10. 7款应用最广泛的Linux桌面环境盘点
  11. 网友神总结:我们继续用 XP 的十大理由
  12. VC6.0内存泄露检测工具
  13. 周五送码 | MS08067实验室攻防平台
  14. 2015-nature-deep learning-LeCun, Bengio and Hinton
  15. FIB常见应用明细及原理分析
  16. Intel早期的CPU和现在MCU相比,表现如何?
  17. dest在C语言什么作用,目前最全面的dest答疑问题及相关回答
  18. 软件工程大一学年简单的总结一下
  19. 对小学语文教学的几点心得体会
  20. 第十届蓝桥杯JavaB组省赛真题

热门文章

  1. linux下使用free命令查看实际内存占用(可用内存)
  2. 第三章 对象与JSON
  3. 分布式系统中,权限设计实践
  4. USB口的红外条形码扫描器的另类使用
  5. Java高效入门方法_萝魏紫
  6. Pyqt 中__init__(self,parent==None) parent理解
  7. Java NIO原理图文分析及代码实现
  8. openstack-keystone简记
  9. ZZULIOJ 1074:百钱买百鸡
  10. 去除linux 文件中的控制字符,Shell乱码文件中的控制字符处理