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网页请求urllib2模块简单封装代码
Feb 07 Python
探索Python3.4中新引入的asyncio模块
Apr 08 Python
python获取list下标及其值的简单方法
Sep 12 Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
python模块之time模块(实例讲解)
Sep 13 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
OpenCV+Python识别车牌和字符分割的实现
Jan 31 Python
python正则-re的用法详解
Jul 28 Python
Python 实现Image和Ndarray互相转换
Feb 19 Python
python超详细实现完整学生成绩管理系统
Mar 17 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 基于文件头的文件类型验证类函数
2012/05/01 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python 调用Java实例详解
2017/06/02 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python对wav文件的重采样实例
2020/02/25 Python
python 串行执行和并行执行实例
2020/04/30 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
护理自荐信
2013/10/22 职场文书
测绘工程个人的自我评价
2013/11/23 职场文书
网络工程师职业规划
2014/02/10 职场文书
职代会闭幕词
2015/01/28 职场文书