多线程爬取图片

news/2024/7/19 9:28:21 标签: python, 爬虫, 开发语言

参考:
Python threading实现多线程 原理 基础篇

python 多线程爬取网站图片(详解)

【Python】threading控制线程的数量

1.读取url列表,读取文件夹已经存在文件个数,得到未爬虫列表
2.多线程爬取 、存储

不固定线程数量

python">import time
import datetime
import os
import  requests
import threading

import pandas as pd

from tqdm import tqdm

from queue import Queue



url_queue = Queue() #队列

pic_folder = './crawl_pic/' 
pic_file = pic_folder + 'pic.csv'
error_pic_file = pic_folder + 'pic_error.txt'

pic_url = pd.read_csv(pic_file)
pic_url = pic_url['url'].values
 
files = os.listdir(pic_folder)  # 读入文件夹
num_png = len(files)   # 统计文件夹中的文件个数 

def download_pic():
    '''
    下载图片
    :param url:
    :return:
    '''
    url  = url_queue.get() 
    try:

        response = requests.get(url)
        # 获取的文本实际上是图片的二进制文本
        img = response.content
        time.sleep(3)
    except Exception as ex:
        print("--------出错继续----")
        with open(error_pic_file, 'a+', encoding='utf-8') as f:
            f.write(url + '\n')
    else:
        with open(path, 'wb') as f:
            f.write(img)
    finally:
        url_queue.task_done()
        
 
for url in pic_url[num_png:]:   
    url_queue.put(url)# 放入队列

for url in pic_url[num_png:]:  
    t_url = threading.Thread(target= download_pic())
    t_url.start() # 启动线程

url_queue.join() #等待实例完成

固定线程数量

python">import time
import datetime
import os
import  requests
import threading

import pandas as pd

from tqdm import tqdm

from queue import Queue

url_queue = Queue() #队列

pic_folder = './crawl_pic/' 
pic_file = pic_folder + 'pic.csv'
error_pic_file = pic_folder + 'pic_error.txt'

pic_url = pd.read_csv(pic_file)
pic_url = pic_url['url'].values
 
files = os.listdir(pic_folder)  # 读入文件夹
num_png = len(files)   # 统计文件夹中的文件个数 

def download_pic(url):
    '''
    下载图片
    :param url:
    :return:
    '''
    pool_sema.acquire()  # 加锁,限制线程数
    try:
        response = requests.get(url)
        # 获取的文本实际上是图片的二进制文本
        img = response.content
        time.sleep(3)
    except Exception as ex:
        print("--------出错继续----")
        with open(error_pic_file, 'a+', encoding='utf-8') as f:
            f.write(url + '\n')
    else:
        with open(path, 'wb') as f:
            f.write(img)
    finally:
        pool_sema.release()  # 解锁

max_connections = 2  # 定义最大线程数
pool_sema = threading.BoundedSemaphore(max_connections)  # 使用Semaphore方法

thread_list = []
 
for url in pic_url[num_png:]:  # 12个任务
    t = threading.Thread(target=download_pic, args=[url])
    thread_list.append(t)

for t in thread_list:
    t.start()  # 调用start()方法,开始执行

for t in thread_list:
    t.join()  # 子线程调用join()方法,使主线程等待子线程运行完毕之后才退出

http://www.niftyadmin.cn/n/1093709.html

相关文章

JavaScript与node.js简单介绍

JavaScript教程 JavaScript简介 JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言&#xf…

pyppeteer windows服务器部署

1.下载64位python3.7 官网 https://www.python.org/downloads/release/python-370/(较慢) 其他:https://www.pcsoft.com.cn/soft/177699.html 2.python -m pip install --upgrade pip pip install -i http://pypi.douban.com/simple/ --trus…

模板——高精系列

存放一下高精的模板 高精加&#xff1a; #include<iostream> #include<cstdlib> #include<cstdio> #include<cstring> using namespace std; int a[1001],b[1001],c[1001],lena,lenb; char a1[1001],b1[1001]; int main(){gets(a1);gets(b1);lenastrle…

特征提取介绍和方法

参考&#xff1a;《数据科学手册》–Field Cady 特征工程在实际业务中的应用 -Datawhale 这篇特征工程的文章–全网最通透 -kaggle竞赛宝典 特征工程定义 寻找基本特征&#xff0c;构建组合特征有些区分不同label的样本。 建模就是从数据中学习到insights过程&#xff0c;需要…

代码整洁之道笔记-把函数视作对象

参考&#xff1a;《代码整洁之道》 一等对象 在运行时创建 能赋值给变量或数据结构中的元素 能作为参数传给函数 能作为函数的返回结果 高阶函数 接受函数为参数&#xff0c;或者把函数作为结果返回的函数是高阶函数 map 函数就是一例 filter filter(lambda n: n % 2…

移动开发发展方向-----Hybird混合开发3大方案

移动开发发展方向-----Hybird混合开发3大方案转载于:https://www.cnblogs.com/softwarelanguagebs/p/6228543.html

sublime scala,java,python配置

运行ctrlb scala 安装 版本&#xff1a; https://scala-lang.org/download/all.html 2.11.12 下载地址&#xff1a;https://scala-lang.org/download/2.11.12.html 安装&#xff1a;https://blog.csdn.net/superman_xxx/article/details/51535110 环境变量 SCALA_HOME,PAT…

启动service network restart失败报错Failed to activate service ‘org.bluez‘:解决

参考&#xff1a;https://ubuntuforums.org/showthread.php?t2336447 查看状态 systemctl status network.service查看日志journalctl -xe 解决 systemctl stop bluetooth.service systemctl disable bluetooth.service重启网卡 service network restart