斗图我不怕

最近看了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爬虫系列(三)多线程爬取斗图网站(皮皮虾,我们上车)相关推荐

  1. python多线程爬取多个网址_【Python爬虫】多线程爬取斗图网站(皮皮虾,我们上车)...

    原标题:[Python爬虫]多线程爬取斗图网站(皮皮虾,我们上车) 斗图我不怕 没有斗图库的程序猿是无助,每次在群里斗图都以惨败而告终,为了能让自己在斗图界立于不败之地,特意去网上爬取了斗图包.在这里 ...

  2. Python爬虫入门教程:爬取妹子图网站 - 独行大佬

    妹子图网站---- 安装requests打开终端:使用命令pip3 install requests等待安装完毕即可使用接下来在终端中键入如下命令?123# mkdir demo # cd demo# ...

  3. Python爬虫-02 request模块爬取妹子图网站

    简介 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)#注意:requests库发送请求将网页内容下载 ...

  4. Python爬虫【三】爬取PC网页版“微博辟谣”账号内容(selenium单页面内多线程爬取内容)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

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

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

  6. python多线程爬取斗图啦数据

    python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...

  7. python爬虫第二弹-多线程爬取网站歌曲

    python爬虫第二弹-多线程爬取网站歌曲 一.简介 二.使用的环境 三.网页解析 1.获取网页的最大页数 2.获取每一页的url形式 3.获取每首歌曲的相关信息 4.获取下载的链接 四.代码实现 一 ...

  8. python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片

    Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...

  9. python爬虫实战之多线程爬取前程无忧简历

    python爬虫实战之多线程爬取前程无忧简历 import requests import re import threading import time from queue import Queu ...

最新文章

  1. element-ui button组件 radio组件源码分析整理笔记(一)
  2. 计算机硬件维修是哪个专业,计算机硬件维护须知
  3. ZooKeeper Java Example(官方例子)
  4. 如何设置游戏分辨率(C++)
  5. 编写高质量代码的50条黄金守则-Day 03(首选is或as而不是强制类型转换)
  6. 如何安装PyCharm【图文详解】
  7. CMOS模拟集成电路笔记(第二部分)
  8. 哈工大末流学渣对于机器人视觉有关知识总结(仅部分)
  9. C# 中通过CancellationTokenSource实现对超时任务的取消
  10. android远程控制灯光,11款可用手机远程控制的智能灯
  11. mysql数据库报错1062_【1062错误 mysql】
  12. 网易云轻舟设计理念与技术选型
  13. Deepin 使用教程:前言
  14. 用Python做一个价值数万的市场调查报告程序,分分钟完成工作
  15. 什么是庖丁解牛的思维?
  16. 打通MySQL架构和业务的任督二脉
  17. == 和 === 有什么区别?
  18. java读取hadoop数据_从Hadoop URL中读取数据_hadoop 数据读取_hadoop读取文件
  19. 渗透修改服务器权限,利用CMS漏洞渗透并获取某服务器权限
  20. 迅雷创业与生存密码(节选自网络)

热门文章

  1. 卷积网络(概念介绍)
  2. 搜索引擎优化之手机网址之家(www.mobi123.cn)
  3. 李玉婷MYSQL进阶08——分页查询
  4. 华为云搭建云端AWVS并实现批量对象扫描
  5. 中职计算机教师学期发展计划,中职计算机教师工作计划.docx
  6. 钉钉机器人调研(群聊机器人)
  7. 极简 Node.js 入门 - 3.2 文件读取
  8. 线程池之ThreadPoolExecutor
  9. 小程序文本框为空自动填写_218个典藏版工程量自动计算表+29个小程序,只发一次,速领...
  10. 使用微波雷达传感器都有那些优势呢?