python多线程爬取图片

2023-02-27 00:00:00 python 图片 多线程

以下是一个简单的多线程爬取图片的示例代码:

import requests
import threading
import os

def download(url, name):
    r = requests.get(url, stream=True)
    with open(name, 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)

def main():
    urls = [
        'https://example.com/image1.jpg',
        'https://example.com/image2.jpg',
        'https://example.com/image3.jpg',
        # ...
    ]
    threads = []
    for url in urls:
        name = url.split('/')[-1]
        thread = threading.Thread(target=download, args=(url, name))
        thread.start()
        threads.append(thread)
    for thread in threads:
        thread.join()
    print('所有图片已下载完成')

if __name__ == '__main__':
    main()

在这个示例中,我们定义了一个下载图片的函数 download,它接受一个图片的 URL url 和保存的文件名 name,使用 requests 库下载图片,并将其保存到指定的文件中。然后定义了图片的 URL 列表 urls,并创建了线程列表 threads。在创建线程时,我们使用 split() 函数获取图片文件名,并传递给下载函数 download。在主程序中,我们启动所有线程,并使用 join() 方法等待线程执行完成。最后输出下载完成信息。

需要注意的是,在下载大量图片时,可能会遇到网络瓶颈等问题,需要考虑性能优化。同时,在多线程爬虫中,也需要注意网站的反爬机制,以避免被封 IP 等问题。

相关文章