urllib urllib2学习笔记
Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。他们两个最显着的差异如下:
- urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接收一个URL。这意味着,你不能伪装你的用户代理字符串等。
- urllib模块可以提供进行urlencode的方法,该方法用于GET查询字符串的生成,urllib2的不具有这样的功能。这就是urllib与urllib2经常在一起使用的原因。
urllib
1、urllib.urlopen(url, data=None, proxies=None, context=None)方法
打开一个url的方法,返回一个对象,可以类似文件对象的操作来读取数据
import urllib
f = urllib.urlopen("https://www.cnblogs.com/")
print f.readline()
#<!DOCTYPE html>
urlopen返回对象提供方法:
- read() , readline() ,readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样
- info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息
- getcode():返回Http状态码。如果是http请求,200请求成功完成;404网址未找到
- geturl():返回请求的url
2、urllib.urlretrieve(url, filename=None, reporthook=None, data=None, context=None)方法
urlretrieve方法将url定位到的html文件下载到你本地的硬盘中。如果不指定filename,则会存为临时文件。
urlretrieve()返回一个二元组(filename,httplib.HTTPMessage)
f = urllib.urlretrieve("https://www.cnblogs.com/")
print f
('d:\\temp\\tmp7_mted', <httplib.HTTPMessage instance at 0x01B8F030>)
第一个元素是保存的文件路径,第二个元素是httplib.HTTPMessage对象,跟urlopen.info()方法一样,保存的是远端服务器返回的头信息。
指定保存的文件
f = urllib.urlretrieve("https://www.cnblogs.com/", filename='cnblog.html')
print f
('cnblog.html', <httplib.HTTPMessage instance at 0x01D8B030>)
3、urllib.urlcleanup()
清除由于urllib.urlretrieve()所产生的缓存
4、urllib.quote(str)
对或取的数据进行编码,从而符合URI协议,使其能被web服务器接受。
f1 = urllib.quote("https://www.cnblogs.com/", safe='/')
print f1
#https%3A//www.cnblogs.com/
safe可以指定不需要编码的字符,可以以字符串的形式设置,例:safe=‘:/’,这样将不会对:/进行编码,默认不对 / 编码
5、urllib.quote_plus(str)
此函数是对请求中的url拼接的参数中的空格替换为+,这个我们很常见到,提交带空格的参数时,将看到空格都变成了+
f2 = urllib.quote_plus(' ', safe='/')
print f2
+
也看到有safe吧,学习了quote,可能会想到这个也是个安全字符设定,对设定的字符不做编码??
是的,quote_plus这个其实实在quote上做了拓展,查看源码就知道了
def quote_plus(s, safe=''):
"""Quote the query fragment of a URL; replacing ' ' with '+'"""
if ' ' in s:
s = quote(s, safe + ' ')
return s.replace(' ', '+')
return quote(s, safe)
其实调用了quote()方法,safe这个是给quote用的,默认是不对空格做编码的。
有编码,那就肯定有解码了,解码方法对应的是:urllib.unquote(str)、urllib.unquote_plus(str)
6、urllib.urlencode()
将URL中的键值对以连接符&划分,并把空格编码为+
查询参数
data = {'name': 'aa bb', 'lover':'ccc'}
params = urllib.urlencode(data)
print params
#name=aa+bb&lover=ccc
f = urllib.urlopen('https://www.cnblogs.com?{}'.format(params))
urlencode方法会调用quote_plus,把空格编码为+
请求体中参数
data = {'name': 'aa bb', 'lover':'ccc'}
params = urllib.urlencode(data)
print params
#name=aa+bb&lover=ccc
f = urllib.urlopen('https://www.cnblogs.com/', date=params)
urllib2
1、urllib2.urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,cafile=None, capath=None, cadefault=False, context=None)
跟urllib差不多,也是返回一个对象,次对象操作方式跟文件对象类似
f2 = urllib2.urlopen("https://www.cnblogs.com/")
html = f2.read()
print html
2、urllib2.Request(url, data=None, headers={},origin_req_host=None, unverifiable=False)
urllib2可以创建个request对象,构造一个完成的request对象,数据、请求头信息等都可以做设定
data = {'name': 'aa bb', 'lover':'ccc'}
params = urllib.urlencode(data)
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; … Gecko/20100101 Firefox/54.0'}
req = urllib2.Request("https://www.cnblogs.com/",data=params, headers=headers)
req.add_data(urllib.urlencode({'age': 100, 'like': 'h'}))#重新设定提交的参数,会覆盖之前设定的
req.add_header('Host', '127.0.0.1')#添加请求头信息
print req.headers
print req.data
response = urllib2.urlopen(req)
print response.readline()
urllib urllib2学习笔记的更多相关文章
- Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ...
- python 学习笔记之手把手讲解如何使用原生的 urllib 发送网络请求
urllib.urlopen(url[,data[,proxies]]) : https://docs.python.org/2/library/urllib.html python 中默认自带的网络 ...
- python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容
python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...
- python3.4学习笔记(四) 3.x和2.x的区别,持续更新
python3.4学习笔记(四) 3.x和2.x的区别 在2.x中:print html,3.x中必须改成:print(html) import urllib2ImportError: No modu ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- Requests:Python HTTP Module学习笔记(一)(转)
Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...
- python urllib基础学习
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #使用python创建一个简单的WEB客户端 import urll ...
随机推荐
- DeepFaceLab参数详解之FPS与Image format
DeepFaceLab参数详解之FPS与Image format , 本文讲解两个非常简单的参数,也是大家玩这个软件最先接触到的.参数虽然非常的简单,但是非常有用,适当调整可以为你节省大量硬盘空间,大 ...
- redis源码分析之数据结构--dictionary
本文不讲hash算法,而主要是分析redis中的dict数据结构的特性--分步rehash. 首先看下数据结构:dict代表数据字典,每个数据字典有两个哈希表dictht,哈希表采用链式存储. typ ...
- 关于springmvc的一些注解详解
引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没有加任何注解),查看了提交方式为applicatio ...
- 因修改/etc/ssh权限导致的ssh不能连接异常解决方法
因修改/etc/ssh权限导致的ssh不能连接异常解决方法 现象: $ssh XXX@192.168.5.21 出现以下问题 Read from socket failed: Connection r ...
- MySQL 树形结构 根据指定节点 获取其所有父节点序列
背景说明 需求:MySQL树形结构, 根据指定的节点,获取其所有父节点序列. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合进行逻辑处理,获取父节点. 2.直接自定义MySQL函数 ...
- ffmpeg 视频过度滤镜 gltransition
ffmpeg 视频过度滤镜 gltransition 上次随笔中提到的 ffmpeg-concat 可以处理视频过度,但是缺点是临时文件超大. 经过查找 ffmpeg 还有 gltransition ...
- SAS数据挖掘实战篇【七】
SAS数据挖掘实战篇[七] 6.5 SAS EM数据挖掘-----预测模型 1 问题定义 目标:建立模型预测贷款申请的信用状态,选择最优的模型来预测和减少损失. 数据集:SAMPSIO.DMAGE ...
- 函数对象的apply()和call()方法
每个函数都包含两个非继承而来的方法:apply()和call().这两个方法的用途都是在特定的作用域中调用函数,特定的作用域为this参数指定的对象. apply()和call()真正强大的地方是能够 ...
- mysql——单表查询——聚合函数——概念
使用聚合函数查询 group by关键字通常和聚合函数一起使用 .count()函数 count()函数用来统计记录的条数 举例:使用count()函数统计employee表的记录数 select c ...
- MSF魔鬼训练营第一章 初识Metasploit
1.1.4渗透测试过程环节 PTES标准7个阶段 1.前期交互阶段 收集客户需求.准备测试计划.定义测试范围与边界.定义业务目标.项目管理与规划等 2.情报搜集阶段 公开来源信息查 ...