这是第二篇有关图片爬取的博客。似乎本人对图片情有独钟。这篇博客主要是还是用于记录我的学习记录。同时,我们在编写界面的时候,经常需要从网上下载一些ico图标用于自定义控件,也许不同的程序员有自己的下载方式,这是我的方式,把它记录下来。

easyicon是一个开放的图片网站,网址为http://www.easyicon.net/

在搜索栏输入关键字之后,可以搜到很多图片。在编写界面的时候,我们有时需要许多风格一致的图片。很幸运的是,easyicon的图片组织是基于风格的。以下进入分析过程:

首先,我在搜索栏输入"close"关键字,结果为:

假如我对第三张图感兴趣,则点击它,进入下载界面:

点击ico图标下载,就能进行ico图标下载。很好,这就是我想要的,接下来就来分析如何获取这个图标下载请求。

首先按F12,在开发者窗口中选择Network,接着点击ico图标下载,发现什么也没有。看来用浏览器本身无法获取这个请求的过程。那么使用抓包工具Fiddle。启动Fiddle后,重新点击下载,

第一项是我想要的,点击查看其信息头:

在这里,先注意一下Referer一项,先来说明一下这个url。后面的段的组成是“图标的id-图标的名称_icon.html”

因此在这里,我知道了,若要爬取这张图片,我需要知道它的id以及它的名称。怎么知道呢?在搜索出来的结果中,网页的元素结构中应该可以找到。如下图图标的结构中,src属性的值的最后一项值就是我们想要的id:="1205793.gif"。而alt就是我们所要的名称。那么就简单了,只要先爬取网页的内容,然后从其中用正则表达式筛选出图表的id及alt。之后就可以生成Referer了。而请求的链接,我们可以在Fiddle中我刚才点击的哪一项的信息头中知道链接为:http://download.easyicon.net/ico/图标id/128/

于是可以编写一个接口:

def crawico(imgid,key,path):try:print('start craw one img..')url='http://download.easyicon.net/ico/'+str(imgid[0])+'/128/'print('craw url:'+url)referer='http://www.easyicon.net/'+str(imgid[0])+'-'+urllib.request.quote(key[0])+'_icon.html'print('referer'+referer)cjar=http.cookiejar.CookieJar()opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))headers=[('Accept','text/html,application/xhtml+xml,*/*'),('Accept-Language','zh-CN'),('UA-CPU','AMD64'),('User-Agent','Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko'),('Referer',referer),('Connection','Keep-Alive'),('Host','download.easyicon.net')]opener.addheaders=headersurllib.request.install_opener(opener)print("craw img:"+url+"to"+path)urllib.request.urlretrieve(url,filename=path)except urllib.error.URLError as e:if hasattr(e,"code"):print(e.code)if hasattr(e,"reason"):print(e.reason)except Exception as e:print("exception:"+str(e))

接着,如何批量的爬取同种类型的图片呢?在close的下载页面中,下拉可以看到这样的项:

点击more,来看看跳转出来的页面的链接地址:http://www.easyicon.net/iconsearch/iconset:Control-icons/,这个地址中http://www.easyicon.net/iconsearch/是固定的,而iconset:Control-icons中Control-icons就是类型的名称。那么,我们只要知道了想要下载的图片的类型,那么就可以构造链接,然后爬取同类型的图片。如何知道图片的类型呢?

在close的下载界面中,我们可以注意到如下项:

没错,这就是我想要的。同样,按F12,分析其脚本:

那么,我们就可以构造正则表达式来抓取这个类型名称。

综上所述,那么我有了这样的爬取方案:首先,选取我们需要的图片,进入其下载界面,获取图标所属的类型,构造类型图标的链接。用链接请求到同种类型的图片的网页,接着将网页下的图片一张一张的爬取下来。

如果同种类型的图标有多页怎么办,比如close这个类型的图标的链接为:http://www.easyicon.net/iconsearch/iconset:Control-icons/,这是第一页,则第二页为:

http://www.easyicon.net/iconsearch/iconset:Control-icons/2/。那么现在我们清除规则了。现在直接贴上这个过程的代码:

def gethtml(url):req=urllib.request.Request(url)req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko')data=str(urllib.request.urlopen(req).read())return datadef geteasyiconseturl(urlcontent):setid='href="/iconsearch/iconset:(.+?)/">'ids=re.compile(setid).findall(urlcontent)print('iconset:'+str(ids[0]))url='http://www.easyicon.net/iconsearch/iconset:'+ids[0]+'/'return urldef crawHtml(url,path):try:img='<img src=\".+?>'nextp='<div class="pages_all">(.+?)</div>'ll=url+'1/'data=gethtml(ll)ne=re.compile(nextp).findall(data)nex='href="(.+?)">'nee=re.compile(nex).findall(ne[0])t=0x=1while (t-1<len(nee)-1):data=gethtml(ll)print("craw set:"+ll)imgs=re.compile(img).findall(data)print(str(imgs[0]))imgid='/(\d{7}).gif'keyc='alt="(\w+?)"'#path=input("enter the path that the imgs will be save as:")for i in imgs:imgsid=re.compile(imgid).findall(i)key=re.compile(keyc).findall(i)print(key)imgname=path+'/'+str(x)+'.ico'x+=1crawico(imgsid,key,imgname)print('page:'+str(nee[t]))ll='http://www.easyicon.net'+str(nee[t])print('gen set:'+ll)t+=1except urllib.error.URLError as e:if hasattr(e,"code"):print(e.code)if hasattr(e,"reason"):print(e.reason)except Exception as e:print("exception:"+str(e))

python easyicon同类型ico图片批量爬取相关推荐

  1. python常用小技巧(一)——百度图片批量爬取

    python常用小技巧(一)--百度图片无限制批量爬取 前言:我们在日常使用(搜壁纸,搜美女--)或者科研项目(图像识别)中经常要批量获取某种类型的图片,然而很多时候我们都需要一个个点击下载,有什么办 ...

  2. python爬虫,g-mark网站图片数据爬取及补坑

    应用python对g-mark网站图片数据爬取,同时但对于数据抓取失败的图片进行补坑(重新爬取操作),由于是日本网站,没有梯子访问的话,特别容易访问超时,比较合适的补坑操作是直接将数据采集到数据库,而 ...

  3. python爬虫网页中的图片_Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: 我们这里以sogou作为爬取的对象. 首先我们进入搜狗图片http://pic.s ...

  4. Python爬虫入门案例教学:批量爬取彼岸桌面4K超清美女壁纸

    先图片开路 环境介绍 python 3.6 / 3.8 pycharm 编辑器 requests parsel os 文件操作 在cmd里面就可以进行安装 pip install requests 无 ...

  5. Python爬虫实战 使用线程池批量爬取必应1080P高清壁纸

    本文纯粹为了技术学习,内容如有侵权,请告知! 目标URL:https://bing.ioliu.cn 爬取的图片 Python用到的主要模块 import requests from lxml imp ...

  6. Python裸奔也疯狂:批量爬取中国工程院院士信息

    中国工程院院士,是中国设立的工程科学技术方面的最高学术称号,为终身荣誉,由选举产生.在工程科学技术方面作出重大的.创造性的成就和贡献,热爱祖国,学风正派,品行端正,具有中国国籍的高级工程师.研究员.教 ...

  7. 爬虫-某直播平台图片批量爬取url并下载

    后续技术类文档更新到微信公众号-------->>喜欢的扫码关注 import json import time import requests from selenium import ...

  8. Python使用多进程提高网络爬虫的爬取速度

    多线程技术并不能充分利用硬件资源和大幅度提高系统吞吐量,类似需求应使用多进程编程技术满足. 以爬取中国工程院院士简介和照片为例,参考代码如下,请自行分析目标网页结构并与参考代码进行比对.另外需要注意, ...

  9. Python使用标准库urllib模拟浏览器爬取网页内容

    爬取网页内容的第一步是分析目标网站源代码结构,确定自己要爬取的内容在哪里,这要求对HTML代码有一定了解,对于某些网站内容的爬取还需要具有一定的Javascript基础.但是,如果目标网站设置了反爬机 ...

最新文章

  1. Vulkan Tutorial 12 Fixed functions
  2. matlab多缝夫琅禾费,常见的多缝夫琅禾费衍射.ppt
  3. 怎样成为优秀的软件模型设计者
  4. 【报告分享】2020企业精细化运营白皮书.pdf(附下载链接)
  5. 【深度学习】深度学习实验记录--自编码+分类器
  6. 如何在Shell脚本中使用if-else?
  7. css设置弹出信息,javaScript自定义alert弹出信息窗口
  8. hibernate官网文档
  9. 并行磁共振成像——SENSE 敏感度编码成像
  10. 轮询机制是什么意思(通俗理解轮询)
  11. 3DMAX制作载具模型导入UE4导致轮子无碰撞解决方案
  12. Android aseats 加密,A SEAT
  13. 均值场博弈_平均场博弈(mean field game)
  14. 软件测试与质量保证-测试一
  15. linux pppd源码下载_linux pppd脚本配置
  16. 深信服科技2019年校园招聘 移动应用开发 一面
  17. 未能从程序集“mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.Coll
  18. 计算机考试打字合格速度,雅思考试使用机考,打字速度决定最终成绩
  19. 闲置台式机+文件服务器,闲置电脑打造NAS:安装群晖NAS系统
  20. 代谢组学结果在线分析:不同组差异代谢物高级韦恩图Venn的绘制——UpSet图

热门文章

  1. jumbo frame介绍
  2. 回忆过往,坚守初心 —— 从头记过往的搞机时光
  3. 设计需要撰写的技术文件_技术设计文件和游戏设计文件
  4. 宽刈幅干涉高度计SWOT(Surface Water and Ocean Topography)卫星进展(待完善)
  5. bvh动作 舞蹈_Unity3D使用BVH动作文件驱动模型
  6. 显示360阻止html打开,360启动不了 怎么让360安全浏览器不开机启动
  7. Linux 上的基础网络设备详解
  8. 【视频】运行第一个容器 - 每天5分钟玩转容器技术(5)
  9. 浅谈项目管理之平衡原则
  10. 大四做毕业设计,是一种怎样的感受?