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 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
Python中用memcached来减少数据库查询次数的教程
Apr 07 Python
Python查找函数f(x)=0根的解决方法
May 07 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
python如何重载模块实例解析
Jan 25 Python
Python遍历numpy数组的实例
Apr 04 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
Python hashlib模块加密过程解析
Nov 05 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
Jan 08 Python
Python tkinter模版代码实例
Feb 05 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
PHP 图像尺寸调整代码
2010/05/26 PHP
深入PHP变量存储的详解
2013/06/13 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
jquery时间下拉框小例子
2013/04/15 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
面试常见的js算法题
2017/03/23 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
python中使用PIL制作并验证图片验证码
2018/03/15 Python
Pandas标记删除重复记录的方法
2018/04/08 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
详解python持久化文件读写
2019/04/06 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
商场消防管理制度
2014/01/12 职场文书
运动会表扬稿大全
2014/01/16 职场文书
小学教师寄语大全
2014/04/03 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
社区重阳节活动总结
2015/03/24 职场文书