python程序员爬取百套美女写真集,同样是爬虫,他为何如此突出

前言

人生苦短,Python当歌!学习,其实是一个坚持、分享、交流、提高的过程。我有一整套python零基础+上百个python项目案例视频资料+就业指导分享,需要的话关注+转发、然后私信我“资料”即可免费获取

资料展示:

python爬虫

用python爬虫是一件非常使人愉快的事情,图片、数据、小视频一切皆可爬取,可是我们会经常发现下载图片的时候会非常慢,难以忍受。

我们都知道一个人做事必然没有十个人做事快,那一个进程速度慢,用十个进程就好了呀。所以今天要跟大家分享一个多进程爬虫的制作。(GIL的存在导致Python的多线程点有坑)

大家应该知道在多进程中,进程之间是不能相互通信的,这就有一个问题出现了!多个进程怎么知道哪些需要爬取、哪些已经被爬取了?

这就涉及到队列了,如果需要更为稳定健壮的队列,应该使用Celery这一类的专用消息传递工具,不过为了简便,这次我们使用MongoDB。

构建思路

好了!先来理一下思路:每个进程需要知道哪些URL爬取过了、哪些URL需要爬取!我们来给每个URL设置两种状态:

outstanding:等待爬取的URL

complete:爬取完成的URL

那么失败的URL的怎么办呢?我们在增加一种状态:

processing:正在进行的URL

嗯!当一个所有初始的URL状态都为outstanding;当开始爬取的时候状态改为:processing;爬取完成状态改为:complete;失败的URL重置状态为:outstanding。为了能够处理URL进程被终止的情况、我们设置一个计时参数,当超过这个值时;我们则将状态重置为outstanding。

接下来看代码部分

首先我们需要一个模块:datetime(这个模块比内置time模块要好使一点)

下面是队列的代码:

代码1

代码2

代码3

好了,队列我们做好了,下面是获取所有页面的代码。

下面就是多进程+多线程的下载代码了:

好啦!一个多进程多线的爬虫就完成了。(其实可以设置一下MongoDB,然后调整一下连接配置,在多台机器上跑哦!!嗯,就是超级简化版的分布式爬虫了,虽然很是简陋。

大家可以参考上面代码,单独处理图片地址试试(就是多个进程直接下载图片)应该八分钟能下载100套图~

当然还有一种加速的方法叫做“异步”!因为爬虫大部分时间都是在等待response中!‘异步’则能让程序在等待response的时间去做的其他事情,当然也会复杂许多。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 分享爱.自然.生命力体系山西分院董静怡的文章 给你那个内在需要爱的小女孩。你是无条件被爱的,我永远在这里陪...
    长路曼曼1982阅读 198评论 0 0
  • 有一个人追求文字的准确性,但他的文字却永远都让人看不懂,那他的文字又哪来的准确,也许我想他想表达的东西在他看来是他...
    云曦文止阅读 277评论 0 0
  • 我很懒,我在上海,我没有充足的时间,怎么办?不能总是吃垃圾食品,让kfc爷爷大笑,于是想搞一本懒人有的食谱。 做的...
    八克拉阅读 263评论 0 1
  • “我是这个城市不工作的年轻人,租住在地铁的终点站,每天从中午醒来,也在深夜睡去,世界跟我的关系不大,我和人的关系也...
    小贤君阅读 1,413评论 0 2