百度图片下载器

来源:互联网 发布:产品矩阵是什么意思 编辑:程序博客网 时间:2024/06/05 10:23

—————————————————————————————————————————————————————————————————————

今天搜索了一下图片发现百度上有许多自己喜欢的图片,于是就想把这些图片下载下来,但是如果一张一张的下载的话又太慢了,想了一下,自己写个爬虫吧!|

—————————————————————————————————————————————————————————————————————

GO!GO!GO!


先上代码:

# coding:utf-8import requestsimport reimport osimport shutilimport urllib2def getpage(url):    response=requests.get(url).text    urls=re.findall('"objURL":"(.*?)",',response,re.S)    return urlsdef downimg(keyword,pagenums):    path='E:\\picture'    links=[]    count=1    if pagenums>0:            urls=['http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%s'%keyword+'&pn={}&ct=&ic=0&lm=-1&width=0&height=0'.format(str(i))for i in range(pagenums+1)]            while urls:                links=links+getpage(urls.pop(0))            if os.path.exists(path):                shutil.rmtree(path)                print '目录删除!'            os.mkdir(path)            print '新建目录!'            while links:                try:                    print'正在下载第',count ,'张'                    img=urllib2.urlopen(links.pop(0)).read()                    # img=requests.get(links.pop(0)).text    再次注释一下,据说使用python2.7和requests结合的时候会有编码问题                    with open(path+'\\'+str(count)+'.jpg','wb')as f:                        f.write(img)                        count+=1                except :                    print urllib2.URLError.reason                    continue            print '下载完毕!'inputwd=raw_input("请输入关键字:")inputnum=int(raw_input("需要下载多少页呢:"))downimg(inputwd,inputnum)
这里要提一夏,我用的是python2.7,为什么呢待会儿会说。留个悬念。。。。。。

我们一点一点的来解析代码:

1.

这里用了re.findall()方法,方法的作用是根据正则表达式匹配文本,返回的是匹配到了的结果的列表。

第一个参数是正则表达式,第二个参数是待匹配的文本,re.S意为多行匹配,因为re正则表达式默认

匹配是一行匹配的,也就是说在一行中查找匹配的文本,若没匹配到则换一行,使用了re.S后就是多

行匹配了


—————————————————————————————————————————————————————————————————————————————

2.

这里是存储图片的目录,需提醒的是‘\\’,第一个‘\’代表转义


—————————————————————————————————————————————————————————————————————————————

3.

这一句的作用是将pagenums个url装入列表urls中,其中从'http'到kewword这里%keyword的值用于替换%s,后边的format(str(i)) for i in range(pagenums+1)],其中i用于替换字符串中的{},而且i是经过format变化的,这样就生成了多个url


—————————————————————————————————————————————————————————————————————————————

4.

两个列表相加是将一个列表中的元素添加到另一个列表中,列表.append(列表)则是将一个列表添加到另一个列表中作为元素


—————————————————————————————————————————————————————————————————————————————

5.

shutil模块的rmtree不管文件夹中是否有文件都能删除,而os.remover(path)只能删除空文件夹


—————————————————————————————————————————————————————————————————————————————

6.

这里到了解决刚才的问题了,我们知道urllib2模块和requests模块都是为网络请求儿生的,但是需要特别注意下

在python2.7中使用requests获取网络资源的时候,如果网络资源中含有中文,可能会报编码错误


—————————————————————————————————————————————————————————————————————————————

7.

对获取的文件进行写入,其中‘w’代表写操作,‘b’代表以二进制的方式写入

ok啦今天的分析就到这里啦,谢谢大家,欢迎大家来留言!!!!!!!!!!!

—————————————————————————————————————————————————————————————————————————————



原创粉丝点击