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最基本的操作字典的方法
Apr 24 Python
python实现汉诺塔方法汇总
Jul 25 Python
Python数据结构之单链表详解
Sep 12 Python
TensorFlow实现AutoEncoder自编码器
Mar 09 Python
Python实现的凯撒密码算法示例
Apr 12 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
Python中使用gflags实例及原理解析
Dec 13 Python
Python timeit模块的使用实践
Jan 13 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
python中super()函数的理解与基本使用
Aug 30 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相关资料
2006/10/09 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
PHP生成条形图的方法
2014/12/10 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
node文件上传功能简易实现代码
2017/06/16 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
python实现SOM算法
2018/02/23 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
基于python实现从尾到头打印链表
2019/11/02 Python
django model object序列化实例
2020/03/13 Python
python如何实现DES加密
2020/09/21 Python
集世界奢侈品和设计师品牌的意大利精品买手店:Tessabit
2019/08/17 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
奠基仪式主持词
2014/03/20 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
晚会闭幕词
2015/01/28 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python