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爬虫:爬取百度图片

前言

由于工作需要,需要从网上获取大量图片。百度图片就是一个动态网页,需要使用动态爬取功能进行爬图片。

涉及到的库

import requests
import json
import os

实现过程

- 下载链接分析
首先,打开百度,搜索一个内容
在这里插入图片描述

然后,打开抓包工具,选择XHR选项,按Ctrl+R,然后你会发现,随着你鼠标的滑动,右侧会出现一个又一个的数据包。

这里简单说一下什么是抓包工具:

  • 什么是抓包?
    即抓取我们本地电脑与远端服务器通信时候所传递的数据包
  • Chrome浏览器讲解:
    Chrome 开发者工具是一套内置于Google Chrome中的Web开发和调试工具,可用来对网站进行迭代、调试和分析
  • 如何打开Chrome开发者工具?
    在Chrome界面按F12 or在页面元素上右键点击,选择“检查”
  • 开发者工具的结构
    在这里插入图片描述
    1、Elements(元素面板):使用“元素”面板可以通过自由操纵DOM和CSS来重演您网站的布局和设计。
    2、Console(控制台面板):在开发期间,可以使用控制台面板记录诊断信息,或者使用它作为 shell,在页面上与JavaScript交互
    3、Sources(源代码面板):在源代码面板中设置断点来调试 JavaScript
    ,或者通过Workspaces(工作区)连接本地文件来使用开发者工具的实时编辑器
    4、Network(网络面板):从发起网页页面请求Request后得到的各个请求资源信息(包括状态、资源类型、大小、所用时间等),并可以根据这个进行网络性能优化
    5、Performance(性能面板):使用时间轴面板,可以通过记录和查看网站生命周期内发生的各种事件来提高页面运行时的性能
    6、Memory(内存面板):分析web应用或者页面的执行时间以及内存使用情况
    7、Application(应用面板):记录网站加载的所有资源信息,包括存储数据(Local Storage、Session
    8、Storage、-IndexedDB、Web SQL、Cookies)、缓存数据、字体、图片、脚本、样式表等
    9、Security(安全面板):使用安全面板调试混合内容问题,证书问题等等
    10、Audits(审核面板):对当前网页进行网络利用情况、网页性能方面的诊断,并给出一些优化建议。比如列出所有没有用到的CSS文件等

抓取到的数据包如下:
在这里插入图片描述
然后,选一个包,查看它的headers,如图:
在这里插入图片描述

截取之后,保存下来,作为一个URL
剩余的其他参数也可以保存下来使用,如图:
在这里插入图片描述

结果展示:
在这里插入图片描述

- 代码分析

# -*- coding: UTF-8 -*-"""
import requests
import json

def configs():
    """
    参数
    :return:
    """
    # 保存地址
    path = 'E:\data'
    # url链接
    url = 'https://image.baidu.com/search/acjson?'
    # 导入一个请求头
    header = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
    # 其他参数
    param = {
        'tn': 'resultjson_com',
        'logid': '7630384231337614829',
        'ipn': 'rj',
        'ct': '201326592',
        'is': '',
        'fp': 'result',
        'fr': '',
        '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': '1',
        'expermode': '',
        'nojc': '',
        'isAsync': '',
        'pn': '30',
        'rn': '30',
        'gsm': '1e'
    }
    return path, url, header, param


def download_pic(page):
    """
    下载图片
    :param page:
    :return:
    """
    page = int(page) + 1
    n = 0
    pn = 1  # pn代表从第几张图片开始获取,百度图片下滑时默认一次性显示30张
    path, url, header, param = configs()
    for m in range(1, page):
        # 定义一个空列表,用于存放图片的URL
        image_url = list()
        # 将编码形式转换为utf-8
        response = requests.get(url=url, headers=header, params=param)
        response.encoding = 'utf-8'
        response = response.text  # 把字符串转换成json数据
        data_s = json.loads(response)
        a = data_s["data"]  # 提取data里的数据
        for i in range(len(a) - 1):  # 去掉最后一个空数据
            data = a[i].get("thumbURL", "not exist")  # 防止报错key error
            image_url.append(data)

        for image_src in image_url:
            # 提取图片内容数据
            image_data = requests.get(url=image_src, headers=header).content
            image_name = '{}'.format(n + 1) + '.jpg'  # 图片名
            image_path = path + '/' + image_name  # 图片保存路径
            with open(image_path, 'wb') as f:  # 保存数据
                f.write(image_data)
                print(image_name, '下载成功啦!!!')
                f.close()
            n += 1
        pn += 29


if __name__ == '__main__':
    keyword = input('请输入你想下载的内容:')
    page = input('请输入你想爬取的页数:')
    download_pic(page)


  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:21:00  更:2021-11-20 18:23:27 
 
开发: 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/16 0:25:24-

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