Python urllib和urllib2模块学习(一)
(参考资料:现代魔法学院 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模块学习(一)的更多相关文章
- Python urllib和urllib2模块学习(二)
一.urllib其它函数 前面介绍了 urllib 模块,以及它常用的 urlopen() 和 urlretrieve()函数的使用介绍.当然 urllib 还有一些其它很有用的辅助方法,比如对 ur ...
- Python urllib和urllib2模块学习(三)
build_opener()详解: 1.urllib2.urlopen()函数不支持验证.cookie或者其它HTTP高级功能,要支持这些功能,必须使用build_opener()函数创建自定这句话的 ...
- Python的urllib和urllib2模块
Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能.他们两个最显着的差异如下: urllib2可以接受一个Request对象,并以此可以来设置一个URL的h ...
- urllib与urllib2的学习总结
先啰嗦一句,我使用的版本是python2.7,没有使用3.X的原因是我觉得2.7的扩展比较多,且较之前的版本变化不大,使用顺手.3.X简直就是革命性的变化,用的蹩手.3.x的版本urllib与urll ...
- Python:urllib和urllib2的区别(转)
原文链接:http://www.cnblogs.com/yuxc/ 作为一个Python菜鸟,之前一直懵懂于urllib和urllib2,以为2是1的升级版.今天看到老外写的一篇<Python: ...
- python urllib和urllib2 区别
python有一个基础的库叫httplib.httplib实现了HTTP和HTTPS的客户端协议,一般不直接使用,在python更高层的封装模块中(urllib,urllib2)使用了它的http实现 ...
- Python 日期时间处理模块学习笔记
来自:标点符的<Python 日期时间处理模块学习笔记> Python的时间处理模块在日常的使用中用的不是非常的多,但是使用的时候基本上都是要查资料,还是有些麻烦的,梳理下,便于以后方便的 ...
- Python自动化之常用模块学习
自动化常用模块 urllib和request模块学习笔记 '获取页面,UI自动化校验页面展示作用': #-*- coding : utf-8 -*-import urllib.requestimpor ...
- python网页请求urllib2模块简单封装代码
这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...
随机推荐
- Notepad++编译c++时使用的代码
cmd /c "g++ -o $(CURRENT_DIRECTORY)\$(NAME_PART).exe $(FULL_CURRENT_PATH)" 出现控制台. NppExec ...
- android签名相关
生成apk.keystore: 右键工程:Android tools——>Export Signed Application Package后,相册中截图: 一直下一步下一步,成功后jarsig ...
- java学习:AWT组件和事件处理的笔记(1)--文本框上的ActionEvent事件
学习处理事件时,必须很好的掌握事件源,监视器,处理事件的接口 1.事件源 能够产生java认可事件的对象都可称为事件源,也就是说事件源必须是对象 2.监视器 监 ...
- create custom launcher icon 细节介绍
create custom launcher icon 是创建你的Android app的图标 点击下一步的时候,出现的界面就是创建你的Android的图标 Foreground: ” Foregro ...
- delphi 操作 TWebBrowser 实现自动填表(JQuery脚本与 OleVariant 方法)
版本:DELPHI XE8 操作交通银行信用卡申请表单(2016-03-23),网址如下: https://creditcardapp.bankcomm.com/applynew/front/appl ...
- 《how to design programs》9.3处理任意长度的表
假定一个玩具商店要把货物库存清单存放在计算机之中,这样,店里的员工就可以快速判断商店里是否还有某种玩具存货.简言之,商店需要一个能够检查库存是否含有玩具'doll 的函数contains-doll?, ...
- 【二叉树->链表】二叉树结构转双向线性链表结构(先序遍历)
二叉树存储结构属于非线性链表结构,转化成线性链表结构,能简化操作和理解.然而由非线性转线性需要对整个树遍历一次,不同的遍历方式转化结果页不一样.下面以先序为例. 方法一: 递归法.递归遍历二叉树,因为 ...
- linux之SQL语句简明教程---SELECT
SQL是用来做什么的呢?一个最常用的方式是将资料从数据库中的表格内选出.从这一句回答中,我们马上可以看到两个关键字: 从 (FROM) 数据库中的表格内 选出 (SELECT).(表格是一个数据库内的 ...
- linux之普通用户与root用户之间切换
- VRay 2.0 SP1 2.10.01 for 3ds max 9/2008/2009/2010/2011/2012 32/64位 顶渲简体中文版+英文版[中国室内设计论坛-室内人]
VRay 2.0 SP1 2.10.01 for 3ds max 9/2008/2009/2010/2011/2012 32/64位 顶渲简体中文版+英文版[中国室内设计论坛-室内人] 对最新版本的V ...