IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> (纯小白)Python简单爬取图片 -> 正文阅读

[Python知识库](纯小白)Python简单爬取图片

在具体介绍图片爬取之前我们先简单弄个小实验,使用Python来写一个下载图片的程序。

#完整代码
import requests

def down_pic(down_url, picname):
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3868.400 QQBrowser/10.8.4394.400"
    }  # 发送头信息

    req = requests.get(url=down_url, headers=header)#用来获取文本信息
    req.encoding = 'utf-8'#用来解码获取的信息(python解释器要按照utf-8编码的方式来读取程序。)

    with open('%s' % picname, "wb") as f:  # 开始写文件,wb代表写二进制文件
        f.write(req.content)
def main():
    url = 'https://imgs.mmkk.me/img/negxpjbt/4.jpg'#图片链接地址
    picname = '测试.jpg'  # 要保存的图片名称
    down_pic(url, picname)

# 执行函数
main()
  • 代码不多,接下来给大家解释解释以及具体操作步骤
import requests
  • requests是一个很实用的Python HTTP客户端库,Requests是Python语言的第三方的库,专门用于发送HTTP请求
  • 那么我们如何在Pyhton下载和安装所需要的库文件呢?
  • 以PyCharm 2020.1演示(首先得需要你自己新建个项目)
  • 点击 文件
  • 点击设置
  • 点击自己创建的项目,点击Python Interpreter,再点击右侧? +
  • ?搜素所需要找的库,这里输入requests,再点左下角Install Package

? ???等待安装提示完成安装(如果安装失败多重复几次)

?②

    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3868.400 QQBrowser/10.8.4394.400"
    }  # 发送头信息
  • 这个发送头信息目的就是表明你是一台电脑,防止被网页识别你是爬虫。
    req = requests.get(url=down_url, headers=header)#用来获取文本信息
    req.encoding = 'utf-8'#用来解码获取的信息(python解释器要按照utf-8编码的方式来读取程序。)
  • req = requests.get()用来获取接收到的文本信息
  • req.encoding = 'utf-8'用来解析代码
    with open('%s' % picname, "wb") as f:  # 开始写文件,wb代表写二进制文件
        f.write(req.content)
  • 这几行代码是下载图片的命令
def main():
    url = 'https://imgs.mmkk.me/img/negxpjbt/4.jpg'#图片链接地址
    picname = '测试.jpg'  # 要保存的图片名称
    down_pic(url, picname)
  • url?是你下载的图片链接地址(可以改你自己下载的图片的源链接)
  • picname是你下载下来的图片名称
  • 默认下载路径是你Pyhton项目的文件夹内
  • 整体下来你就可以用Python下载一张图片。(当然你得先知道图片源文件的链接)这几行代码是让大家先体验体验。

?????????????????????????????????????????????????????????????????????????③

  • 那我们如何具体实现批量图片的下载呢?(我们最重要的就是获取图片源链接)
  • 从上面操作可以看出来,我们只要获得图片的源链接就可以完成下载(其他细节先忽视不谈)所以我们通过其他的库来解析网页源代码来获取我们想要图片的源链接。
  • #完整代码
    from bs4 import BeautifulSoup# 处理获取的网页信息
    import requests     #下载图片需要
    import urllib.request
    import random
    import os     #系统模块,路径的操作
    import time    #时间模块
    
    
    def main():
    
        baseurl="https://www.mmkk.me/weimei/5550.html"#网址
        getData(baseurl)
    
    #------------------------------------------------------------------------------#
    def askURL(url):
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3868.400 QQBrowser/10.8.4394.400"
            }#发送头信息
        request = urllib.request.Request(url, headers=headers)
        html = ""
        try:
            response = urllib.request.urlopen(request)
            html = response.read().decode("utf-8")#解码
            # print(html)
        except urllib.error.URLError as e:#打印异常信息
            if hasattr(e,"code"):
                print(e,code)
            if hasattr(e,"reason"):
                print(e,reason)
        return html
    #------------------------------------------------------------------------------#
    def getData(baseurl):
            headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3868.400 QQBrowser/10.8.4394.400"
        }  # 发送头信息
            url = baseurl
            html = askURL(url)#获得解析后的内容
            path_name = 'A'  # 创建文件名
            soup = BeautifulSoup(html,"html.parser")#html是一个HTML文档字符串,可以自动补全  lxml是指定该文档的解析方式 python自带的解析器是parser
            for item in soup.find_all('div', attrs={"id": "masonry"}):
                results_imgs = soup.find_all('div', attrs={"data-fancybox": "gallery"})
                for k in range(len(results_imgs)):
                    img = results_imgs[k].attrs['data-src']  # 获取图片网址
                    print(img)
                    # 创建图片保存路径
                    if not os.path.exists(path_name):
                        os.makedirs(path_name, exist_ok=True)
                    file_name = path_name + '_' + str(k+1) + '.jpg'
                    file_name = os.path.join(path_name, file_name)
                    if not os.path.exists(file_name):
                        time.sleep(random.randint(3, 8))
                        r = requests.get(img, headers=headers)  # 下载图片
                        if r.status_code == 200:
                            with open(file_name, 'wb') as f:
                                f.write(r.content)
    
    
    
    
    if __name__ =="__main__":
        main()
        print("任务结束啦!!!")

  • 对于引入的库我都有大致备注,想了解详情的可以自行搜索
  • 对于未下载的库按之前的方法自行下载
  • def askURL(url):
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3868.400 QQBrowser/10.8.4394.400"
            }#发送头信息
        request = urllib.request.Request(url, headers=headers)
        html = ""
        try:
            response = urllib.request.urlopen(request)
            html = response.read().decode("utf-8")#解码
            # print(html)
        except urllib.error.URLError as e:#打印异常信息
            if hasattr(e,"code"):
                print(e,code)
            if hasattr(e,"reason"):
                print(e,reason)
        return html
  • 对于askURL函数复制粘贴即可,就是我们前面所说的发送头信息等操作,打了个包。
  •                 # 创建图片保存路径
                    if not os.path.exists(path_name):
                        os.makedirs(path_name, exist_ok=True)
                    file_name = path_name + '_' + str(k+1) + '.jpg'
                    file_name = os.path.join(path_name, file_name)
                    if not os.path.exists(file_name):
                        time.sleep(random.randint(3, 8))
                        r = requests.get(img, headers=headers)  # 下载图片
                        if r.status_code == 200:
                            with open(file_name, 'wb') as f:
                                f.write(r.content)
  • 这个就是一个创建文件目录,得到图片网址然后下载的图片,图名保存是以 XX_1;XX_2.....的方式
  • 1
  • 我们打开需要爬取的网页,右击检查查看后台代码,不断的展开找到我们需要的网址信息。
  • 最后发现图片网址代码是在data-src之后,所以我们只需要通过代码找到data-src就可以了。
  •         html = askURL(url)#获得解析后的内容
            path_name = 'A'  # 创建文件名
            soup = BeautifulSoup(html,"html.parser")#html是一个HTML文档字符串,可以自动补全  lxml是指定该文档的解析方式 python自带的解析器是parser
            for item in soup.find_all('div', attrs={"id": "masonry"}):
                results_imgs = soup.find_all('div', attrs={"data-fancybox": "gallery"})
                for k in range(len(results_imgs)):
                    img = results_imgs[k].attrs['data-src']  # 获取图片网址
                    print(img)
  • BeautifulSoup是一个HTML/XML的解析器用来解析得到的html
  • 在截图中我们可以看到我们所需要的所有图片信息储存在<div id="masonry"...
  • 然后单个的图片信息储存在<div?data-fancybox="gallery"...中
  • 那么第一个for循环的作用就是找到所有网址包头为?<div id="masonry" (这里只有一个<div?可以不写for循环)
  • results_imgs就是将所有的<div?data-fancybox="gallery"信息写入
  • len(results_imgs)是判断写入<div的数量,这里就是图片的数量
  • 那么第二个for循环就是将<div?data-fancybox="gallery"中的data-src一个个提取出来。
  • 得到data-src之后就获得了网址代码,然后交给后面的代码进行图片下载。
  • 最后总结一下,其实网页中的图片爬取以及其他的信息爬取就是通过对网页结构的分析,然后利用代码进行不断地重复提取,所以对于不同网页需要不同的方法进行爬取。这里举的网址结构比较简单,有的<div会重复出现所以需要仔细观察。
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 16:38:21  更:2021-08-23 16:40:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:14:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码