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模块学习 datetime介绍
Aug 27 Python
状态机的概念和在Python下使用状态机的教程
Apr 11 Python
Python可变参数函数用法实例
Jul 07 Python
python实现基本进制转换的方法
Jul 11 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
python 字符串转列表 list 出现\ufeff的解决方法
Jun 22 Python
实用自动化运维Python脚本分享
Jun 04 Python
Linux CentOS Python开发环境搭建教程
Nov 28 Python
python操作文件的参数整理
Jun 11 Python
Python 使用 prettytable 库打印表格美化输出功能
Dec 26 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
python等待10秒执行下一命令的方法
Jul 19 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
php json相关函数用法示例
2017/03/28 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
三方合作协议书范本
2014/04/18 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
公司聚餐通知
2015/04/22 职场文书
业务员管理制度范本
2015/08/06 职场文书
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫