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数据结构链表之单向链表(实例讲解)
Jul 25 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
详解Python如何生成词云的方法
Jun 01 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
python3+selenium自动化测试框架详解
Mar 17 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
Jan 04 Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 Python
python能在浏览器能运行吗
Jun 17 Python
openCV提取图像中的矩形区域
Jul 21 Python
pycharm永久激活超详细教程
Oct 29 Python
Python中logging日志的四个等级和使用
Nov 17 Python
手残删除python之后的补救方法
Jun 26 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
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
JS 显示当前日期与时间的代码
2010/03/24 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
[01:04:05]VG vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
python中sys.argv函数精简概括
2018/07/08 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
Java里面如何创建一个内部类的实例
2015/01/19 面试题
捐书寄语赠言
2014/01/18 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
岗位工作说明书
2014/07/29 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
利用Python实现Picgo图床工具
2021/11/23 Python