Python实现图片搜索引擎并本地保存详解

Felix
Felix
发布时间:2026-10-16| 3人浏览过
原创

本文详细介绍如何使用Python编写一个简单的图片搜索引擎。通过发送HTTP请求获取网页源码,利用正则表达式筛选图片链接,并模拟浏览器头信息防止被封禁。最终将筛选出的图片二进制数据保存至本地指定文件夹,实现自动化的图片抓取与存储功能。

前言

整体思路如下:首先向目标网站发起HTTP请求,获取HTML源码;接着从源码中提取所有图片链接;随后对这些图片链接再次发起请求以获取图片数据;最后将获取到的图片数据保存至本地。

思路大致如此,下面直接展示具体代码实现。

本程序主要依赖以下模块:

import requests  #请求库  第三方库,需要安装: pip install requests
import re        #筛选库,py自带,无需安装

接下来需要确定数据获取的接口。

打开浏览器开发者工具(F12),依次点击“网络”、“Fetch/XHR”及“载荷”标签。观察查询参数,可以发现主要包含两个关键参数:word和queryWord,其值均为用户输入的关键词(例如“风景图”)。

我们可以基于这两个查询参数来构建自定义的请求。

为了获取真实的图片URL地址,我们需要对URL中的查询参数进行自定义设置。点击“标头”标签,可以看到之前提到的word和queryWord参数。

接下来,我们设计让用户输入关键词参数值,并将该值传递到URL地址中的word和queryWord参数位置。

在URL地址中,word和queryWord参数的原始值将被占位符{}替代。随后使用Python的format函数将用户输入的参数填入占位符,从而生成最终需要的请求网址。

word = input('请输入要搜索的图片:')
url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=5853806806594529489&ipn=rj&ct=201326592&is=&fp=result&fr=ala&word={}&queryWord={}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&expermode=&nojc=&isAsync=&pn=30&rn=30&gsm=1e&1658411978178='.format(word, word)
print(url) 打开网址就是你输入的内容

下一步,我们需要配置请求头(Headers)以伪装成正常浏览器访问,防止服务器将其识别为爬虫程序并拦截请求。

headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.39'}

程序首先判断目标文件夹是否存在,若存在则覆盖原有内容,若不存在则创建新文件夹;随后发送请求并打印返回的源码以便调试。

if not os.path.exists(files): #假如没有文件执行以下代码:
    os.makedirs(files) #有文件夹则覆盖,没有则创建
 
req=requests.get(url=url,headers=headers).text #获取源码
print(req)  #输出源码

使用正则表达式来匹配图片链接。

res='"thumbURL":"(.*?)"' #正则式
zhengze=re.findall(res,req)   #调用findall函数进行匹配

遍历筛选出的图片URL地址,并逐个发送请求以获取图片数据。

i=1 #计数
for a in zhengze: #遍历刷选后的网址        get_image(a,i) #将遍历后的url地址传到get-image这个函数
    i+=1  #每执行一次加1
    print(a) #打印地址
    response=requests.get(url=a,headers=headers).content #获取二进制文件

设置保存图片的文件类型及存储位置。

    file=files+word+str(i)+'张.jpg' #设置 文件夹 路径+文件名以及类型 (完整地址)
    with open(file,'wb') as f: #写二级制文件类型,并修改变量名
        f.write(response) #把获取到的二进制文件写入
        print(word+str(i)+'张.jpg''保存成功') #提示保存成功

以下是完整的源代码示例:

import re   #筛选url
import requests  #请求
import os  #创建文件夹
word = input('请输入要搜索的图片:')
url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=5853806806594529489&ipn=rj&ct=201326592&is=&fp=result&fr=ala&word={}&queryWord={}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&expermode=&nojc=&isAsync=&pn=30&rn=30&gsm=1e&1658411978178='.format(word, word)
#伪装浏览器
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.39'}
 
files='D:/{}/'.format(word) #创建文件夹路径
if not os.path.exists(files): #假如没有文件执行以下代码:
    os.makedirs(files) #有文件夹则覆盖,没有则创建
req=requests.get(url=url,headers=headers).text #获取源码
res='"thumbURL":"(.*?)"' #正则式
zhengze=re.findall(res,req)  #筛选
i=1 #计数
for a in zhengze: #遍历刷选后的网址        get_image(a,i) #将遍历后的url地址传到get-image这个函数
    i+=1  #每执行一次加1
    print(a) #打印地址
    response=requests.get(url=a,headers=headers).content #获取二进制文件
    file=files+word+str(i)+'张.jpg' #设置 文件夹 路径+文件名以及类型 (完整地址)
    with open(file,'wb') as f: #写二级制文件类型,并修改变量名
        f.write(response) #把获取到的二进制文件写入
        print(word+str(i)+'张.jpg''保存成功') #提示保存成功

接下来查看程序的运行结果。

从输出可以看到,当搜索关键词为“柴犬”时,程序对源码中解析出的每个图片链接发起了请求,并将其保存下来。

那么,保存下来的图片是否确实是柴犬呢?让我们验证一下。

结果显示,保存的确实是柴犬图片,并且程序自动创建了一个对应的文件夹来存放这些图片。

至此,关于使用Python制作图片搜索引擎并保存到本地的详细教程介绍完毕。如需了解更多Python图片搜索引擎相关内容,欢迎搜索本站历史文章或继续浏览后续相关文章,希望大家以后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。