前言
生活中,经常需要在网络上查找图片素材进行引用或者自行使用,获取图片的方式不限于百度图片以及图片素材网站中进行下载。一般的网站只能手动将图片另存为,当我们需要保存大量且相同系列的图片,难道只能逐张图片以另存为的方式保存吗?相信大家非常不愿意这么做,接下来将介绍一种易学易用的方法,利用Python语言制作的网络爬虫工具批量抓取图片。
em…最近想找一些壁纸,那就来个批量下载图片吧。
作业工具
· Python 3.6或以上,下载地址:
https://www.python.org/downloads/
· 浏览器:chorme、Firefox(笔者推荐使用Firefox)
· 文本编辑器:sublime text 3
爬虫介绍
网络爬虫,也叫网络蜘蛛(Web Spider)。它根据网页地址(URL)爬取网页内容,而网页地址(URL)就是我们在浏览器中输入的网站链接。比如:https://www.baidu.com/,它就是一个URL。
讲解爬虫原理之前,我们需要先学会如何查看网页源代码(如掌握,请跳过)。
1. 审查元素(查看源代码)
这个操作非常简单。
1. 打开浏览器
2. 打开一个网页
3. 在网页空白处点击右键-查看元素(检查,或者按F12)
4. 点击“查看器”或“Elements”
左下角的“页面源代码”就叫做html,HTML也叫超文本标记语言,是这个网页的真实面貌。没错,那些五颜六色的网页真实面貌都是可读性较低的HTML,而我们的看到的是浏览器根据服务器返回的HTML的代码通过渲染显示成可读性极高的网页。
了解了HTML后,肯定想知道这些难看的HTML可以做什么,那么到了您的机器上,当然是由你说了算咯。
是的,真的可以为所欲为。(看我余额)
嗯,很明显这是假…
真相是…
顺便交大家个小技巧,因为经常依赖浏览器记住密码功能,而忘记原密码怎么办?
将密码栏处的“password”属性,修改成“text”属性。
(记住密码的选项是选不得的,毕竟可以明文显示出来。)
总结一下,HTML是由服务器接收到浏览器发送的请求,返回给浏览器的一个HTML文本,浏览器将其渲染成网页。换句话说,人由基因决定原始容貌,网页由HTML决定。人可以整容,网页也可以整,只不过网页比人更短暂,刷新就是重生(刷新会重新接收服务器发来的HTML,原来的会被抛弃,因此网页也只能在本地为所欲为)。
为什么选择Python来爬虫?
因为写爬虫是需要一边写,一边测试,测试不过再改改。这个过程用Python写起来最为方便,其次是Python提供了强大的第三方库,无论是巨简单的爬虫还是巨复杂的爬虫都能够轻松搞定。
爬虫需要处理的一些问题:
说到底就是因为Python在处理上面的事情的时候有很多库,而且语法简洁,代码风骚,开发者的注意点可以集中在自己要做的事情上。
简单得不能再简单的粗略不严谨地说明一下:
发送HTTP请求:
Python里我最喜欢用requests发送请求,发送请求的代码是这样的:
requests.get(URL) # GETrequests.post(URL,DATA) #
POSTrequests.put/delete/head/... # 各种请求# P.S.使用下面的代码处理Cookie更酸爽requests.Session()
到目前为止,还没有发现其他语言有比这个更加简单的发送HTTP请求的方式了(不排除我人见识短的可能性)。
解析HTML源码:
Python默认可以使用HtmlParser来解析HTML,如果你觉得用着不爽(确实用着不爽),可以有很多第三方库来优雅地做这些事情(lxml / BeautifulSoup / ...),甚至可以通过一些库(selenium等)来直接使用浏览器。你可以直接使用类似 body.div.a['href'] 这样简单到爆的语法取自己需要的内容。
本文主要采用BeautifulSoup库来解析HTML的内容。
处理反爬虫机制:
还是Python的requests库,它可以很方便的套上一个代理IP(部分网站反爬虫机制是封IP,被封了就伪装一个好了。):
request=requests.Session()request.proxies= ....
效率:
爬虫的效率问题基本不在解析信息的速度上,网络IO的时间其实才是大头。比如你请求网页花了500ms,相应的你的解析速度是1ms还是10ms已经不重要了。
其他还有很多地方就不一一总结了,简而言之,写爬虫来讲,Python相对于其它语言的优势在于有足够简洁的语法和足够多的库支持,开发效率很高,而且运行效率方面,网络IO的时间已经大大冲淡了Python的效率问题。
用Python可以1个人做5个人的事情,只是多用10倍的机器,多么划算。
官方下载:
https://www.python.org/downloads/
勾选“Add Python 3.6 to PATH”,直接下一步,安装完成。
打开“命令提示符”,敲下“python”,启动成功。
2. 安装第三方库
既然称为第三方库了,那就是本来不是Python已有的,因此需要我们自行安装库:
安装代码:安装第三方库,在系统直接调用PIP程序安装即可。
pip install beautifulsoup4
pip install requests
至此,我们的环境就准备好了,多么简单。
爬虫主要的核心在于以下三点:
代码整合过程部分的内容将会移到《【简单易学】教你用Python批量下载静态页面图片(实战篇)》详细讲解,敬请关注!
首先确认我们的目标爬取网站:https://www.socwall.com/
其次就是找到高清图片保存在什么页面里,获取到高清图片的存放地址。
最后使用代码去批量下载这些高清图片。
这一部分我们重点讲讲如何一步一步地分析网页,最终达到找到这些高清图片的存放地址。
先看看首页是什么样的~ 顺便以超市买东西为例子来分析一下,我们到底怎么找到目标商品的存放地址。
3.1 通过观察整个页面的结构,分析网页组成成分。
(上方红框是列表页,下方红框是列表页的页码)
整个页面像个货架一样展示商品,下面的页码就像是楼层号码,而货架上摆放的只是质量较差的(被压缩过的)展示商品(缩略图),因此我们要拿到货真价实的商品(目标图片)就需要到它所在的楼层,找到它摆放在货架上的地方。
3.2 上方列表页放置的是图片的缩略图,点击缩略图进入该缩略图的专属页面。
来到目标商品的货架前,我们发现有专属的取货窗口( 右侧的Download按钮)。
3.3 进入内层页面,找到了获取这张图片最终高清原图地址。
点击右侧Download按钮。
我们终于找到了货真价实的商品(目标图片),再次只需要另存为图片即可保存到本地!
OK!
获取目标数据途径
总结上述获取高清原图的过程,总结获取原图的途径:
一共四个步骤,我们的目的就算完成了,就下来的任务是使用代码来重复这个过程。