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

本文介绍了如何使用Python进行多线程爬虫,以提高从斗图啦网站抓取最新表情包的速度。首先分析需求,创建解析线程和下载线程。接着准备空列表存放URL,构造解析图片URL和下载图片的函数,并在多线程操作中使用线程锁。为了避免线程启动时因URL列表为空导致的问题,采取了在下载线程启动前暂停的方法。最后,为了防止解析速度过快,还在线程间加入了间隔时间。
摘要由CSDN通过智能技术生成

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

网站: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 time


URL = 'https://www.doutula.com/photo/list/?page={}'
URL_LIST = []
PAGE_LIST = []
LOCK  = threading.Lock()


headers = {
   
	'User-Agent': 'Mozilla/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值