使用Python模拟百度图片搜索,自动下载图片保存到文件夹,采用JS方式(文章最后附上完整源码下载)


  • 注重版权,转载请注明原作者和原文链接
  • 作者:Bald programmer

功能展示

在这里插入图片描述
在这里插入图片描述

前言

爬虫的介绍

本次代码案例的原理是通过爬虫来实现的,所以首先要了解什么是 爬虫? 爬虫是干嘛的?

  • 网络爬虫,又称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动请求万维网网站并提取网络数据得到程序或脚本。

  • 用途
    在这里插入图片描述

  • 大部分爬虫工作原理

Created with Raphaël 2.2.0 开始 初始URL 获取网页 提取新的URL放入URL队列 满足停止条件? 结束 yes no


正文

首先了解百度图片搜索结构

  • 打开百度,来到百度图片搜索界面
    百度图片搜索界面

  • 点击右键,选择 检查,或者按下快捷键 F12 来到开发者工具界面

  • 点击最上方的 Network, 在百度图片输入框输入你想要搜索的图片,点击 百度一下
    在这里插入图片描述

  • 有的可能会显示在左边或者右边,这个可以设置的,点击顶栏最右边的 三个点, Dock side选择自己舒服的展开样式
    在这里插入图片描述

  • 搜索之后可以在 开发者工具 下方看到有变化了,这些是网页的资源,我们筛选一下,点击选择 XHR
    在这里插入图片描述

  • 这时候我们将光标放在图片区域,向下滑动加载更多的图片,按下 Crtl+R 刷新这时候我们会看到很多 acjson?······的数据
    在这里插入图片描述

  • 随便点开一个,这里我们可以看到在Headers中有很多参数,这里就是我们今天的重点所在
    在这里插入图片描述
    这里我就只介绍几个比较重要的,想要详细了解每个参数的可以点击下方链接


作者:宋学慧
链接:https://blog.csdn.net/weixin_45598506/article/details/112917752


首先是General中的参数
  Request URL -->发送请求的链接
  Request Method -->发送请求的类型(GET、POST等等)
  Status Code -->状态码(200表示请求成功)
接下来是Request Headers(请求头)的参数
  User-Agent -->客户端使用的操作系统和浏览器的名称和版本(用来模拟器浏览器访问)
  Cookie -->用来辨别用户身份
最后就是我们今天的重点Query String Parameters的参数
  queryWord -->搜索词(可以看到这里就是我们在百度图片输入框输入的词)
  pn -->表示页数(值为页数*30)
  rn -->表示一页显示的图片数量
  gsm -->表示一个十六进制值(pn转换为16进制取前两位)

通过几个不同的 acjson?···发现,他们的Query String Parameters除了queryWord,pn,gsm这三个参数的值不相同,其他都是一样的
由此我们可以设计由用户输入queryWord,自定义pn来实现自动图片搜索,废话不多话,上代码

代码设计

  • 首先导入我们要用到的库,定义参数
# -*- coding: utf-8 -*-
"""
@author: 袁德伟
@age: 21
@Data: 2021

Created on Wed Feb 10 22:28:28 2021
"""

import os #文件夹的操作
import time #设置间隔时间
import shutil #删除文件夹操作
import requests #发送请求

quantity = 0 #页数初始化
word = "" #搜索词
file = "" #文件夹名称
headers = {
    
    }   #头部信息
all_list = []   #存放图片链接
parameters = [] #存放每页XHR接口的param
  • 接着是两个重要参数的定义(这里headers因参数太多只展示部分)
headers = {
    
    
            'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/87.0.4280.88Safari/537.36',
        }
parameters = {
    
    
            'queryWord':self.word, #搜索词(用户输入)
            'word':self.word, #搜索词(用户输入)
            'pn':pn, #页数(用户输入)
            'rn':'30',
            'gsm':gsm,  #利用hex()函数将pn转换为十六进制并获取前两位
            TIME:'', #时间戳(采用time.time()获取)
        }    

  • 本次文章分享就到这,有什么疑问或有更好的建议可在评论区留言,也可以私信我,感谢阅读~

猜你喜欢

转载自blog.csdn.net/weixin_47971206/article/details/115942192