【python】urllib2
urllib2.urlopen(url[, data][, timeout])
请求url,获得请求数据,url参数可以是个String,也可以是个Request参数
没有data参数时为GET请求,设置data参数时为POST请求,另外data格式必须为application/x-www-form-urlencoded,urllib.urlencode()能够设置请求参数的编码,data是字典,需要经urllib.urlencode()编码
timeout设置请求阻塞的超时时间,如果没有设置的话,会使用全局默认timeout参数;该参数只对HTTP、HTTPS、FTP生效
This function returns a file-like object with three additional methods:
- geturl() — return the URL of the resource retrieved, commonly used to determine if a redirect was followed
- info() — return the meta-information of the page, such as headers, in the form of an mimetools.Message instance (see Quick Reference to HTTP Headers)
- getcode() — return the HTTP status code of the response
class OpenerDirector
管理一系列的Handler,这些handler都有自己的功能实现和协议,后面会提到大量的Handler功能
urllib2.build_opener([handler, ...])
返回OpenerDirector实例,实现了BaseHandler都可以生成Handler实例。Python已经内建许多的Handler,你可以替换或者添加新的Handler。
内建Handler如下:
ProxyHandler:处理代理操作
UnknownHandler:Raise URLError异常
HTTPHandler:处理HTTP的GET和POST操作
HTTPDefaultErrorHandler:处理HTTP Error的通用处理,所有的响应都会抛出HTTPError异常
HTTPRedirectHandler:处理HTTP重定向操作,如301、302、303等和HEAD请求的307都会执行重定向操作
FTPHandler:处理FTP操作
FileHandler:处理文件
HTTPErrorProcessor:处理非200异常
除去上面这些Handler,urllib2还有一些其它的Handler可供选择,这些Handler都能根据名称知晓其功能,不细作解释,包括但不仅限于:
HTTPCookieProcessor:处理cookie
HTTPBasicAuthHandler:处理Auth
ProxyBasicAuthHandler:处理Proxy和Auth
HTTPDigestAuthHandler:处理DigestAuth
ProxyDigestAuthHandler:处理ProxyDigest
HTTPSHandler:处理HTTPS请求
CacheFTPHandler:比FTPHandler多点功能。
- urllib2对于opener的使用:
urllib2.install_opener(opener)
定义全局的OpenerDirector,如果执行这个方法,会把自己定义的Handler用在后续的URL处理上。
class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
url和data的内容和前面的一致,添加了headers的信息,header的内容可以参考http://isilic.iteye.com/blog/1801072
origin_req_host应该是请求的服务器Host地址,unverifiable参数表明请求是否可验证
基本用法:
1)
import urllib2
f = urllib2.urlopen('http://www.python.org/')
print f.read(100)
2)
import urllib2
req = urllib2.Request(url='https://localhost/cgi-bin/test.cgi',data='Committed Data')
f = urllib2.urlopen(req)
print f.read()
3)
import urllib
import urllib2
url = 'http://www.server.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'Michael','language' : 'Python' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
f = urllib2.urlopen(req)
print f.read()
Proxy的使用相当广泛,对于单个应用来说,爬虫是很容易被封禁,如果使用Proxy模式,就能降低被封的风险,所以有需求的同学需要仔细看下Python urllib2对于Proxy的使用:
import urllib2
proxy_handler = urllib2.ProxyHandler({'http': '127.0.0.1:80'}) //使用本机80端口的代理访问谷歌的内容
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
f = urllib2.urlopen('http://www.google.com')
print f.read()
注意这个Proxy会将proxy_handler作为全局的ProxyHandler,这个未必是我们需要的,如果我们需要使用不同的Proxy,这个设置就有问题,需要修改为以下Proxy使用方式:
import urllib2
proxy_handler = urllib2.ProxyHandler({'http': '127.0.0.1:80'})
opener = urllib2.build_opener(proxy_handler)
f = opener.open(url)
print f.read()
使用多个代理:
import urllib2
proxyList=('211.167.112.14:80',
'210.32.34.115:8080',
'115.47.8.39:80',
'211.151.181.41:80',
'219.239.26.23:80'
)
for proxy in proxyList:
proxies={"":proxy}
proxy_handler=urllib2.ProxyHandler(proxies)
opener=urllib2.build_opener(proxy_handler)
f=opener.open("http://www.cc98.org")
print f.read()
对于cookie的处理也是有Handler自动处理的:因为 HTTP 协议是一个无状态(Stateless)的协议,服务器如何知道当前请求连接的用户是否已经登陆了呢?有两种方式: 1.在URI 中显式地使用 Session ID;
2.利用 Cookie,大概过程是登陆一个网站后会在本地保留一个 Cookie,当继续浏览这个网站的时候,浏览器会把 Cookie 连同地址请求一起发送过去。
import urllib2
import cookielib
cookies = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
response = opener.open('http://www.google.com')
for cookie in cookies:
if cookie.name == 'cookie_spec':
print cookie.value
处理cookie时一般是cookielib和HTTPCookieProcessor一起使用,HTTPCookieProcessor为handler。
cookielib模块定义了自动处理HTTP cookies的类,用来访问那些需要cookie数据的网站,cookielib模块包括 CookieJar,FileCookieJar,CookiePolicy,DefaultCookiePolicy,Cookie及 FileCookieJar的子类MozillaCookieJar和LWPCookieJar,CookieJar对象可以管理HTTP cookies,将cookie添加到http请求中,并能从http响应中得到cookie,FileCookieJar对象主要是从文件中读取 cookie或创建cookie,其中,MozillaCookieJar是为了创建与Mozilla浏览器cookies.txt兼容的 FileCookieJar实例,LWPCookieJar是为了创建与libwww-perl的Set-Cookie3文件格式兼容的 FileCookieJar实例,用LWPCookieJar保存的cookie文件易于人类阅读。默认的是FileCookieJar没有save函 数,而MozillaCookieJar或LWPCookieJar都已经实现了。 所以可以用MozillaCookieJar或LWPCookieJar,去自动实现cookie的save。
使用Basic HTTP Authentication:
import urllib2
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
uri='https://mahler:8092/site-updates.py',
user='klem',
passwd='kadidd!ehopper')
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
f = urllib2.urlopen('http://www.server.com/login.html')
print f.read()
参考:
http://isilic.iteye.com/blog/1806403
http://www.devba.com/index.php/archives/4605.html
【python】urllib2的更多相关文章
- 【Python②】python之首秀
第一个python程序 再次说明:后面所有代码均为Python 3.3.2版本(运行环境:Windows7)编写. 安装配置好python后,我们先来写第一个python程序.打开IDLE (P ...
- 【python】多进程锁multiprocess.Lock
[python]多进程锁multiprocess.Lock 2013-09-13 13:48 11613人阅读 评论(2) 收藏 举报 分类: Python(38) 同步的方法基本与多线程相同. ...
- 【python】SQLAlchemy
来源:廖雪峰 对比:[python]在python中调用mysql 注意连接数据库方式和数据操作方式! 今天发现了个处理数据库的好东西:SQLAlchemy 一般python处理mysql之类的数据库 ...
- 【python】getopt使用
来源:http://blog.chinaunix.net/uid-21566578-id-438233.html 注意对比:[python]argparse模块 作者:limodou版权所有limod ...
- 【Python】如何安装easy_install?
[Python]如何安装easy_install? http://jingyan.baidu.com/article/b907e627e78fe146e7891c25.html easy_instal ...
- 【Python】 零碎知识积累 II
[Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...
- 【Python】-NO.97.Note.2.Python -【Python 基本数据类型】
1.0.0 Summary Tittle:[Python]-NO.97.Note.2.Python -[Python 基本数据类型] Style:Python Series:Python Since: ...
- 【Python】-NO.99.Note.4.Python -【Python3 条件语句 循环语句】
1.0.0 Summary Tittle:[Python]-NO.99.Note.4.Python -[Python3 条件语句 循环语句] Style:Python Series:Python Si ...
- 【Python】-NO.98.Note.3.Python -【Python3 解释器、运算符】
1.0.0 Summary Tittle:[Python]-NO.98.Note.3.Python -[Python3 解释器] Style:Python Series:Python Since:20 ...
随机推荐
- Hystrix 断路器
断路器: 当客户端访问服务端,发现服务端有异常不能进行访问时,就会执行一个fallback 方法.
- idea创建和部署tomcat项目
小编今天花费了一上午,参悟出了如何快速的在idea上面创建并部署一个属于自己的maven项目,很荣幸能将自己的开发经验推而广之,希望能够帮助到大家! 前言 小编参考博文: Intellij Idea ...
- C++中vector用法
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<in ...
- vue :class 可以接收 字符串 数组 和 对象 对象里面的key值 根据true或false 显示不显示
vue :class 可以接收 字符串 数组 和 对象 对象里面的key值 根据true或false 显示不显示 https://cn.vuejs.org/v2/guide/class-and-sty ...
- MFC中EDIT控件实现换行
\n是C下的回撤换行.在MFC下得用\r\n.
- 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)
*题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) public class 第三十九题按条件计算 ...
- Perl语言入门: 斜线不是元字符,所以在不作为分隔符时不需要加上反斜线。
Perl语言入门: 斜线不是元字符,所以在不作为分隔符时不需要加上反斜线.
- sleep 和wait的差别
基本的差别 1.sleep 是Thread 类的方法,wait 是Object类中定义的方法 2.sleep()方法可以在任何地方使用 3.wait()方法只能在synchronized方法中使用,或 ...
- Maven实战读书笔记(一):Maven概述
1.1 Maven是什么,能做什么 Maven是一个跨平台的项目管理工具,主要服务于Java平台的项目构建.依赖管理和项目信息管理. Maven的用途之一是项目构建,能够自动化构建过程,从清理.编译. ...
- C# string补位
参考:https://www.cnblogs.com/zhangqs008/archive/2012/02/01/2341078.html //1.1.左补位 "; , 'A'); //1. ...