【另附】:python笔记系列

1. urllib2.urlopen(request)

url = "http://www.baidu.com"
#url还可以是其他协议的路径,比如ftpvalues = {'name' : 'Michael Foord', 'location' : 'Northampton', language' : 'Python' }
data = urllib.urlencode(values)user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }request = urllib2.Request(url, data, headers)
#也可以这样设置header:request.add_header('User-Agent', 'fake-client')response = urllib2.urlopen(request)
html = response.read()

就是这样,其实urllib2的urlopen()方法是打开一个url的最基本的使用方法,需要传入一个参数request,其实就是常见的Request对象,其中可以包含url,data(向服务器传输数据,比如常见的form表单数据),还有设置header参数(有些服务器会拒绝未包含header的机器人请求)。

最后获取的网页需要使用response对象的read()方法来读取,否则只能得到一个对象的内存地址。

2.创建Opener对象以实现Cookie与其它HTTP功能

2.1  cookie处理

urlopen()函数不支持 验证cookie其他HTTP高级功能。要支持这些功能,必须使用build_opener()函数来创建自己的自定义Opener对象。

如果要管理HTTP cookie,需要创建添加了HTTPCookieProcessor处理程序的opener对象。默认情况下。HTTPCookieProcessor使用CookieJar对象,将不同类型的CookieJar对象作为HTTPCookieProcessor的参数提供,可支持不同的cookie处理。

mcj=cookielib.MozillaCookieJar("cookies.txt")
cookiehand=HTTPCookieProcessor(mcj)
opener=urllib2.build_opener(cookiehand)
u=opener.open(http://www.baidu.com)


2.2  认证

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
top_level_url = "http://www.163.com/"
password_mgr.add_password(None, top_level_url, username, password)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)


2.3  代理

urllib2会自动检测代理设置,默认使用环境变量http_proxy 来设置 HTTP Proxy。如果想在程序中明确Proxy的使用而不受环境变量的影响,可以通过创建ProxyHandler实例,并将实例作为build_opener()的参数来实现。

import urllib2enable_proxy = True
proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})
null_proxy_handler = urllib2.ProxyHandler({})if enable_proxy:opener = urllib2.build_opener(proxy_handler)
else:opener = urllib2.build_opener(null_proxy_handler)urllib2.install_opener(opener)

这里要注意的一个细节,使用 urllib2.install_opener() 会设置 urllib2 的全局 opener。这样后面的使用会很方便,但不能做更细粒度的控制,比如想在程序中使用两个不同的 Proxy 设置等。比较好的做法是不使用 install_opener 去更改全局的设置,而只是直接调用 opener 的 open 方法代替全局的 urlopen 方法。


2.4  Timeout设置

在老版本中,urllib2 的 API 并没有暴露 Timeout 的设置,要设置 Timeout 值,只能更改 Socket 的全局 Timeout 值。

importurllib2
importsocketsocket.setdefaulttimeout(10) # 10 秒钟后超时
urllib2.socket.setdefaulttimeout(10) # 另一种方式

在新的 Python 2.6 版本中,超时可以通过 urllib2.urlopen() 的 timeout 参数直接设置。

importurllib2
response = urllib2.urlopen('http://www.google.com', timeout=10)


2.5  设置Header

在urlopen()基本用法中有提基本的用法:

request = urllib2.Request(url, data, headers)

也可以在生成了request对象之后设置

importurllib2
request =urllib2.Request(uri)
request.add_header('User-Agent', 'fake-client')
response = urllib2.urlopen(request)

对有些 header 要特别留意,Server 端会针对这些 header 做检查,

  • User-Agent 有些 Server 或 Proxy 会检查该值,用来判断是否是浏览器发起的 Request

  • Content-Type 在使用 REST 接口时,Server 会检查该值,用来确定 HTTP Body 中的内容该怎样解析。

    • application/xml :在 XML RPC,如 RESTful/SOAP 调用时使用

    • application/json :在 JSON RPC 调用时使用

    • application/x-www-form-urlencoded :浏览器提交 Web 表单时使用

    • ……

    • 常见的取值有:

在使用 RPC 调用 Server 提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致 Server 拒绝服务。

2.6  Redirect重定向

urllib2 默认情况下会针对 3xx HTTP 返回码自动进行 Redirect 动作,无需人工配置。要检测是否发生了 Redirect 动作,只要检查一下 Response 的 URL 和 Request 的 URL 是否一致就可以了。

 importurllib2response =urllib2.urlopen('http://www.google.cn')
whether_redirected = response.geturl() == 'http://www.google.cn'

如果不想自动 Redirect,除了使用更低层次的 httplib 库之外,还可以使用自定义的 HTTPRedirectHandler 类。

importurllib2class RedirectHandler(urllib2.HTTPRedirectHandler):def http_error_301(self, req, fp, code, msg, headers):pass    def http_error_302(self, req, fp, code, msg, headers):pass opener =urllib2.build_opener(RedirectHandler)opener.open('http://www.google.cn')

2.7  使用 HTTP 的 PUT 和 DELETE 方法

urllib2 只支持 HTTP 的 GET 和 POST 方法,如果要使用 HTTP PUT 和 DELETE,只能使用比较低层的 httplib 库。虽然如此,我们还是能通过下面的方式,使 urllib2 能够发出 HTTP PUT 或 DELETE 的包:

importurllib2 request =urllib2.Request(uri, data=data)
request.get_method = lambda: 'PUT'# or 'DELETE'
response = urllib2.urlopen(request)

这种做法虽然属于 Hack 的方式,但实际使用起来也没什么问题。

2.8  获取HTTP返回码

对于 200 OK 来说,只要使用 urlopen 返回的 response 对象的 getcode() 方法就可以得到 HTTP 的返回码。但对其它返回码来说,urlopen 会抛出异常。这时候,就要检查异常对象的 code 属性了:

importurllib2try:response =urllib2.urlopen('http://restrict.web.com')
except urllib2.HTTPError, e:print e.code

2.9  Debug Log

使用 urllib2 时,可以通过下面的方法把 Debug Log 打开,这样收发包的内容就会在屏幕上打印出来,方便我们调试,在一定程度上可以省去抓包的工作。

import urllib2httpHandler =urllib2.HTTPHandler(debuglevel=1)
httpsHandler =urllib2.HTTPSHandler(debuglevel=1)opener =urllib2.build_opener(httpHandler, httpsHandler)  urllib2.install_opener(opener)response = urllib2.urlopen('http://www.google.com')

转载于:https://blog.51cto.com/zhkpsty/1692504

python的urllib2包基本使用方法相关推荐

  1. python中urllib2用法_python的urllib2包基本使用方法

    1. urllib2.urlopen(request)url = "http://www.baidu.com" #url还可以是其他协议的路径,比如ftp values = {'n ...

  2. python中bs包的使用方法

    Beautifulsoup简介 简单来说,BeautifulSoup就是Python的一个HTML或XML的解析库,我们可以用它来方便地从网页中提取数据,官方的解释如下: BeautifulSoup提 ...

  3. python第三方包是什么意思_安装Python和第三方包的方法

    应女朋友的邀请,写一篇关于Python和第三方包的安装方法. 一.Python安装 上官网Welcome to Python.org​www.python.org 下载保存 二.Pycharm安装 上 ...

  4. python爬虫-urllib2的使用方法详解(python3)

    文章目录 python编程快速上手(持续更新中-) python爬虫从入门到精通 urllib2概述 python2与python3对比 urlopen Request User-Agent 添加更多 ...

  5. python列表(list)中出现次数最多的元素使用collection包的Counter方法

    python列表(list)中出现次数最多的元素使用collection包的Counter方法 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tup ...

  6. Python 下载依赖包环境经常失败超时解决方法

    Python 下载依赖包环境经常失败超时解决方法 参考文章: (1)Python 下载依赖包环境经常失败超时解决方法 (2)https://www.cnblogs.com/boonya/p/11909 ...

  7. Py之requests:python的requests包的简介、安装、使用方法详细攻略

    Py之requests:python的requests包的简介.安装.使用方法详细攻略 目录 requests包的简介 requests包的安装 requests包的使用方法 requests包的简介 ...

  8. python 安装PIL包的方法以及简单介绍

    引用文章1: python安装PIL包的方法 https://www.cnblogs.com/CarbinHee/p/7780279.html 引用文章2: PIL https://www.liaox ...

  9. python安装依赖包经常出错怎么办_Python 下载依赖包环境经常失败超时解决方法...

    人生苦短,我用python!为什么很多人喜欢用python,因为包多呀,各种调包.但是调包有的时候也调的闹心,因为安装包不是失败就是很慢,很影响自己的工作进度,这里给出一个pip快速安装工具包的办法, ...

最新文章

  1. window 10 桌面显示计算机的操作
  2. vector,数组,动态数组效率测试
  3. 如何写windbg高级脚本---以访问文件的windbg脚本为例说明
  4. python的软件叫什么-Python 是什么软件?
  5. pytorch模型的保存与加载
  6. IO多路复用:select/poll/epoll
  7. 【NOIP2011 Day 2】观光公交
  8. 小牛uqi几个版本区别_川崎ZX25R便宜版本长这样?
  9. STM32F1开发指南笔记46----字库原理及汉字库创建
  10. 单片机c语言音符发生,单片机C语言程序的设计实训100例基于8051Proteus仿真.doc
  11. 希尔伯特变换到底有什么用
  12. 大数据第一季--Hadoop(day10)-徐培成-专题视频课程
  13. 如何调用WebService
  14. 软件需求分类与需求获取
  15. QQ消息自动发送器(自动发广告、聊天,支持群,支持最新的QQ2008II Beta1) C# 版...
  16. 回归预测 | MATLAB实现Robust-ELM鲁棒极限学习机多输入单输出
  17. pythonarp工具_Python 实现ARP扫描欺骗工具
  18. 浅谈SRAM与DRAM的异同
  19. LaTeX字体设置(二)
  20. 到底vuex是什么?

热门文章

  1. 实时搜索专家Krzana正式进军金融大数据市场
  2. Linux基础(13)文本查找利器find的使用方法
  3. 《Spring1之 第一次站立会议(重发)》
  4. mac下缺乏make wget怎么办?
  5. “找不到网络路径”的检测方法及解决方案
  6. IBM加入OpenOffice 贡献Lotus Notes程序代码
  7. 销售99绝招 成功没商量
  8. SSL和数字证书服务慨述(4)
  9. 十二、实战底部(二)
  10. linux基础--awk文本分析工具详解