python爬虫抓取图片到本地
2016-03-12 22:29
796 查看
有次电话面试,被问到爬虫能不能抓取图片。当时觉得爬虫是抓取的文本,应该抓不到图片吧。简单的python竟然几行就可以搞定。
代码如下:
.urllib模块中的方法
urlopen返回对象提供方法:
- read() , readline() ,readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样
- info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息
- getcode():返回Http状态码。如果是http请求,200请求成功完成;404网址未找到
- geturl():返回请求的url
urlretrieve()返回一个二元组(filename,mine_hdrs)
这里可以与urlopen结合以实现post方法和get方法:
GET方法:
POST方法:
代码如下:
<span style="font-size:14px;">'''获取image.baidu.com的图片url,下载到本地''' '''urllib模块提供了读取web页面数据的接口,可以像本地文件一样读取www和ftp上的数据. ''' import urllib import re def getHtml(url):#打开一个url地址,读取url上的数据。 page=urllib.urlopen(url) html=page.read() return html def getImg(html): reg=r'src="(.+?\.jpg)"' imgre=re.compile(reg) imglist=re.findall(imgre,html) x=0 for imgurl in imglist: urllib.urlretrieve(imgurl,'%s.jpg'%x)#远程数据下载到本地,图片重命名 x+=1 return imglist html=getHtml(r"http://image.baidu.com") print getImg(html)</span>
.urllib模块中的方法
1.urllib.urlopen(url[,data[,proxies]])
打开一个url的方法,返回一个文件对象,然后可以进行类似文件对象的操作。本例试着打开baidu<span style="font-size:14px;">import urllib page=urllib.urlopen(r'http://www.baidu.com') firstline=page.readline() print firstline</span>
urlopen返回对象提供方法:
- read() , readline() ,readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样
- info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息
- getcode():返回Http状态码。如果是http请求,200请求成功完成;404网址未找到
- geturl():返回请求的url
2.urllib.urlretrieve(url[,filename[,reporthook[,data]]])
urlretrieve方法将url定位到的html文件下载到你本地的硬盘中。如果不指定filename,则会存为临时文件。urlretrieve()返回一个二元组(filename,mine_hdrs)
filename=urllib.urlretrieve('http://www.baidu.com') type(filename) print filename #存为本地文件 filename = urllib.urlretrieve('http://www.baidu.com',filename='e:/baidu.html')
3.urllib.urlcleanup()
清除由于urllib.urlretrieve()所产生的缓存4.urllib.quote(url)和urllib.quote_plus(url)
将url数据获取之后,并将其编码,从而适用与URL字符串中,使其能被打印和被web服务器接受。urllib.quote('http://www.baidu.com') 'http%3A//www.baidu.com' [code]urllib.quote_plus('http://www.baidu.com')'http%3A%2F%2Fwww.baidu.com'
5.urllib.unquote(url)和urllib.unquote_plus(url)
与4的函数相反。6.urllib.urlencode(query)
将URL中的键值对以连接符&划分这里可以与urlopen结合以实现post方法和get方法:
GET方法:
>>> import urllib >>> params=urllib.urlencode({'spam':1,'eggs':2,'bacon':0}) >>> params 'eggs=2&bacon=0&spam=1' >>> f=urllib.urlopen("http://python.org/query?%s" % params) >>> print f.read()
POST方法:
>>> import urllib >>> parmas = urllib.urlencode({'spam':1,'eggs':2,'bacon':0}) >>> f=urllib.urlopen("http://python.org/query",parmas) >>> f.read()
相关文章推荐
- Python的多线程和多进程模块对比测试
- ubuntu15.10下安装opencv2.4.9&python上调用opencv库
- python中的open的使用
- Python的urlopen的使用
- python学习笔记:python字符串
- AdaBoost算法1(基于单层决策树)
- [pyhton]python内建方法
- Python回顾与整理2:Python对象
- python eval
- Python中os模块
- python系统基础信息模块详解
- Python学习
- 曼德勃罗集(Mandelbrot Set)
- python3的编码问题
- python + fabric 实现批量部署
- Python的MySQLdb模块安装
- python爬虫之lxml
- sum累加方式,python3.3,20160312
- python爬虫之BeautifulSoup
- [置顶] 利用python实现批量插入打印信息的方法