【python】分享一个多线程爬虫爬取表情包的代码

【python】分享一个多线程爬虫爬取表情包的代码多线程爬虫可比单线程爬虫爬取速度多了好几倍 单线程就好比是一辆车来回运输货物 而多线程则是多辆车同时运输货物 需要用到的库 requests lxml os threading queue 该代码还能把数据存储到电脑桌面 明天添加 使用了线程池来高效爬取

需要用到的库:requests、lxml、os、threading、queue

多线程爬虫可比单线程爬虫爬取速度多了好几倍,单线程就好比是一辆车来回运输货物,而多线程则是多辆车同时运输货物。效率自然可不一样

该代码还能把数据存储到电脑桌面(明天添加)

使用了线程池来高效爬取 

import requests
from lxml import etree
import os
import threading
from queue import Queue
b = 0
anquanquurls = Queue(100)
anquanqunames = Queue(100)
yeshu=int(input('请输入你要爬取的页数:'))
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    'Referer':'https://www.doutula.com/',
    }
def geturl():
    global yeshu,names,headers
    for i in range(yeshu):
        urll = 'https://www.pkdoutu.com/article/list/?page={}'.format(i+1)
        print('正在获取第{}页所有url'.format(i+1))
        response = requests.get(urll,headers=headers)
        content = response.content.decode('utf8')
        html=etree.HTML(content)
        urlss = html.xpath('//div/div/img/@data-backup')
        names = html.xpath('//div[@class="random_article"]/div/img/@alt')
        for url in urlss:
            anquanquurls.put(url)
        for name in names:
            anquanqunames.put(name)
def xiazai():
    global names,b,headers
    while 1:
        url = anquanquurls.get()
        name = anquanqunames.get()
        if len(name)==0:
            hou = os.path.splitext(url)[1]
            response = requests.get(url,headers=headers)
            content = response.content
            path = "{}{}".format(b,hou)
            with open(path,mode='wb')as f:
                f.write(content)
            print('{}{}  已爬取'.format(b,hou))
            b+=1
        else:
            hou = os.path.splitext(url)[1]
            response = requests.get(url,headers=headers)
            content = response.content
            path = "{}{}".format(name,hou)
            with open(path,mode='wb')as f:
                f.write(content)
            print('{}{}  已爬取'.format(name,hou))
def duoxiancheng():
    global names,b,headers
    t = threading.Thread(target=geturl)
    t.start()
    for i in range(5):
        t = threading.Thread(target=xiazai)
        t.start()
duoxiancheng()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215050.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午2:48
下一篇 2026年3月18日 下午2:49


相关推荐

  • J2EE开发笔记(一)—— J2EE开发环境配置

    J2EE开发笔记(一)—— J2EE开发环境配置最近电脑重新装了系统 所有 J2EE 相关软件都需要重新安装配置 现将其中部分软件安装配置过程记录如下 方便参考查阅 tips 所有软件均可在官网免费下载 尽量不要使用第三方提供的软件包 Java 开发环境配置 JDK 安装完成后 在系统环境变量中添加以下变量 JAVA HOME JDK 的安装目录 例如 C ProgramFiles Java jdk1 8 0 201Path JAVA

    2026年3月17日
    2
  • Vue 导入qrcodejs2库生成二维码

    Vue 导入qrcodejs2库生成二维码1 下载安装 qrcodejs2 包 npmiqrcodejs 导入 importQRCode qrcodejs2 3 html divclass qrcode id qrcode class 是我的样式可以忽略 但是 id 一定要下 4 使用 以下是我的代码 需求是该页面就会显示二维码 我用的是 s divclass qrcode id qrcode

    2026年3月18日
    2
  • 公网IP和内网IP如何分辨?

    公网IP和内网IP如何分辨?公网ip和内网ip之间如何分辨,公网ip和内网ip之间有什么区别?很多人都知道根据网络使用的范围不同又分为公有网络和私有网络。公有网络就是指处于公有网络的电脑的IP是“互联网”中能够识别到的地址;而私有网络指公有网络的机器不能识别到的机器。本文主要给大家介绍公网ip和内网ip的相关知识。

    2022年4月29日
    62
  • SwipeRefreshLayout与RecyclerView的巧夺天工

    SwipeRefreshLayout与RecyclerView的巧夺天工平常开发我们需要使用ListView下拉刷新或者其下拉加载的时候,不是自己写就是用别人写好了,但是编程中有一点是不变的,就是一般封装好的东西,其扩展性极低,比如你使用xutils,imageloader等开源框架的时候,它允许你扩展吗?答案当然是否,那我想要实现自己非常酷酷的ListView时候,只有自己动手实现。不过,谷歌在2015在v4开发包加入豪华套餐SwipeRefreshLayout供

    2022年6月25日
    40
  • echarts折线图、echarts折线图自定义样式

    echarts折线图、echarts折线图自定义样式html 页面引用 js scripttype text javascript src assets js echarts min js css 和 html padding 0 margin 0 border 0 scripttype text

    2026年3月18日
    2
  • SM4加密解密_iunlocker解锁网站

    SM4加密解密_iunlocker解锁网站最近工作需要用到SM4加密解密算法,所以研究了一下。内容主要参考自:https://blog.csdn.net/weixin_34411563/article/details/86000381首先介绍一下SM4加密算法SM4是我们自己国家的一个分组密码算法,是国家密码管理局于2012年发布的。http://www.cnnic.net.cn/jscx/mixbz/sm4/,具体的加密很麻…

    2022年10月6日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号