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实现保存网页到本地示例
Mar 16 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
python关键字and和or用法实例
May 28 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
Jun 29 Python
django使用html模板减少代码代码解析
Dec 12 Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 Python
python实现按长宽比缩放图片
Jun 07 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
python列表list保留顺序去重的实例
Dec 14 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
Python序列化模块JSON与Pickle
Jun 05 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程序员工具
2008/05/26 PHP
PHP关联链接常用代码
2012/11/05 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
ES6字符串的扩展实例
2020/12/21 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
一个精品风格的世界:Atterley
2019/05/01 全球购物
会计学个人自荐信模板
2013/12/13 职场文书
微笑服务标语
2014/06/24 职场文书
岗位职责说明书模板
2014/07/30 职场文书
预备党员入党感想
2015/08/10 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书