(参考资料:现代魔法学院 http://www.nowamagic.net/academy/detail/1302803

Python标准库中有许多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib和urllib2 这个 HTTP 客户端库。这里总结了一些 urllib和urlib2 库的使用细节。

Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据。

一、urllib常用函数介绍:

1. urlopen()函数:即创建一个类文件对象为指定的 url 来读取。

可以使用help(urllib.urlopen)查看函数说明。

urlopen(url, data=None, proxies=None)
Create a file-like object for the specified URL to read from.

urlopen返回一个类文件对象,它提供了如下方法:

read(),readline,readlines,fileno和close:  这些方法的使用和文件对象一样;

info(): 返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息。

getcode():返回Http状态码,如果是http请求,200表示请求成功完成,404表示网址没有找到。

getutl: 返回请求的url地址。

示例:

>>>import urllib

>>>baidu = urllib.urlopen('http://www.baidu.com')

>>>baidu.read()

>>> print baidu.info()

输出:

Date: Fri, 24 Apr 2015 05:41:40 GMT
Server: Apache
Cache-Control: max-age=86400
Expires: Sat, 25 Apr 2015 05:41:40 GMT
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-4b4c7d90"
Accept-Ranges: bytes
Content-Length: 81
Connection: Close
Content-Type: text/html

>>>for line in baidu:            #等价于read(),就像在操作本地文件,将网页数据打印出来。

    print line,

  baidu.close()

补充:

  • urllib.open的参数有特别要示,要遵循一些网络协议,比如http,ftp,也就是说在网址的开头必须要有http://或ftp://如:

  urllib.urlopen('http://www.baidu.com')

  urllib.urlopen('ftp://192.168.1.200')

  • 若要使用本地文件,就需要在前面加filt关键字,如:

  urllib.urlopen('file:nowangic.py')

  urllib.urlopen('file:F:\test\helloworld.py')

2. urlretrieve()函数:直接将远程数据下载到本地。

可以使用help(urllib.urlretvieve)查看函数说明

  Help on function urlretrieve in module urllib:

  urlretrieve(url, filename=None, reporthook=None, data=None)

  • 参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
  • 参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
  • 参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。

示例1:

>>>urllib.urlretrieve('http://www.soso.com','c://soso.html')

('c://soso.html', <httplib.HTTPMessage instance at 0x0000000005187A48>)

示例2:下面是urlretrieve()下载文件实例,可以显示下载进度。

#coding:utf-8

import urllib

def cbk(a,b,c):
  """
  @a: 已经下载的数据块
  @b: 数据块的大小
  @c: 远程文件的大小
  """
  per = 100.0 *a*b/c
  if per >100:
    per = 100
  print '#%d%%'% per

url = 'http://www.soso.com'
local = 'c://test//soso.html'
urllib.urlretrieve(url,local,cbk)

示例3:爬虫练习:

#-*-coding:utf-8-*-

""" 爬虫练习

Date:06-15-2015

"""

import urllib

import re

#获取指定url网页内容

def getHtml(url):

  page = urllib.urlopen(url)

  html = page.read()

  return html

#利用正则表达式将指定的图片下载

def getImg(html):

  reg = 'src="(.*?\.jpg)" pic_ext'

  regimg = re.compile(reg)

   imglist = re.findall(regimg,html)

  x = 0

  for img in imglist:

    urllib.urlretrieve(img,'%s.jpg' % x)

    x+=1

Html = getHtml('http://tieba.baidu.com/p/3825178610')

Img = getImg(Html)

Python urllib和urllib2模块学习(一)的更多相关文章

  1. Python urllib和urllib2模块学习(二)

    一.urllib其它函数 前面介绍了 urllib 模块,以及它常用的 urlopen() 和 urlretrieve()函数的使用介绍.当然 urllib 还有一些其它很有用的辅助方法,比如对 ur ...

  2. Python urllib和urllib2模块学习(三)

    build_opener()详解: 1.urllib2.urlopen()函数不支持验证.cookie或者其它HTTP高级功能,要支持这些功能,必须使用build_opener()函数创建自定这句话的 ...

  3. Python的urllib和urllib2模块

    Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能.他们两个最显着的差异如下: urllib2可以接受一个Request对象,并以此可以来设置一个URL的h ...

  4. urllib与urllib2的学习总结

    先啰嗦一句,我使用的版本是python2.7,没有使用3.X的原因是我觉得2.7的扩展比较多,且较之前的版本变化不大,使用顺手.3.X简直就是革命性的变化,用的蹩手.3.x的版本urllib与urll ...

  5. Python:urllib和urllib2的区别(转)

    原文链接:http://www.cnblogs.com/yuxc/ 作为一个Python菜鸟,之前一直懵懂于urllib和urllib2,以为2是1的升级版.今天看到老外写的一篇<Python: ...

  6. python urllib和urllib2 区别

    python有一个基础的库叫httplib.httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层的封装模块中(urllib,urllib2)使用了它的http实现 ...

  7. Python 日期时间处理模块学习笔记

    来自:标点符的<Python 日期时间处理模块学习笔记> Python的时间处理模块在日常的使用中用的不是非常的多,但是使用的时候基本上都是要查资料,还是有些麻烦的,梳理下,便于以后方便的 ...

  8. Python自动化之常用模块学习

    自动化常用模块 urllib和request模块学习笔记 '获取页面,UI自动化校验页面展示作用': #-*- coding : utf-8 -*-import urllib.requestimpor ...

  9. python网页请求urllib2模块简单封装代码

    这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...

随机推荐

  1. [汇编语言]-第五章[bx]和loop指令

    1- [bx]和内存单元的描述 [0]表示内存单元, 他的偏移地址为0 mov ax,[0] 将一个内存单元的内容送入到ax.这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为0,段地址在d ...

  2. STM32F051关于printf函数在串口打印中的使用

    1.需要在Options for Target -> Code Generation 中勾选Use MicroLIB: 2.需要加入下面这个函数: int fputc(int ch, FILE ...

  3. Git学习01 --git add, git commit , git log ,git status, git reset --hard, head

    Git官方提供的快速入门教程:https://try.github.io/levels/1/challenges/1 特点:Git极其强大的分支管理:分布式版本 集中式版本控制系统,版本库是集中存放在 ...

  4. 反调试技术(Delphi版)

    1.程序窗口句柄检测原理:用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到就说明有OD在运行//****************************************** ...

  5. Seafile 推出 “分布式文件同步技术” 打造的私有云服务

    近两年来 Dropbox 等云储存服务迅速窜红,各大巨头纷纷推出自家的云储存服务(苹果的 iCloud, 微软的 SkyDrive, Google 即将推出的 GDrive),国内也有类似的服务(金山 ...

  6. Nutch环境搭建

    1. 环境准备 HOST:Ubuntu12.04LTS JDK: jdk-7u45-linux-i586.rpm Nutch:apache-nutch-1.7-bin.tar.gz Solr:solr ...

  7. Wireshark入门与进阶系列(一)

    摘自http://blog.csdn.net/howeverpf/article/details/40687049 Wireshark入门与进阶系列(一) “君子生非异也,善假于物也”---荀子 本文 ...

  8. Linux下的sudo及其配置文件/etc/sudoers的详细配置说明

    http://www.osedu.net/article/linux/2011-01-03/178.html Linux下的sudo及其配置文件/etc/sudoers的详细配置说明 1.sudo介绍 ...

  9. lua的学习

    lua是什么 Lua是一中嵌入式的脚本语言. Lua语言可以独立进行编程,但这不是其主要的使用方式.Lua虽然有动态.灵活的语法提供强大的功能,但并不像 Java.Python 等一样有一个完善的库( ...

  10. oracle子查询

    子查询:在一个查询的内部包含另外一个查询. 普通子查询 -- 查询出比7654工资还高的所有雇员的信息 select * from emp e where e.sal > (select sal ...