笨方法“学习python笔记之urlopen
最近在学习“笨方法”学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协议为网络爬虫排除标准(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 |
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 | 描述 |
(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=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 (name, default=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相关推荐
- 笨方法“学习python笔记之print()函数end
在<"笨方法"学习python>中的第7个习题中的用例代码中有print()函数的end用例 代码如下: end1 = "C" end2 = &qu ...
- 笨方法“学习python笔记之输入
Python程序输入和其他语言一样,主要有三种方式 1:常用的 使用input()函数,作为程序的输入 例子就采用<"笨方法"学python>中的第·12个习题作为例子 ...
- “笨方法”学习Python笔记(1)-Windows下的准备
Python入门书籍 来自于开源中国微信公众号推荐的一篇文章 全民Python时代,豆瓣高级工程师告诉你 Python 怎么学 问:请问你目前最好的入门书是那本?有没有和PHP或者其他语言对比讲Pyt ...
- 笨方法“学习python笔记之元组(tuple)
Tuple(元组)是python的基本序列三种类型之一(另外两种是List, Range),是"笨方法"学python3中没有讲到的数据类型,因此专门查了下官方资料,中可以查找到对 ...
- 笨方法“学习python笔记之字典
列表是线性存储,且可以随机访问,且是有序的,其访问可以通过索引来访问.而字典是另外一种存储数据,可以通过建立键和值的映射关系,就和查字典差不多,通过键就可以查找到相对应的值 字典创建 字典创建过程中每 ...
- 笨方法“学习python笔记之字符串
字符串(str)是python的一种重要的数据格式,官方文档中对字符串的解释为一种文本序列格式,其内容不可修改(有点类似元组),官方解释如下: 字符串表示 可以看到官方文档里面,给出了字符串的三种表示 ...
- 笨方法“学习python笔记之列表
列表是python 的基本数据结构,是一堆数据的集合,类似于其他语言的数组一样,每个列表成员都有一个索引,以便于进行访问. 列表创建 列表创建比较简单,每个列表成员使用逗号进行分开,例如如下: com ...
- 笨方法“学习python笔记之文件操作
python 与其他语言相比,操作文件非常方便,提供了良好的API. Open函数 python是以文件对象的方式来操作文件,操作文件之前首先要打开文件产生一个文件对象,以便进行后续操作. open( ...
- 笨方法“学习python笔记之print换行
python中 print()函数打印换行有几种 方法: 1:第一种方法是使用多个print打印,多个print默认换行 例子 print("Hello world") print ...
最新文章
- php每分钟刷新一次的验证码,php如何在进入页面的时候自动刷新一次验证码
- To handle Unhandled Exception
- 【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态库文件操作 | 注入动态库 加载 业务动态库 | 业务动态库启动 | pthread_create 线程开发 )
- 对学校的希望和寄语_新年元旦寄语【三篇】
- 【小白学习PyTorch教程】七、基于乳腺癌数据集​​构建Logistic 二分类模型
- 为什么“极大似然估计表达式的极值”可以用来估计参数
- php之快速入门学习-9(switch)
- 作者:程学旗,男,中国科学院计算技术研究所研究员、博士生导师,中国科学院“网络数据科学与技术”重点实验室主任。...
- STM32F427 主频超过140M 死机
- 7款应用最广泛的Linux桌面环境盘点
- 网友神总结:我们继续用 XP 的十大理由
- VC6.0内存泄露检测工具
- 周五送码 | MS08067实验室攻防平台
- 2015-nature-deep learning-LeCun, Bengio and Hinton
- FIB常见应用明细及原理分析
- Intel早期的CPU和现在MCU相比,表现如何?
- dest在C语言什么作用,目前最全面的dest答疑问题及相关回答
- 软件工程大一学年简单的总结一下
- 对小学语文教学的几点心得体会
- 第十届蓝桥杯JavaB组省赛真题
热门文章
- linux下使用free命令查看实际内存占用(可用内存)
- 第三章 对象与JSON
- 分布式系统中,权限设计实践
- USB口的红外条形码扫描器的另类使用
- Java高效入门方法_萝魏紫
- Pyqt 中__init__(self,parent==None) parent理解
- Java NIO原理图文分析及代码实现
- openstack-keystone简记
- ZZULIOJ 1074:百钱买百鸡
- 去除linux 文件中的控制字符,Shell乱码文件中的控制字符处理