欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-04 14:29:41
python爬虫 用python爬虫是一件非常使人愉快的事情,图片、数据、小视频一切皆可爬取,可是我们会经常发现下载图片的时候会非常慢,难以忍受。PS注意 注意:很多人学Python过程中会遇到各种烦恼问题,没有人帮答疑容易放弃。为此小编建了个Python全栈免费答疑.裙 :七衣衣九七七巴而五(数字 ......

python爬虫

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

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

注意:很多人学python过程中会遇到各种烦恼问题,没有人帮答疑容易放弃。为此小编建了个python全栈免费答疑.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新python教程项目可拿,,一起相互监督共同进步!

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

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

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

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

构建思路

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

outstanding:等待爬取的url

complete:爬取完成的url

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

processing:正在进行的url

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

接下来看代码部分

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

下面是队列的代码:

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

代码1

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

代码2

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

代码3

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

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

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

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

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

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

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

当然还有一种加速的方法叫做“异步”!因为爬虫大部分时间都是在等待response中!‘异步’则能让程序在等待response的时间去做的其他事情,当然也会复杂许多。另外要注意:很多人学python过程中会遇到各种烦恼问题,没有人帮答疑容易放弃。为此小编建了个python全栈免费答疑.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新python教程项目可拿,,一起相互监督共同进步!
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。