Python 爬取网页图片详解流程

 更新时间:2021年11月09日 10:25:05   作者:不侠居  
没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来。今天网上冲浪看到很多美图,可是图片有点多,不想一张一张地复制粘贴,怎么办呢?办法总是有的,即便没有我们也可以创造一个办法

简介

快乐在满足中求,烦恼多从欲中来

记录程序的点点滴滴。
输入一个网址从这个网址中解析出图片,并将它保存在本地

流程图

在这里插入图片描述

程序分析

解析主网址

def get_urls():
    url = 'http://www.nipic.com/show/35350678.html' # 主网址
    pattern = "(http.*?jpg)"
    header = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
    }
    r = requests.get(url,headers=header)
    r.encoding = r.apparent_encoding
    html = r.text
    urls = re.findall(pattern,html)
    return urls

url 为需要爬的主网址
pattern 为正则匹配
header 设置请求头
r = requests.get(url,headers=header) 发送请求
r.encoding = r.apparent_encoding 设置编码格式,防止出现乱码

属性 说明
r.encoding 从http header中提取响应内容编码
r.apparent_encoding 从内容中分析出的响应内容编码

urls = re.findall(pattern,html) 进行正则匹配
re.findall(pattern, string, flags=0)
正则 re.findall 的简单用法(返回string中所有与pattern相匹配的全部字串,返回形式为数组)

下载图片并存储

def download(url_queue: queue.Queue()):
    while True:
        url = url_queue.get()
        root_path = 'F:\\1\\' # 图片存放的文件夹位置
        file_path = root_path + url.split('/')[-1] #图片存放的具体位置
        try:
            if not os.path.exists(root_path): # 判断文件夹是是否存在,不存在则创建一个
                os.makedirs(root_path)
            if not os.path.exists(file_path): # 判断文件是否已存在
                r = requests.get(url)
                with open(file_path,'wb') as f:
                    f.write(r.content)
                    f.close()
                    print('图片保存成功')
            else:
                print('图片已经存在')
        except Exception as e:
            print(e)
        print('线程名: ', threading.current_thread().name,"url_queue.size=", url_queue.qsize())

此函数需要传一个参数为队列
queue模块中提供了同步的、线程安全的队列类,queue.Queue()为一种先入先出的数据类型,队列实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。
url_queue: queue.Queue() 这是一个队列类型的数据,是用来存储图片URL
url = url_queue.get() 从队列中取出一个url
url_queue.qsize() 返回队形内元素个数

全部代码

import requests
import re
import os
import threading
import queue
def get_urls():
    url = 'http://www.nipic.com/show/35350678.html' # 主网址
    pattern = "(http.*?jpg)"
    header = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
    }
    r = requests.get(url,headers=header)
    r.encoding = r.apparent_encoding
    html = r.text
    urls = re.findall(pattern,html)
    return urls
def download(url_queue: queue.Queue()):
    while True:
        url = url_queue.get()
        root_path = 'F:\\1\\' # 图片存放的文件夹位置
        file_path = root_path + url.split('/')[-1] #图片存放的具体位置
        try:
            if not os.path.exists(root_path):
                os.makedirs(root_path)
            if not os.path.exists(file_path):
                r = requests.get(url)
                with open(file_path,'wb') as f:
                    f.write(r.content)
                    f.close()
                    print('图片保存成功')
            else:
                print('图片已经存在')
        except Exception as e:
            print(e)
        print('线程名:', threading.current_thread().name,"图片剩余:", url_queue.qsize())

if __name__ == "__main__":
	url_queue = queue.Queue()
	urls = tuple(get_urls())
	for i in urls:
	    url_queue.put(i)
	t1 = threading.Thread(target=download,args=(url_queue,),name="craw{}".format('1'))
	t2 = threading.Thread(target=download,args=(url_queue,),name="craw{}".format('2'))
	
	t1.start()
	t2.start()

到此这篇关于Python 爬取网页图片详解流程的文章就介绍到这了,更多相关Python 爬取网页图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python数据分析之Python和Selenium爬取BOSS直聘岗位

    Python数据分析之Python和Selenium爬取BOSS直聘岗位

    今天教各位小伙伴怎么用Python和Selenium爬取BOSS直聘岗位,文中有非常详细的代码示例,对正在学习python爬虫和数据分析的小伙伴有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • python调用subprocess模块实现命令行操作控制SVN的方法

    python调用subprocess模块实现命令行操作控制SVN的方法

    这篇文章主要介绍了使用python的subprocess模块实现对SVN的相关操作,通过设置GitSvn类,在该类下自定义执行SVN常规操作的方法,需要的朋友跟随小编一起看看吧
    2022-09-09
  • pytorch中的自定义反向传播,求导实例

    pytorch中的自定义反向传播,求导实例

    今天小编就为大家分享一篇pytorch中的自定义反向传播,求导实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Pytorch 实现自定义参数层的例子

    Pytorch 实现自定义参数层的例子

    今天小编就为大家发信息一篇Pytorch 实现自定义参数层的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python退出While循环的3种方法举例详解

    Python退出While循环的3种方法举例详解

    在每次循环结束后,我们需要检查循环条件是否满足。如果条件满足,则继续执行循环体内的代码,否则退出循环,这篇文章主要给大家介绍了关于Python退出While循环的3种方法,需要的朋友可以参考下
    2023-10-10
  • python 动态渲染 mysql 配置文件的示例

    python 动态渲染 mysql 配置文件的示例

    这篇文章主要介绍了python 动态渲染 mysql 配置文件的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • python统计列表中元素出现次数的三种方法

    python统计列表中元素出现次数的三种方法

    这篇文章主要介绍了python统计列表中元素出现次数的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧
    2024-08-08
  • Python Json数据文件操作原理解析

    Python Json数据文件操作原理解析

    这篇文章主要介绍了Python Json数据文件操作原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python 多线程处理任务实例

    Python 多线程处理任务实例

    这篇文章主要介绍了Python 多线程处理任务,下面文章利用一个真实实例围绕Python 多线程处理任务的相关资料展开内容,需要的朋友可以参考一下
    2021-11-11
  • Python教程之全局变量用法

    Python教程之全局变量用法

    这篇文章主要介绍了Python教程之全局变量用法,结合实例形式分析了Python全局变量的定义、修改等使用方法及注意事项,需要的朋友可以参考下
    2016-06-06

最新评论