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中break语句的用法
May 14 Python
Python中的localtime()方法使用详解
May 22 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
Python中函数参数匹配模型详解
Jun 09 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
Djang的model创建的字段和参数详解
Jul 27 Python
python自动化unittest yaml使用过程解析
Feb 03 Python
python ssh 执行shell命令的示例
Sep 29 Python
python tqdm实现进度条的示例代码
Nov 10 Python
使用Python封装excel操作指南
Jan 29 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
如何使用动态共享对象的模式来安装PHP
2006/10/09 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
python实现一次创建多级目录的方法
2015/05/15 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
Flask-WTF表单的使用方法
2019/07/12 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
汽车专业毕业生推荐信
2013/11/12 职场文书
公司培训心得体会
2014/01/03 职场文书
出生公证书样本
2014/04/04 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
文言文辞职信
2015/02/28 职场文书
试用期辞职信范文
2015/03/02 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
商标侵权律师函
2015/05/27 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
Java使用jmeter进行压力测试
2021/07/09 Java/Android
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技