首页 > 其他分享 >爬虫-多线程抓取图片

爬虫-多线程抓取图片

时间:2024-01-16 20:14:54浏览次数:24  
标签:抓取 url pic 爬虫 li download import 多线程

一、目的

  利用多线程的方式爬取图片,地址:其他电脑动态壁纸 - 其他桌面动态壁纸 - 元气壁纸 (cheetahfun.com)

二、分析

  F12分析网页结构,图片的地址都在class = "flex flex-wrap justify-between font-normal"标签中的li里面,只需要在a标签中img中

   根据前面学过的内容,可以先写出单线程爬取图片的方式,在此基础上添加多线程

# -*- coding: utf-8 -*-
#第一步:导包
from concurrent.futures import ThreadPoolExecutor
import requests
from lxml import etree
import time

headers = {
    "User-Agent":
    "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36 Edg/120.0.0.0"
}

def download(url):
    resp = requests.get(url,headers)
    html = etree.HTML(resp.text)
    li_list = html.xpath('//*[@id="1"]/main/div[2]/div/section/ul/li')

    for li in li_list:
        pic_url = li.xpath('./div/a/img/@src')[0]
        pic_name = li.xpath('./div/a/img/@title')[0]
        # print(pic_name)
        # print(pic_url)
        with open("E:/元气图片/" + pic_name + ".png", mode="wb")as fp:
            fp.write(requests.get(pic_url).content)
            print(pic_name + "下载完成!!")
            time.sleep(1)

if __name__ == '__main__':
    with ThreadPoolExecutor(5) as t:
        for i in range(1,10):
            url_Temp = f"https://mbizhi.cheetahfun.com/dn/c11d/p{i}"
        # print(url)
            t.submit(download, url=url_Temp)

注:多线程需要导包

from concurrent.futures import ThreadPoolExecutor

download方式,可以开启多个线程去同时调用此方法来请求获取图片,

    with ThreadPoolExecutor(5) as t:
        for i in range(1,10):
            url_Temp = f"https://mbizhi.cheetahfun.com/dn/c11d/p{i}"
            t.submit(download, url=url_Temp)

这里的要开启5个线程去调用download方法

标签:抓取,url,pic,爬虫,li,download,import,多线程
From: https://www.cnblogs.com/zp513/p/17968425

相关文章

  • 多线程(Java.Thread)学习(完结)
    多线程(Java.Thread)学习线程简介:1、线程是独立执行的路径2、程序运行时有很多后台进程比如主线程、young.gc、full.gc()3、main是主线程,系统入口,用于执行整个程序4、一个进程中、如果开辟多个线程,线程的运行由调度器安排调度、调度器的先后顺序不能人为干预5、对同一份资......
  • MFC---多线程(线程死锁)
    死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。#include<stdio.h>#include<windows.h>#include<process.h>intiTickets=5000;CRITICAL_SECTIONg_csA;CRITICAL_SECTIONg_csB;//A窗口B窗口DWORDWINAPISellT......
  • MFC---多线程(线程同步之信号量)
    内核对象的状态触发状态(有信号状态),表示有可用资源。未触发状态(无信号状态),表示没有可用资源工作原理以一个停车场是运作为例。假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的车则必须在入口等待,此后来......
  • MFC---多线程(各种线程同步的比较总结)
    windows线程同步的方式主要有四种:互斥对象Mutex、事件对象event和关键代码段criticalSection,信号量对于上面介绍的三种线程同步的方式,它们之间的区别如下所述:●互斥对象和事件以及信号量都属于内核对象,利用内核对象进行线程同步时,速度较慢,但利用互斥对象和事件对象这样的内核对......
  • MFC---多线程(qq群聊的服务端和客户端)
    服务端//多线程+socket编程的一个联合使用//用互斥体进行线程同步socket编程临界区全局变量#include<WinSock2.h>#include<iostream>#include<windows.h>#include<process.h>#pragmacomment(lib,"ws2_32.lib")#defineMAX_CLNT256#defineMAX_BUF_S......
  • MFC---多线程(基本概念和线程同步之互斥对象)
    基本概念引入一个题目:Bingo老师提了一个需求:打印每隔3秒叫martin老师做一次俯卧撑持续20次每隔1秒钟叫rock老师甩头发持续50次每隔2秒钟叫西西老师唱歌持续40次线程(CPU调度和分派的基本单位)线程是在进程中产生的一个执行单元,是CPU调度和分配的最小单元,其在同一个进程中与......
  • MFC---多线程(线程同步之关键代码段)
    关键代码段,也称为临界区,工作在用户方式下。它是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权。通常把多线程中访问同一种资源的那部分代码当做关键代码段。1.初始化关键代码段调用InitializeCriticalSection函数初始化一个关键代码段。InitializeCriticalSection(......
  • python爬虫利器之Playwright
    Playwright是微软在2020年初开源的新一代自动化测试工具,它的功能类似于Selenium、Pyppeteer等,都可以驱动浏览器进行各种自动化操作。它的功能也非常强大,对市面上的主流浏览器都提供了支持,API功能简洁又强大。虽然诞生比较晚,但是现在发展得非常火热。1.Playwright的特点......
  • 每日总结2024/1/15(爬虫学习)
    原文链接python爬虫-Python3.x+Fiddler抓取APP数据-学习分享-SegmentFault思否我爬取的为浏览器数据  可以看到在这里我们成功爬取到了浏览器数据,但是在实现python中爬取数据遇到了很多版本以及配置缺少的问题,同时我的版本中http为2,不知道有没有其他影响,代码目前......
  • 还不敢写多线程程序?看看Go如何让并发控制简单有趣
    还不敢写多线程程序?看看Go如何让并发控制简单有趣原创 萤火架构 萤火架构 2024-01-1219:50 发表于北京 听全文所谓并发控制,就是同一程序进程内不同线程间访问相同资源时的冲突处理,有时也称为进程内同步。比如一个简单的内存累加计数操作,如果不进行同步,不同的线程可......