今早上本来想看看Django的一些知识,做个小的实战玩玩的,结果有了下载一些龙珠高清壁纸的想法,这些壁纸真的太赞了~加上最近忍不住买了《龙珠超画集》,马上就开始了这个爬虫的进程。这个网站真的超赞啊~很多好的作品在这里分享。
本爬虫程序适合这个网站的所有的壁纸爬取~
分析过程
这个网站不是很难爬,基本上和爬静态网站一样的,难度不大。
在主页上搜索关键词“龙珠”之后,进入了壁纸页面,显示是两千多张的总数量,但是不能在主页面上直接爬,因为主页上的图片的尺寸都太小了,需要一个个的点开再到里边把正常大小的尺寸的图的真实地址爬出来,之后直接下载下来就OK了。
我用的是Chrome浏览器。
这是利用Chrome的探嗅器取得的在主页上的图片地址,尺寸太小了,不适合爬取收藏,另外它的父节点就是它的内嵌链接,即为点进去可以下载每个正常大小尺寸的图的页面。
这就是进去之后的内嵌的页面了,在主页面上的都有一个内嵌链接,点进去可提供下载正常尺寸的图片。
从上面的操作分析来看,这个网站的翻页,就是一个参数来实现的:
page=num
。这在写程序时可起到翻页爬取的作用,我们的目标是全部爬下来收藏~~
分享一个Chrome浏览器选择CSS选择器自动爬取的小技巧~如上,自行玩耍一般了解去吧,非常实用,省时省力。
这样就差不多分析完了,本身也没什么难度…
代码实现
以下为实现的代码:
|
|
加上那么多的代理参数是为了防止HTTP Error 403: Forbidden
的错误,但是最后还是出现了这样的错误出现,我使用函数urlretrieve
依旧也有这样的问题出现,直到我发现了这篇文章:HTTP Error 403: Forbidden with urlretrieve,才解决了这样的错误,我选择过with open...
的写法,但是url.content
总是提示错误,原来是要在获得真实地址的情况下,再将真实地址的内容获取一遍(requests.get()
),最后url.content
终于也能行得通了~在这花费的时间最多…
需要注意一下的是cookies的事,这里是我的浏览器上的,可自行添加自己的浏览器上的cookies。
另外不懂我写的、我说的那就需要学习了:
- CSS 选择器参考手册
- python3的urlretrieve使用方法
- HTTP状态码
- 读写二进制文件
- Python3网络爬虫开发实战-崔庆才:
链接: https://pan.baidu.com/s/182yc8A9EFBFvHFRA3FpeVg 提取码: khs4
一本好书,不解释。
上方的程序可将“龙珠”的关键词改为其他的(如火影忍者等),均可直接运行进行下载。
运行效果展示
速度设置了5秒钟一张的速度,基本两千多张还是需要一两个钟的….可以用多线程、多进程改写一下估计会有一些提高,自行了解吧。
速度还是有点慢的…
推荐使用Dash结合写代码
这个小东西非常多使用,不仅包含有各种许多编程语言的API可查,而且还可以直接作为搜索引擎使用,当然好处还是很多的~开发者必备!
Mac破解下载地址:https://xclient.info/s/dash.html
展示效果:
不错~
Mac上利用自带的预览自制DPF画册文件
可自行移步参考Google,百度搜索引擎。
更新:多进程与异步加速爬取
妈蛋受不了了,爬两千多张图片慢的像一条狗…更新了多进程和异步加速的代码。
为什么不用“多线程”?因为在Python中多线程就是个垃圾!自行了解去吧。可参考:python并发编程二三事(二)/)、Understanding the Python GIL、Python进程、线程、回调与协程 总结笔记 适合新手明确基本概念
多进程代码
|
|
关于这个多进程可以理解为:在main函数中有多个进程池一同来经营运行,可以说他是时刻已经准备好的状态了,程序基本上只是inlinkes函数
在如往常一贯运行而已,所以时间起码会缩小一倍。
目视感觉差不多的效果…可能是我设置了time.sleep(5)
的关系,但是不这样会给人家服务器增加压力…哎,有失必有得啊,多进程的感觉是有快了一点的(具体来说还是有点明显的!)…跟本地网络情况还是有挂钩的,毕竟下载图片还是要看网速的。
运行程序期间会出现
SSL
的错误提示,这个不用理会,重新运行即可,遇到问题重新运行即可。
关于多进程教程可参考:
好文!
以上函数不懂的地方一般看完这个就懂了。
异步加速
异步加速,久仰大名了,今天来试试看威力如何~
其中需要用到的库请自行下载。
|
|
其中的寓意就是将耗时的应用用await
关键词对等上,在实现整个异步程序时,可先将耗时不部分的应用挂起来进而去处理另一个耗时的await
,流程以上述表示:一直挂起,一直跳着直到最后一个“一并运行”。这样就达成了异步处理的效果,最终时间会达到减少。
可参考:
-
好文,程序中不懂的地方可参考此篇文章。此文后面的参考链接值得一看!
异步结合多进程
这个库出自于Facebook:aiomultiprocess。
各位自行解决吧,我想快点结束这个系列了,我想去研究一点新的东西去了…