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操作oracle的完整教程分享
Jan 30 Python
Python 实现12306登录功能实例代码
Feb 09 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 Python
详解python运行三种方式
May 13 Python
200行python代码实现2048游戏
Jul 17 Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 Python
selenium与xpath之获取指定位置的元素的实现
Jan 26 Python
python 统计代码耗时的几种方法分享
Apr 02 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 daodb插入、更新与删除数据
2009/03/19 PHP
php生成扇形比例图实例
2013/11/06 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
jquery获取复选框被选中的值
2014/03/22 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
详解Python进程间通信之命名管道
2017/08/28 Python
python hook监听事件详解
2018/10/25 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
python中pop()函数的语法与实例
2020/12/01 Python
如何用PHP实现邮件发送
2012/12/26 面试题
招聘与培训专员岗位职责
2014/01/30 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
遗嘱公证书标准样本
2014/04/08 职场文书
环境科学专业求职信
2014/08/04 职场文书
装修安全责任协议书
2016/03/22 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
用Python生成会跳舞的美女
2022/01/18 Python
你知道Java Spring的两种事务吗
2022/03/16 Java/Android