Python urllib2运行过程原理解析


Posted in Python onJune 04, 2020

1.urlopen函数

urllib2.urlopen(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]])

注:

url表示目标网页地址,可以是字符串,也可以是请求对象Request

req= urllib2.Request(url, data,headers) response = urllib2.urlopen(req,timeout=3)

data表示post方式提交给目标服务器的参数

data = urllib.urlencode(data)

import urllib,urllib2 
action_url="http://www.xxxxxx.com/post"#用于测试post的网址,返回提交的数据 
values={'name':"alice",'age':20} 
data=urllib.urlencode(values)#对表单数据编码 
rqst=urllib2.Request(action_url,data) 
response=urllib2.urlopen(rqst)#模拟提交表单数据到url并获得响应

timeout表示超时时间设置。

返回值

  • response.read()返回页面内容
  • response.info()返回网页信息
  • response.geturl()返回连接地址

这个函数可以像urllib.urlopen()那样以url做参数。也能以Request实例为参数,即用一个Request对象(下文构造方法)来映射你提出的HTTP请求,在它最简单的使用形式中你将用你要请求的地址创建一个Request对象,这个Request对象中可以设置传输数据、headers等。通过调用urlopen并传入Request对象,将返回一个file-like对象。urllib2还提供了接口来处理一般情况,例如:基础验证,cookies,代理和其他,它们通过handlers和openers的对象实现。

2、Request函数

urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])

用于构造Request对象,可以传递data数据,添加请求头(headers)等,构造好后作为urllib2.urlopen()的参数。

注:

url表示目标网页地址,可以是字符串,也可以是请求对象Request

data表示post方式提交给目标服务器的参数

headers表示用户标识,是一个字典类型的数据,有些不允许脚本的抓取,所以需要用户代理,像火狐浏览器的代理就是类似:

Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11

浏览器的标准UA格式为:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息 ,headers默认是

Python-urllib/2.6

origin_req_host表示请求方的主机域名或者ip地址。

headers = {'User-Agent':'Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11'}

import urllib  
import urllib2  
url = 'http://www.weibo.cn/'  
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
h = { 'User-Agent' : user_agent }  
req = urllib2.Request(url,headers=h)  
response = urllib2.urlopen(req)  
print response.read()

3、build_opener()

build_opener([handler1 [ handler2, ... ]])

urllib2.urlopen()函数不支持验证、cookie或者其它HTTP高级功能。要支持这些功能,必须使用build_opener()函数创建自定义Opener对象。

参数handler是Handler实例,常用的有HTTPBasicAuthHandler、HTTPCookieProcessor、ProxyHandler等。
build_opener ()返回的对象具有open()方法,与urlopen()函数的功能相同。

如果要修改http报头,可以用:

import urllib2 
opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
opener.open('http://www.example.com/')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python冒泡排序注意要点实例详解
Sep 09 Python
基于Python socket的端口扫描程序实例代码
Feb 09 Python
tensorflow入门之训练简单的神经网络方法
Feb 26 Python
python 美化输出信息的实例
Oct 15 Python
python安装requests库的实例代码
Jun 25 Python
Python实现计算对象的内存大小示例
Jul 10 Python
DJango的创建和使用详解(默认数据库sqlite3)
Nov 18 Python
python 读取更新中的log 或其它文本方式
Dec 24 Python
Python如何使用内置库matplotlib绘制折线图
Feb 24 Python
Python 合并拼接字符串的方法
Jul 28 Python
如何在python中实现ECDSA你知道吗
Nov 23 Python
python运算符之与用户交互
Apr 13 Python
Python如何生成xml文件
Jun 04 #Python
基于python代码批量处理图片resize
Jun 04 #Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 #Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 #Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Jun 04 #Python
解决python图像处理图像赋值后变为白色的问题
Jun 04 #Python
Python爬虫JSON及JSONPath运行原理详解
Jun 04 #Python
You might like
php mssql 分页SQL语句优化 持续影响
2009/04/26 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
PHP时间函数使用详解
2019/03/21 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
动态创建类实例代码
2009/10/07 Python
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
Python实现简单的2048小游戏
2021/03/01 Python
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
C#中的验证控件有几种
2014/03/08 面试题
正规欠条模板
2015/07/03 职场文书