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 相关文章推荐
详解python3中zipfile模块用法
Jun 18 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
python多任务及返回值的处理方法
Jan 22 Python
python多线程抽象编程模型详解
Mar 20 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
Django rstful登陆认证并检查session是否过期代码实例
Aug 13 Python
python word转pdf代码实例
Aug 16 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
Python socket服务常用操作代码实例
Jun 22 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 Python
python中温度单位转换的实例方法
Dec 27 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中生成随机密码的自定义函数代码
2013/10/21 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
php简单复制文件的方法
2016/05/09 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
vue如何判断dom的class
2018/04/26 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
python构建基础的爬虫教学
2018/12/23 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
Python2与Python3关于字符串编码处理的差别总结
2020/09/07 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
Structs界面控制层技术
2013/10/11 面试题
社区工作者先进事迹
2014/01/18 职场文书
通信生自我鉴定
2014/01/18 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
预备党员承诺书
2014/03/25 职场文书
环保口号大全
2014/06/12 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
立志成才演讲稿
2014/09/04 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
活动简报范文
2015/07/22 职场文书