前言
Hello!我是小二。近来可好?
最近心血来潮,
想把前段时间进坑python的学习心得整理出来,
这个过程,一个是可以和大家分享交流,
但更重要的是可以理清自己的思路,以便更好的学习。
今天想介绍的是一个爬虫实战项目,
爬取必应高清壁纸(https://bing.ioliu.cn/)
1. 分析我们要做的事情
首先,当然是要明确我们需要做的事情,
按照正常的做法,
我们下载壁纸的时候需要一张一张的下载,
而通常情况下,
这种网站的加载速度又是比较慢的,
这就导致我们不佳的体验(原因),
所以,我们想要把他们都下载下来,
并把它们放在一个文件夹中,
以便我们更好的寻找,
但前提我们要保证人家的网站不崩溃(很重要)。
本次使用的的编辑器是——pycharm,
导入的第三方库有requests,os,lxml中的etree,time,urllib3。
2. 检查网页规律
作为一个的“入侵者”,我们当然要去“阵地上”探查一下军情。
进入到必应壁纸网页(https://bing.ioliu.cn/)
我们需要掌握网页的信息,并摸清图片链接的规律,
按下F12进入到网页检查页面
通过查找图片的规律,我们发现图片都是在标签中的data-progressive属性中,找出这个规律后,就可以来编写我们的代码了。
3. 编写我们的代码
- 导入我们所需要的库
1 | # 导入 |
requests库可以用来获取网页的信息,
os库用来创建目录和判断目录是否存在,
lxml库中的etree.HTML()可以用来解析字符串格式的HTML 文档对象,将传进去的字符串转变成_Element对象。
作为_Element对象,可以方便我们接下来使用的xpath()方法。
- 把自己伪装成浏览器
毕竟我们是“入侵者”,一些网址会反爬虫,所以我们要伪装成浏览器,这样我们才能畅通无阻的访问。
1 | # 伪装浏览器 |
有多种途径可以获得User-Agent,
可以通过你使用的浏览器,
检查–>network–>在name栏里面选取一张jpg图片–>在右边的Request-Headers中可以找到
还可以直接上网查找
https://blog.csdn.net/wangqing84411433/article/details/89600335
- 获取网页信息
1 | # 获取网页信息 |
request.get(url)将返回一个对象,
对象储存该网页所有信息,
content是将对象转为字节码保存,
经过decode(‘utf-8’)解码成字符串数据保存在html中,返回html。
- 获取图片路径
1 | # 分析网页信息,获取图片路径 |
etree.HTML()解析网址,返回一个XPath解析对象,然后使用xpath()方法寻找路径
1 | # 演示代码 |
路径表达式 | 结果 |
---|---|
div | 选取div元素所有的子节点 |
/div | 选取根元素div |
/div/picture | 选取div子元素的所有book元素 |
//book | 选取book元素,无论它在哪里 |
//@img | 选取所有名为img_addr的属性,则可以选出“http://……” |
- 保存图片
1 | # 保存图片 |
time.sleep()是为了保证网站的稳定,每保存一张图片将会休眠2s,以防网站崩溃(虽然不会那么容易崩溃,但安全防护措施要做好。)
with open(filename, ‘wb’) as f,可以在文件打开异常的情况下关闭文件,即便是运行到最后出错也可以保证文件会关闭。
- 完整代码
1 | import requests |
解决方法:
1 | # 在前面加入两条代码即可完美解决 |
最后,查看.py所在的目录下的picture目录,就能看到下载好的壁纸,不要贪多喔……