练手项目3:访问图像网站,查找某类型图片,下载查询结果

一般常用爬虫下载文本,图片,视频,声音。此处以下载图片为例,图片也是相对最容易。

#-*- coding:utf-8 -*-
import os,re,requests
#获取图片链接(以百度图片为例,因为部分参考了voidsky_很有趣儿的爬虫分享)
keyword=raw_input('please input what you want to serch:')
url='https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word='+keyword+'&ct=201326592&ic=0&lm=-1&width=&height=&v=flip'
page=requests.get(url).text
pic_link=re.findall('"objURL":"(.*?)",',page,re.S)

#将图片文件写入本地
i=1
for item in pic_link:
#需要添加捕获异常,因为不是所有图片都能下载
    try:
        pic=requests.get(item).content
    except requests.exceptions.ConnectionError:
        print 'Sorry.The current pic is not avilible.'
        continue
    filename=str(i)+('.jpg')
    path=os.path.join('F:','001',filename)#这个地址是我电脑的地址,可修改输出地址
    file=open(path,'wb')
    file.write(pic)
    file.close()
    print ('have down', i)
    i+=1
print ('download' ,i-1)

总结和反思:
1、url变量本身就是str类型,无需纠结‘ ’或“ ”;
2、requests.get().text 获取了链接地址的源代码文本;
requests.get().text 获取链接地址的二进制内容,用于将图片,声音,视频等写入这些文件中;
3、涉及这样批量下载,需要处理捕获异常,不然程序就会在出错处中断,不会继续运行;
4、continue 使得程序即使报错了,也能继续下一个循环,即图片下载;
5、在正则匹配中re.S参数设置,表示把字符串当做一个整体,n也当做字符串而不是换行,不因换行而重新匹配,可跨行匹配,。
6、MP3、MP4格式的文件下载,只要抓包或者F12得到请求链接,那么将上面的程序稍稍改动一下,即可下载。比如:
只要能试听,就会有链接。
《练手项目3:访问图像网站,查找某类型图片,下载查询结果》

声明:部分参考了voidsky_很有趣儿的爬虫分享:https://www.jianshu.com/p/19c…

    原文作者:upletter_Z
    原文地址: https://segmentfault.com/a/1190000012908654
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞