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 tqdm


def configs(search, page, number):
    """

    :param search:
    :param page:
    :param number:
    :return:
    """
    url = 'https://image.baidu.com/search/acjson'
    params = {
        "tn": "resultjson_com",
        "logid": "11555092689241190059",
        "ipn": "rj",
        "ct": "201326592",
        "is": "",
        "fp": "result",
        "queryWord": search,
        "cl": "2",
        "lm": "-1",
        "ie": "utf-8",
        "oe": "utf-8",
        "adpicid": "",
        "st": "-1",
        "z": "",
        "ic": "0",
        "hd": "",
        "latest": "",
        "copyright": "",
        "word": search,
        "s": "",
        "se": "",
        "tab": "",
        "width": "",
        "height": "",
        "face": "0",
        "istype": "2",
        "qc": "",
        "nc": "1",
        "fr": "",
        "expermode": "",
        "force": "",
        "pn": str(60 * page),
        "rn": number,
        "gsm": "1e",
        "1617626956685": ""
    }
    return url, params


def loadpic(number, page):
    """

    :param number:
    :param page:
    :return:
    """
    while (True):
        if number == 0:
            break
        url, params = configs(search, page, number)
        result = requests.get(url, headers=header, params=params).json()
        url_list = []
        for data in result['data'][:-1]:
            url_list.append(data['thumbURL'])
        for i in range(len(url_list)):
            getImg(url_list[i], 60 * page + i, path)
            bar.update(1)
            number -= 1
            if number == 0:
                break
        page += 1
    print("\nfinish!")


def getImg(url, idx, path):
    """

    :param url:
    :param idx:
    :param path:
    :return:
    """
    img = requests.get(url, headers=header)
    file = open(path + 'maintenanceWorker_' + str(idx + 1) + '.jpg', 'wb')
    file.write(img.content)
    file.close()


if __name__ == '__main__':
    search = input("请输入搜索内容:")
    number = int(input("请输入需求数量:"))
    path = 'E:\data\MaintenanceWorker/'
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'}

    bar = tqdm.tqdm(total=number)
    page = 0
    loadpic(number, page)


谷歌图片爬取见:https://blog.csdn.net/Wenweno0o/article/details/121487706

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐