python爬虫抓取图片到本地

本文介绍了如何使用Python的urllib库抓取网页上的图片并保存到本地。通过urlopen打开URL,urlretrieve将图片下载,urlcleanup清理缓存,quote和unquote处理URL编码,以及urlencode处理查询参数。
摘要由CSDN通过智能技术生成

有次电话面试,被问到爬虫能不能抓取图片。当时觉得爬虫是抓取的文本,应该抓不到图片吧。简单的python竟然几行就可以搞定。

代码如下:

<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'

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()













  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值