Python爬虫系列(三)多线程爬取斗图网站(皮皮虾,我们上车)

原创 2017年05月06日 17:05:54

斗图我不怕


最近看了Python多线程的相关内容,并且前几天观看了腾讯课堂潭州学院上面的关于斗图网爬取的公开课,课程内容大致是利用Python多线程爬取斗图(多页),并将图片保存到本地。自己写这篇文章总结下这个项目的所涉及的知识,并将实现过程分享给大家。

首先:分析网站,找到图片的src地址

打开网址:https://www.doutula.com/article/list/?page=1,从网址,我们可以推断出page={页码数字}是为了控制分页。

在每一中,我们可以看到大致有10个套图(套图点击之后是套图里面的具体图片,大致每个套图里有9张表情图),分别放在class为.list-group-item的a标签里,详情如下面的两张图片:



套图位置



每页10个套图a标签

点击一个套图连接之后,我们可以看到套图下的所有图片,然后选择一张图片观察它的src地址,后来发现就是img的属性 onerror的内容(至于为什么不是img下的src,大家可以访问地址试下)


onerror属性



img的src地址

其次:爬取思路(关键)

在第一步分析网站准备工作之后,我们思考下:怎么实现多页爬取?怎么获取每一页所有套图的连接?怎么获取每一套图里面所有表情图片的src?最后怎么实现多线程爬取(加快速度)?为了实现思路清晰,我们将每个模块封装成函数,下面相关代码模块:

(我还不知道简书怎么加入代码框,有没有大佬可以告诉我)



引入模块

(1)获取一个网页的源码

url地址是指每一页的地址,等会用format函数传递页码,实现多页爬取


获取一页的源码

(2)获取每一页的所有套图的链接,利用套图链接去获取所有套图详情网页源码(有点绕)


获取带有图片的源码

(3)利用xpath获取每一个图片的带有src地址的onerror属性内容



图片所在div

获取onerror内容

这里解释下这段代码:一页中有10个套图,然后每个套图中有9个图片,所以我们在这里获得的items有90个(图片所在的div),然后我们在每一个items中获取onerror里的内容,以便(4)步中的start_save_img()调用

(4)利用正则获取onerror内容里的图片src地址,然后用多线程实现下载图片



多线程下载图片

首先解释下 start_save_img(imgurl_list):参数 imgurl_list是我们(3)中获得onerror的内容(注意:不是图片的src地址,我们还要用注册和切片处理下)。其中我们在for循环中创建一个线程,调用的方法是save_img,传递的参数是onerror

save_img(img_url):接到onerror,用正则和切片处理后获得到每个图片的src地址,最后保存到本地,% img_url.split('/')[-1]这个事命名方式,大家可以仔细观察下每个图片得src地址最一个/后的内容不一样(这里大家也可以用其他方式命名)

(5)调用方法执行



多页(1-7)爬取

最后:运行代码,效果如下:



运行效果(我用的校园网)

总结:这个小项目其实用到很多Python爬虫的知识,并且涉及到多线程,爬取速度还算可以。代码都会写,还是希望自己可以掌握这些方法,下次拿到别的网站自己也会有大致思路了。(ps:如果我有的地方写的不对后者解释不当,请大家海涵和留言指出)

(ps:源码的话,建议先按图片敲一遍,动手实践下,好处我不说了。或者可以留言邮箱,我发给大家)

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

python爬虫爬取斗图网上图片

#-*- coding:utf-8 -*- """ 最基础的python爬取图片的程序,目前在学习阶段,程序思路: ①首先得到网页上的图片的分类 ②根据图片的分类url,进入到相应的网页,得到这个分...

python爬虫练手之斗图啦

互联网时代,难免会和别人在线上聊天,而现在的年轻人呐!一言不合就开始斗图!我难道就默默看着别人装逼吗?NO!拒绝! 所以呢借此机会我们找个表情网站,爬一波图片啦 斗图网链接: https:/...

MYSQL双主同步复制配置

1 MySQL同步机制实现概述 MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。而在实际项目中,两台分布于异地的主机上安装有MySQL数据库,两台...
  • oguro
  • oguro
  • 2016-10-23 22:19
  • 1849

mysql5.7.9主从同步配置

mysql5.7.9主从同步配置mysql579主从同步配置 环境 参考 配置 master配置 slave配置 master创建复制用户 获取master日志坐标 创建master数据快照 创建sa...

MySQL 主主(双主)复制

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务...

超简单BeautifulSoup版Csdn博客(摘要视图)爬虫

csdnSpider.py代码import bs4 import requestsorigin = 'http://blog.csdn.net' user_agent = ('Mozilla/5.0 ...
  • WuLex
  • WuLex
  • 2017-05-03 14:26
  • 1086

MySQL-5.7.10主主同步的安装和配置

目录 目录 1 1. 安装 1 2. 修改MySQL的root密码 3 3. mysqld_safe和mysql.server 3 4. 主主同步配置 3 4.1. 创建同步用户 3 4.2. my....

MySQL主主数据同步

MySQL主主同步和主从同步的原理一样,只是双方都是主从角色。环境操作系统版本:CentOS7 64位 MySQL版本:mysql5.6.33 节点1IP:192.168.1.205 ...

Python3网络爬虫(八):爱奇艺等主流视频网站的VIP视频破解(在线观看+视频下载)

爱奇艺等主流视频网站的VIP视频破解(在线观看+视频下载) 没有会员,想在线观看或下载爱奇艺、PPTV、优酷、网易公开课、腾讯视频、搜狐视频、乐视、土豆、A站、B站等主流视频网站的VIP视频?又不想...

Python学习记录-----批量发送post请求

昨天学了一天的Python(我的生产语言是java,也可以写一些shell脚本,算有一点点基础),今天有一个应用场景,就正好练手了。 这个功能之前再java里写过,比较粗糙,原来是在我本机跑的,今天老...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)