爬虫实例十四 多线程爬取一万张表情包

2023-11-19

import requests
import threading
import os
from bs4 import BeautifulSoup
from queue import Queue
from threading import Thread
"""表情包爬虫"""

#创建一个多线程类
class DownLoad_Images(Thread):
    #重写构造函数
    def __init__(self,queue,path):
        Thread.__init__(self)
        #类属性
        self.queue=queue
        self.path=path

        if not os.path.exists(path):
            os.mkdir(path)

    #重写run方法
    def run(self):
        while True:
            url = self.queue.get()
            try:
                download_images(url,self.path)
            except:
                print('下载失败')
            finally:
                self.queue.task_done()

def download_images(url,path):
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
    }
    #数据请求
    response=requests.get(url=url,headers=headers).text
    #数据筛选
    soup=BeautifulSoup(response,'lxml')
    #find查找指定标签数据
    img_list=soup.find_all('img',class_='ui image lazy')
    #二次提取
    for img in img_list:
        image_name=img['title']
        image_url = img['data-original']
        #下载
        try:
            with open(path+image_name+os.path.splitext(image_url)[-1],'wb') as f:
                image=requests.get(image_url,headers=headers).content
                print("正在保存图片:",image_name)
                f.write(image)
                print('保存成功:',image_name)
        except:
            pass
if __name__ == "__main__":
    _url='https://www.fabiaoqing.com/biaoqing/lists/page/{page}.html'
    urls=[_url.format(page=page) for page in range(1,201)]
    queue=Queue()
    path = './threading_images/'

    for x in range(10):
        worker = DownLoad_Images(queue,path)
        #守护线程
        worker.daemon=True
        worker.start()
    for url in urls:
        queue.put(url)

    queue.join()
    print("下载完成")

网站比较简单,就没必要分析了,也可直接使用requests直接请求,先拿到一个页面,在拿到详情页,拿到所有的url,保存二进制数据就行了,这个爬虫的主要有点是使用多线程加快爬取效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬虫实例十四 多线程爬取一万张表情包 的相关文章

随机推荐

  • flask + 操作Mysql数据库

    安装flask sqlalchemy pymysql模块 1 pip install flask sqlalchemy pymysql Flask SQLAlchemy的介绍 1 ORM Object Relationship Mappin
  • JS字符串替换函数全部替换方法

    color olive JS字符串替换函数 Replace 字符串1 字符串2 1 我们都知道JS中字符串替换函数是Replace 字符串1 字符串2 但是这个函数只能将第一次出现的字符串1替换掉 那么我们如何才能一次性全部替换掉了 将上面
  • 程序员水平分级

    导读 近日 whattofix com刊登了一篇 DanielMarkham的文章 What Level Programmer Are You 文内将参差不齐的程序员按照技术水平分为从 只读 到 上帝 共十一个阶段 以帮助广大程序员找到自身
  • 结队练习源代码

    两个人结队练习源代码 我和同伴都不太适应 两人的习惯不同 在很多方面出现了分歧 但 结对编程还挺有意思的 感觉挺新鲜的 之前都没有这样过 我们轮流编程和监督 两人都参与到整个编程中 我编程时 她会指引编程的方向 提醒我出现的错误 像参数名
  • MIPI DSI的linux kernel驱动原理

    为了点亮一块MIPI屏幕 我们除了要了解MIPI DSI的工作原理之外 大前提是要了解整个MIPI DSI图显系统的组成 更需要清楚点亮一块MIPI屏幕需要做哪些事情 本文会捋顺各个环节所实现的功能以及基于RK3399来分析各个环节实现的原
  • stata面板数据gmm回归_STATA面板数据模型命令

    一 面板数据简介 面板数据是非常常见的数据类型 尤其是在经济 金融的研究中 面板数据 时间序列数据的相关模型 得到了极大地发展和广泛的应用 面板数据 简言之是时间序列和截面数据的混合 严格地讲是指对一组个体 如居民 国家 公司等 连续观察多
  • JavaScript中json对象和string对象之间相互转化

    json对象 复制代码 代码如下 var json aa true bb true var json1 aa b bb cc true dd true 1 js操作json对象 复制代码 代码如下 for var item in json
  • img服务器上的图片不显示不出来,img标签使用绝对路径无法显示图片

    说明 图片的磁盘路径斜杠使用右斜杠 而图片的网络路径使用左斜杠 注意加以区分 如果一张图片属于服务器图片或者网络图片 我们必须在img标签里使用网络路径 只有网络路径才可以通过浏览器发送请求 下载该图片到用户的浏览器临时路径中 才可以显示在
  • C++11-右值引用与移动语义

    右值引用与移动语义 一 右值引用概念 右值引用简单例子 左值引用与右值引用的比较 二 右值引用的使用场景 函数对于其内部局部对象的传值返回 insert push等接口 左值引用与右值引用总结 三 完美转发 四 新的类功能 默认成员函数 d
  • 【云原生 • Prometheus】Prometheus 注册中心Eureka服务发现原理

    云原生 Prometheus Prometheus 注册中心Eureka服务发现原理 云原生 Prometheus Prometheus 注册中心Eureka服务发现原理 概述 Eureka协议实现 总结 云原生 Prometheus Pr
  • Matlab line函数

    matlab line函数 1 比较常见的几种形式 line X Y line X Y Z line X Y Z PropertyName PropertyValue line PropertyName PropertyValue low
  • cocos命令生成apk

    1 配置好cocos命令中需要的andrid 环境命令 这些太普遍就不啰嗦 2 adt或许没有 zipalign exe 在生成 release版中需要这个文件来生成apk 路径D adt sdk tools 没有就下载一个 3 值得注意的
  • 深入了解NumPy 高级索引

    更多编程教程请到 菜鸟教程 https www piaodoo com 友情链接 好看站 http www nrso net NumPy 比一般的 Python 序列提供更多的索引方式 除了之前看到的用整数和切片的索引外 数组可以由整数数组
  • 分享 20 道关于 React 开发相关的面试题及答案

    React 面试可能你会觉得有点吓人 为了帮助您自信并准备好迎接下一次面试 我们列出了 20 个常见的 React 问题和参考答案 希望通过本篇文章的内容 能够帮助你重新温习你的 React 知识 复习重要概念 并为你的下一次面试做好更充分
  • 微信小程序并发的个人见解

    var http get url obj undefined gt var promise new Promise resolve reject gt wx request url baseUrl url method GET header
  • CSS 选择器

    h1 class center 标题居中 h1 p class center color 段落居中 颜色为红色 p 如果我们要在 html 元素中设置 css 样式 那么就需要需要在元素中设置选择器 即决定当前元素使用哪种样式 一般来说 常
  • django实训总结

    不知不觉中 一个学期又要结束了 上学期结束时的日子仿佛历历在目 没想到又迎来了一个学期的结束 这个学期依旧学习了python 让我继续加深了对python这门课的认识 实训让我觉得十分有意思 像打开了新的知识大门 Django结合了许多以前
  • 大学生竞赛项目

    编程 蓝桥杯 报名时间 10月 报名网址 https dasai lanqiao cn 中国软件杯大学生软件设计大赛 报名时间 5月 报名网址 http www cnsoftbei com 中国高校计算机大赛 报名时间 11月 报名网址 h
  • 钉钉开发之使用HTTP请求获取你的公网出口IP

    访问别人提供的网络服务时 对方出于安全性方面的考虑 可能会对请求的IP进行白名单限制 这时候需要提供机器的出口IP 比如目前微信公众号对于访问其接口需要先绑定开发者的服务器IP 这个IP实际上就是开发者服务器的出口IP 但是获取当前机器的公
  • 爬虫实例十四 多线程爬取一万张表情包

    import requests import threading import os from bs4 import BeautifulSoup from queue import Queue from threading import T