用python做图片搜索引擎并保存到本地

思路:

1、先对目标网站发送请求 获取html源码

2、对源码里面的所有图片链接进行提取

3、再次对图片链接发送请求,获取字节数据

4、保存图片到本地。

     

导入模块:

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

1、查找接口:

打开F12打开开发者工具,点击网络、Fetch/XHR、载荷、依次点下去,可以看到查询参数有两个,分别是:word:风景图        queryWord:风景图

我们可以利用这两个查询参数图片内容自定义

32f478db7a654f3d87f82c202e94be27.png

2、确定我们要爬取的接口

26e670ba91e141d188b9d97583faa2f8.png

3、url查询参数自定义:

可以使用format格式化传参我们使用input函数接受用户输入的参数

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) 打开网址就生成我们需要的网址

4、添加请求头进行伪装,防止被服务器识别为爬虫程序

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'}

5、创建文件夹 判断该文件夹是否存在,存在则创建,不存在则覆盖

然后发送请求并打印源码

if not os.path.exists(files): #假如没有文件执行以下代码:
    os.makedirs(files) #有文件夹则覆盖,没有则创建

#发送请求 获取响应的htm源码
response_html=requests.get(url=url,headers=headers)
print(response_html.text)  #输出源码

6、提取响应html源码里面的图片链接

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

7、遍历正则提取到的图片l链接地址 然后发送请求

file_name=1 #使用数字命名图片

for img_url in img_list: #遍历刷选后的网址      
    
    print(img_url) #打印地址

    #发送请求 获取字节数据
    response=requests.get(url=img_url,headers=headers)

8、设置图片保存类型及保存位置

 #定义文件名和类型 创建的文件夹路径+文件名+类型
    file=files+word+str(file_name)+'张.jpg' 

    #创建图片文件  写入二进制
    with open(file,mode='wb') as f:

        #写入字节数据
        f.write(response.content)

        #提示
        print(word+str(file_name)+'张.jpg''保存成功') 

        #文件名+1 防止重复
        file_name+=1

9、完整源码 复制即可使用,前提安装requests库即可 

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) #有文件夹则覆盖,没有则创建

#获取html源码
response_html=requests.get(url=url,headers=headers)

#正则提取图片
result='"thumbURL":"(.*?)"' #正则式
img_list=re.findall(result,response_html.text)  #筛选

file_name=1 #使用数字命名

for img_url in img_list: #遍历刷选后的网址        get_image(a,i) #将遍历后的url地址传到get-image这个函数
    
    print(img_url) #打印地址

    #发送请求 获取字节数据
    response=requests.get(url=img_url,headers=headers)

    #定义文件名和类型 创建的文件夹路径+文件名+类型
    file=files+word+str(file_name)+'张.jpg' 

    #创建图片文件  写入二进制
    with open(file,mode='wb') as f:

        #写入字节数据
        f.write(response.content)

        #提示
        print(word+str(file_name)+'张.jpg''保存成功') 

        #文件名+1 防止重复
        file_name+=1

我们来看看运行结果怎么样:

d59072d1e9ae460d970dc45f2bde065b.png

 可以看到我搜索的是柴犬,对源码中的每个图片链接进行发送并保存。

那保存的图片是否是柴犬呢?我们看看吧:

928eea7b23054724a5a90cbcf3a57030.png

可以看到保存的就是柴犬图片并且创建了一个名字为柴犬的文件夹!

猜你喜欢

转载自blog.csdn.net/m0_63533079/article/details/126253460
今日推荐