2020/4/11 斗图啦多线程爬取表情包

2024-01-19 02:48

本文主要是介绍2020/4/11 斗图啦多线程爬取表情包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【斗图啦多线程爬虫思路】

网站:https://www.doutula.com/photo/list/?page=1
爬取的是最新的表情包这个页面的图片

思路
1.分析需求,创建解析线程和下载线程
因为按照顺序爬取速度比较忙,所以也是第一次使用多线程来爬取,加快爬取速度。
在这里插入图片描述
2.空列表的预先准备
把初始url地址构造好后统一放入到一个空列表中,方便调用多个线程解析
把线程解析后的url统一放入另一个空列表中,方便调用多个线程下载

3.构造解析图片url地址函数
这个网站数据解析相对比较简单,就是普通的页面。
因为是多线程,所以函数里面在获取列表里面的值的时候要加上线程锁,获取完毕后把锁揭开。
用list.pop()方法,每次只请求列表最后一个的数据,如果列表里面是空值,则结束循环。

这里有个注意问题:最开始启动线程的时候,放url地址的列表最开始是空的,如果直接同时,会导致线程获取不到数据而直接结束。
所以解决的办法是在下载线程启动前停顿个几秒钟,让列表里面有写入值,然后才能解析。
在这里插入图片描述
4、构造下载图片函数
下载图片的函数原理跟解析图片函数的原理基本一致

5.线程之间尽量间隔一点时间
解析太快有时候可能会出现问题,所以尽量加一点间隔时间。

最终代码如下:

```python
import requests
from lxml import etree
import urllib.request
import os
import threading
import timeURL = 'https://www.doutula.com/photo/list/?page={}'
URL_LIST = []
PAGE_LIST = []
LOCK  = threading.Lock()headers = {'User-Agent'

这篇关于2020/4/11 斗图啦多线程爬取表情包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/621051

相关文章

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH