python根据关键词下载图片_你还在手动一张张复制下载图片吗?快来尝试用python批量下载吧...

在我们日常生活中,有时候进入一个网站后,发现大量的图片,比如说一些好看的素材。以及我以前非常喜欢看的美女图片。想要下载下来怎么办?难道我一张张去复制?这有点不现实。动辄几千字几万张的图片,可不是一两个小时能复制完的。

其实我们可以用python去下载这些图片,只要写好代码,几分钟就能下载几千张图片。python不仅可以下载图片,还可以下载小说、电影、动态图等等内容。所以说只要你学会了python,以后想要下载一些东西直就非常简单了。好了,废话不多说,今天我们就看一个小小的爬图片项目,希望各位看官能喜欢。

利用Python爬取网页图片

你可能需要的工作环境:

Python 3.6官网下载

我们这里以sogou作为爬取的对象。

首先我们进入搜狗图片http://pic.sogou.com/,进入壁纸分类(当然只是个例子Q_Q),因为如果需要爬取某网站资料,那么就要初步的了解它…

6c10288a487c4a53bc1461c816dfb98b

进去后就是这个啦,然后F12进入开发人员选项,笔者用的是Chrome。

右键图片>>检查

9b0fe9f358db49d4a8f639165e82347d
学习更多的python知识,私信`学习交流`。免费获取大量学习资料,并跟着我一起来学。

发现我们需要的图片src是在img标签下的,于是先试着用 Python 的 requests提取该组件,进而获取img的src然后使用 urllib.request.urlretrieve逐个下载图片,从而达到批量获取资料的目的,思路好了,下面应该告诉程序要爬取的url为

http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD

此url来自进入分类后的地址栏。明白了url地址我们来开始愉快的代码时间吧:

在写这段爬虫程序的时候,最好要逐步调试,确保我们的每一步操作正确,这也是程序猿应该有的好习惯。笔者不知道自己算不算个程序猿哈。线面我们来剖析该url指向的网页。

import requestsimport urllibfrom bs4 import BeautifulSoupres = requests.get('http://pic.sogou.com/pics/recommendcategory=%B1%DA%D6%BD')soup = BeautifulSoup(res.text,'html.parser')print(soup.select('img'))

output:

01b547b82c02467da63d7a4de5ed5cec

发现输出内容并不包含我们要的图片元素,而是只剖析到logo的img,这显然不是我们想要的。也就是说需要的图片资料不在url 即 http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD里面。因此考虑可能该元素是动态的,细心的同学可能会发现,当在网页内,向下滑动鼠标滚轮,图片是动态刷新出来的,也就是说,该网页并不是一次加载出全部资源,而是动态加载资源。这也避免了因为网页过于臃肿,而影响加载速度。下面痛苦的探索开始了,我们是要找到所有图片的真正的url 笔者也是刚刚接触,找这个不是太有经验。最后找的位置F12>>Network>>XHR>>(点击XHR下的文件)>>Preview。

73f5e85f9b1448aaab6b4ad7947a76f7

发现,有点接近我们需要的元素了,点开all_items 发现下面是0 1 2 3...一个一个的貌似是图片元素。试着打开一个url。发现真的是图片的地址。找到目标之后。点击XHR下的Headers

得到第二行

Request URL:

http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15&width=1536&height=864

,试着去掉一些不必要的部分,技巧就是,删掉可能的部分之后,访问不受影响。经笔者筛选。最后得到的

url:http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15 

字面意思,知道category后面可能为分类。start为开始下标,len为长度,也即图片的数量。好了,开始愉快的代码时间吧:

开发环境为Win7 Python 3.6,运行的时候Python需要安装requests,

Python3.6 安装requests 应该CMD敲入:

pip install requests

笔者在这里也是边调试边写,这里把最终的代码贴出来:

import requestsimport jsonimport urllibdef getSogouImag(category,length,path): n = length cate = category imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag=%E5%85%A8%E9%83%A8&start=0&len='+str(n)) jd = json.loads(imgs.text) jd = jd['all_items'] imgs_url = [] forjin jd: imgs_url.append(j['bthumbUrl']) m = 0 forimg_urlin imgs_url: print('***** '+str(m)+'.jpg *****'+' Downloading...') urllib.request.urlretrieve(img_url,path+str(m)+'.jpg') m = m + 1print('Download complete!')getSogouImag('壁纸',2000,'d:/download/壁纸/')

程序跑起来的时候,笔者还是有点小激动的。来,感受一下:

13e5094ee0b04ca29b3597e8d05d8525
c01422fe20f441d595d9bc59070a62f9

至此,关于该爬虫程序的编程过程叙述完毕。整体来看,找到需要爬取元素所在url,是爬虫诸多环节中的关键。

学习过程中遇到什么问题或者想获取学习资源的话,私信小编“学习交流”,我们一起学Python。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值