Python爬虫07_Requests爬取图片

一、爬取网页图片

即用 requests 下载一张网络图片,并以当前时间戳作为文件名保存到本地,初步理解实现程序化自动爬取图片数据。

python 复制代码
import requests
import time
import datetime

if __name__ == "__main__":
    #爬取图片数据
    url = 'https://pics5.baidu.com/feed/023b5bb5c9ea15ce37c1c2b207b6b5fe3b87b2a5.jpeg@f_auto?token=be26647100a6ad7e4a182c2f70dcebf7'
    #伪造userAgent
    userAgent = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0'}
    #content返回的是二进制形式的图片数据
    #text(字符串),content(二进制),json()(对象)
    imgData = requests.get(url=url,headers=userAgent).content

    #获取当前日期和时间,时间戳形式
    current_time = time.time()
    current_timeStr = str(current_time)
    print("当前时间戳为:", current_timeStr)
    print('------------------------------------------------------------------')

    #获取当前时间,格式化可读形式
    dataTime = datetime.datetime.now()
    print("格式化时间为:", dataTime)
    print('------------------------------------------------------------------')

    #时间戳还原成可读日期时间格式
    timestamp = 1708009107.9769785  # 输入要还原的时间戳
    dt_object = datetime.datetime.fromtimestamp(timestamp)
    formatted_time = dt_object.strftime('%Y-%m-%d %H:%M:%S')
    print("还原后的时间为:", formatted_time)
    print('------------------------------------------------------------------')


    with open('E:/Reptile/img/'+ current_timeStr +'.jpeg','wb') as fp:
        fp.write(imgData)
        print("over! 保存成功!")

二、图片数据解析

必须以二进制方式返回图片数据的核心原因是:图片文件在底层就是一串原始字节(binary stream),而不是文本字符串;任何字符编码(如 UTF-8、GBK)都会破坏这些字节的原始顺序,导致图片打不开或损坏。
1、图片不是文本

text 属性会把服务器返回的内容先按某种字符编码(默认 UTF-8)解码成字符串,遇到非文本字节就可能丢码、替换或截断,从而破坏图片格式。
2、二进制 = 无损拷贝

使用 .content 直接拿到 未经任何编码转换的原始字节,写入文件时才能 1:1 还原服务器发来的位图数据。
3、文件系统写图片需要 bytes

open(..., 'wb') 要求写入 bytes 类型;如果误用 text(str 类型),Python 会尝试用默认编码把字符串再编码成字节,结果必然失真。

二进制是保证图片完整性的唯一正确方式。

相关推荐
Wx-bishekaifayuan7 分钟前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
青少儿编程课堂36 分钟前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
计算机编程指导师1 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
Wx-bishekaifayuan1 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe1 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码1 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
WeiXin_DZbishe1 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
沫璃染墨2 小时前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
达子6663 小时前
RUST 图解 第 3 章:通用编程概念(Common Programming Concepts)
开发语言·算法·rust