100行代码教你爬取斗图网(Python多线程队列)

前言

根据之前写的两篇文章,想必大家对多线程和队列有了一个初步的了解,今天这篇文章就来实战一下,用多线程 + 队列 爬取斗图网的全网图片。

你还在为斗图找图片而烦恼吗?快来跟我一起 happy 吧!

PS:本文目的是抱以学习心态而分享,禁止用于非法以及商业途径,如有风险,一切后果自己承担!

成果演示

先来看看最后的成果:

启动程序后,可以发现目录下是同时出现 5 个主题图片(线程设置了 5 个,所以同时创建 5 个文件夹)的,每个主题文件夹下都有相应的图片。

确认需求

开始之前,先来看下要爬取的网站以及图片,对其进一步进行分析。

  1. 要爬取的网站 - 斗图啦

  1. 要爬取的内容,肯定就是图片啦

每个主题的详细图片:

从斗图啦主页点到详情页可以看到,每个主题下有好多图片,所以需求就是爬取 1 - 615 页每页中详情页的图片。

html 节点分析

首先,在斗图啦首页列表中一共有 615 页,每次点击不同页时,可以观察到地址的变化:

不难发现,点击第几页时,网页地址后面的 page 就是几。

分析好网站的分页后,可以按照正常流程的逻辑进行 HTML 源码的分析,打开 F12 ,让我们来一步步进行梳理。

1. 分析每页的主题 url 地址

比如第一页中,要爬取其下的所有主题,而每个主题下又有具体的详情图片。所以第一步需要分析点击每个主题后的 url 地址。如下图:

这样一来,确定了第一页中,所有主题的具体详情页地址:

2. 分析每个主题下详情页的各个图片地址

用第一个企鹅表情举例,当我们点入到此主题后,F12继续分析每个图片的具体地址:

再次分析,可以发现,所有图片其实结构都一样,只需要提取下图的图片地址即可完成:

3. 思维导图爬取思路

代码设计思路

上面分析完,接下来讲下笔者的设计思路,代码不唯一,爬取的思路提供给大家了,也可自行先写一个玩玩看,然后在对比咱们写的代码有什么不同处。。

部分代码讲解

来简单的看部分代码:


def main():print('程序开始!')thread_nums = 5  # 开启 5 个线程for main_url in range(1, 615):url = f'https://www.doutula.com/article/list/?page={main_url}'DouTuLaSpider.url_queue.put(url)doutu = DouTuLaSpider()# 开启多线程for i in range(thread_nums):thread = threading.Thread(target=doutu.run)thread.start()thread.join()print('程序结束...')
   def run(self):""" 通过队列来实现多线程的有序性,从第 1 页到第 614 页有序处理 """try:while 1:url_queue = DouTuLaSpider.url_queueif url_queue.qsize() == 0:breakelse:main_url = url_queue.get()html = self.__crawl_html(main_url)self.__control_speed()  # 加延时self.__analysis_main_url(html)  # 分析主节点except Exception as e:import tracebacktraceback.print_exc()

入口地方,开启 5 个线程,分别将所有页数的地址放入队列中,然后让线程去队列中有序的获取分页的地址。

如果有细看代码的同学,会发现上面的代码是 1-614 页,因为代码是前天写的,那会儿还只有 614 ,斗图啦网站每日都有更新哟。。

简单的说下为什么要用队列?就是因为有序,多线程下,如果不引用队列的话,有可能会出现爬取重复的url地址呀。。。不理解的话想想这个问题:你怎么知道哪个是你爬取过的的地址呢?

其余的具体提取操作代码就不放了。

当然,我们是为了学习,而不是为了攻击人家服务器。。。爬取的时候该控制速度就要控制速度,在源码中已经对应提供了。而笔者这里作为演示,也没有全爬取,就是爬取了一小部分而已。

总结

如果有想要全部代码的同学,老规矩,公众号后台回复 斗图啦,完整代码已经放到了 github 上了。

关于多线程和队列不理解的同学,欢迎看下之前写的两篇文章。如果有哪里不懂的,欢迎留言区留言交流。期待你的留言呐!

欢迎关注:migezatan.(咪哥杂谈)

100行代码教你爬取斗图网(Python多线程队列)相关推荐

  1. 爬虫笔记——多线程爬取斗图网表情包(threading)

    爬虫笔记--多线程爬取斗图网表情包(threading) 网站观察 爬取框架 具体代码 斗图网网址:斗图网,这里以爬取最新套图为例. 网站观察 在网页翻页操作中可以看到网页是非动态加载的(page为页 ...

  2. 使用python爬取斗图网的图片

    使用python爬取斗图网的图片 以下是代码部分: # -*- coding: utf-8 -*- """ Created on Wed Apr 14 14:41:42 ...

  3. 斗图斗不过小伙伴?python多线程爬取斗图网表情包,助你成为斗图帝!

    最近python基础课讲到了多线程,老师让交个多线程的实例练习.于是来试试多线程爬虫,正好复习一下mooc上自学的嵩天男神的爬虫知识.想法很美好,过程却很心酸,从早上开始写,每次出现各种奇怪问题,到现 ...

  4. python3爬虫——多线程爬取斗图网表情包

    本文用多线程生产者,消费者模式爬取斗图网的表情包,并下载保存到本地,get_page()函数负责获取页面的图片的url链接,downlod_img()函数通过图片url下载保存到本地文件夹中,开启多线 ...

  5. 爬取斗图网图片,使用xpath格式来匹配内容,对请求伪装成浏览器, Referer 防跨域请求...

    6.21自我总结 一.爬取斗图网 1.摘要 使用xpath匹配规则查找对应信息文件将请求伪装成浏览器Referer 防跨域请求 2.爬取代码 #导入模块 import requests#爬取网址 ur ...

  6. 手把手教学php表情包,手把手教你爬取斗图啦表情包

    爬取表情包 闲来无事,突然想到表情包好久没有更新了,正好这几天学了爬虫,利用爬虫来更新一波表情包,哈哈哈. 有一个网站,叫做"斗图啦",网址是:https://www.doutul ...

  7. 爬取斗图网表情包之后斗图会输?不存在的

    前言: 本文非常浅显易懂,可以说是零基础也可快速掌握.如有疑问,欢迎留言,笔者会第一时间回复. 一.分析表情包网址 1.进入斗图啦网址,点击**"最新表情"**,再点击第二.第三页 ...

  8. 23行代码带你爬取美女图

    爬取妹子图可能在爬虫里面没有什么技术含量了,新手练练手还是可以的. 今天爬取的网址是:http://www.youzi4.cc/mm/meinv/index_1.html 注意:爬取图片一般要加上re ...

  9. 多线程爬取斗图网表情包

    import requests import re import queue import threading import timeHeaders = {'User-Agent': 'Mozilla ...

最新文章

  1. jsp判断disable按钮不可选_选电子琴五部曲
  2. docker从入门到实践第三版pdf_测开日常积累--Docker入门到实践
  3. java基础教程知识点,[Java教程]js基础知识点总结
  4. 总结-linux初识进程(包括cpu调度、进程创建、僵尸进程(重点)、环境变量)
  5. mysql 动态创建事件_mysql 通过事件定时为数据库创建动态表名
  6. java 运行时修改类_在运行时修改类定义的注释字符串参数
  7. 瑞士表商 Swatch 关闭 IT 系统,阻止网络攻击
  8. 给图片添加水印效果图的函数(可以在图片上添加自己的版权和LOGO图片的水印) 【转载】...
  9. 解决办法:RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96
  10. IDEA+Java控制台实现教材管理系统
  11. GWR(地理加权回归)预测分析中国各省份开关窗情况(R语言)
  12. TCP/IP 报文格式(IP数据包、TCP报头、UDP报头)
  13. 神舟笔记本电脑进入u启动之BIOS设置方法
  14. 网线制作ppt_制作网线图解讲解.ppt
  15. codesys 简单案例_CoDeSys编程手册范本
  16. 我是SPI,我让框架更加优雅了!
  17. 常见随机变量的数学期望和方差
  18. 小程序支付:appid和mch_id不匹配采坑实录
  19. 华为鸿蒙,希望是务实的操作系统
  20. Mac air装 win10 ,总是提示拷贝windows安装文件失败!?

热门文章

  1. 3dsmax材质贴图
  2. excel使用vb统计分数_使用Excel选项按钮计算调查分数
  3. php cpp,cpp是什么
  4. 编写函数实现素数的判断!c语言
  5. mysql索引原理之聚簇索引
  6. 前端优化——预加载篇
  7. 智能手机12大必备应用
  8. js 判断视频大小、上传视频
  9. 库克:iPhone X只是一天一杯咖啡钱
  10. 什么是大数据测试?大数据测试实现步骤有哪些?