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中使用异步Socket编程性能测试
Jun 25 Python
Python Tkinter GUI编程入门介绍
Mar 10 Python
Python计算字符宽度的方法
Jun 14 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
python求平均数、方差、中位数的例子
Aug 22 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
May 11 Python
在keras下实现多个模型的融合方式
May 23 Python
Python实现画图软件功能方法详解
Jul 28 Python
pandas中对文本类型数据的处理小结
Nov 01 Python
django 认证类配置实现
Nov 11 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 无法载入mysql扩展
2010/03/12 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
js对数字的格式化使用说明
2011/01/12 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
vue中的scope使用详解
2017/10/29 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
Python写的贪吃蛇游戏例子
2014/06/16 Python
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
初步讲解Python中的元组概念
2015/05/21 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
Django之腾讯云短信的实现
2020/06/12 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
物业管理应届生求职信
2013/10/28 职场文书
捐款活动总结
2014/08/27 职场文书
工伤事故证明
2014/10/20 职场文书
小学生差生评语
2014/12/29 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
中秋节祝酒词
2015/08/12 职场文书